分享

HTTP请求过程(二)—— TCP报文结构以及三次握手

 昵称11935121 2018-03-28

HTTP请求过程(二)—— TCP报文结构以及三次握手

上一篇文章我们介绍了HTTP请求过程过的第一步:DNS解析过程。

今天要介绍的是TCP三次握手,四次挥手断开连接的内容就留到下一篇再说。

不知道TCP是啥的请先自行脑补,我们直接来看下报文结构:

HTTP请求过程(二)—— TCP报文结构以及三次握手

TCP数据报结构

下面这几个缩写需要重点了解

Seq:序列号,用来标识数据包;

Ack:确认号,表示确认;

SYN:建立新连接的标识;

FIN:断开连接的标识。

三次握手过程

HTTP请求过程(二)—— TCP报文结构以及三次握手

1.当客户端请求建立连接后,TCP协议会设置SYN标志位和Seq序号。向服务器端发送数据包,然后进入了SYN-SEND状态。

2.服务器端收到该数据包后,检测到SYN标志位,同时会设置SYN和ACK标志位,返回数据包给客户端,之后进入SYN-RECV状态。

3.客户端收到确认包后,会检测ACK标志位的值,如果正确,客户端进入ESTABLISED状态,连接建立成功。

4.服务器端收确认包后,检测ACK标志位,如果正确,服务器也进入ESTABLISED状态,至此,双向连接建立成功。

经过上面的三次握手,双向连接建立成功之后,就可以开始发送数据了。为了保证数据的准确性,Seq和Ack需要约定好:

第一次消息发送时Seq为系统生成;

Ack号 = Seq号 + 传递的字节数 + 1

而之后发送的Seq号与接收到的Ack数值相同

为什么握手需要三次?

以上图为例,假如服务端最后没有收到Ack确认包,就无法知道客户端是否建立连接成功,这样服务端将拒收任何来自客户端的消息。

超时重传

假如在一定时间内发送方没有收到目标机器传回的确认包,那么就会启动超时重传机制,重传的次数一般为3次,也可自定义。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多