上一篇文章我们介绍了HTTP请求过程过的第一步:DNS解析过程。 今天要介绍的是TCP三次握手,四次挥手断开连接的内容就留到下一篇再说。 不知道TCP是啥的请先自行脑补,我们直接来看下报文结构: TCP数据报结构下面这几个缩写需要重点了解 Seq:序列号,用来标识数据包; Ack:确认号,表示确认; SYN:建立新连接的标识; FIN:断开连接的标识。 三次握手过程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次,也可自定义。 |
|
来自: 昵称11935121 > 《未命名》