TCP三次握手
SYN建立连接 ACK数据确认 seq序列号
第一次:客户端client向服务端发送连接建立请求SYN seq=x的包,随后客户端进入SYN_SENT状态 服务端一直处于监听状态。
第二次:服务器收到SYN报文段,需进行确认包即ACK=x+1 同时也需要发一个连接建立请求SYN seq=y 后进入SYN_RCVD状态表示收到请求并已反馈。
第三次:客户端收到服务端的数据包后向服务端发送ACK = y+1 表示收到并确认,发送后客户端和服务端都进入ESTABLISHED状态,表示TCP连接已建立。 ★ 每次收到对方数据包后都会回复一个ACK确认
关于seq及中的x,y详解: 在第一次发送中,客户端随机选取一个序列号作为自己的初始序号(x)发送给服务端。
在第二次发送中,服务端因为已经收到了序列号为x的数据包,要对它做出确认故ACK=x+1,同时将自己此次的数据包序列号(y)发送给客户端即seq=y
在第三次发送中,客户端收到了服务端的消息对它进行确认ACK=y+1,此次数据包的seq=x+1
TCP四次挥手
第一次挥手:可以是客户端也可以是服务端(主动的一方会进入两个状态:FIN_WAIT_1,FIN_WAIT_2)主机1发送FIN(请求关闭连接) seq=x+2 ACK=y+1(对上一条最后的数据进行确认)发送给主机2随后进入FIN_WAIT_1状态。
第二次挥手:主机2收到数据包后对其做出确认回复ACK=x+3,主机1收到其回复后进入FIN_WAIT_2状态。
第三次挥手:主机2向主机1发送FIN(请求关闭连接)及 seq=y+1数据包同时主机2进入LAST_ACK状态
第四次挥手:主机1对其做出确认回复ACK=y+2数据包然后主机1进入TIME_WAIT状态。最后主机2收到主机1的确认后就关闭连接,此时主机1等待主机2却没有收到回复,证明主机2已关闭连接,主机1也就关闭了连接。
|