本文最后更新于 2024-07-16,文章内容可能已经过时。

三次握手(建立连接)

  1. 客户端到服务器的SYN: 客户端选择一个初始序号 x,发送一个SYN报文段给服务器,其中包含SYN标志位设为1,初始序号为 x

  2. 服务器到客户端的SYN+ACK: 服务器收到客户端的SYN报文后,如果同意连接,选择自己的初始序号 y,发送一个SYN+ACK报文段给客户端,其中SYN和ACK标志位都设为1,确认序号 ack 设置为 x+1,自己的序号 seq 设置为 y

  3. 客户端到服务器的ACK: 客户端收到服务器的SYN+ACK报文后,检查ACK是否正确,然后发送一个ACK报文段给服务器,其中ACK标志位设为1,序号 seq 设置为 x+1,确认序号 ack 设置为 y+1

完成这三次握手后,连接就成功建立,客户端和服务器可以开始传输数据。

四次挥手(终止连接)

  1. 客户端到服务器的FIN+ACK: 客户端决定关闭连接,发送一个FIN+ACK报文段给服务器,其中FIN和ACK标志位都设为1,序号 sequ,确认序号 ackv

  2. 服务器到客户端的ACK: 服务器收到FIN+ACK报文后,发送一个ACK报文段给客户端,确认序号 ack 设置为 u+1,序号 seqv

  3. 服务器到客户端的FIN+ACK: 服务器准备好关闭连接后,发送一个FIN+ACK报文段给客户端,其中FIN和ACK标志位都设为1,序号 seqw,确认序号 acku+1

  4. 客户端到服务器的ACK: 客户端收到服务器的FIN+ACK报文后,发送一个ACK报文段给服务器,确认序号 ack 设置为 w+1

完成这四次挥手后,连接被成功关闭。TCP连接是全双工的,因此每个方向都可以独立地开始关闭过程。

为什么需要三次握手和四次挥手?

  • 三次握手 确保了双方都准备好发送和接收数据,同时防止了连接请求的重复。例如,一个旧的连接请求可能在网络中延迟了,然后在新连接建立后到达服务器。

  • 四次挥手 允许每个方向独立关闭,因为TCP连接是双向的。每个端点都可以独立地结束它的发送和接收操作。

这些机制确保了TCP连接的可靠性和数据传输的稳定性。