三握四挥?

tim-qtp...大约 1 分钟TCP计网

1、为什么要三次握手?

image-20241220001941255
image-20241220001941255

最主要的目的就是双方确认自己与对方的发送与接收是正常的。

第一次握手Server 确认了对方发送正常,自己接收正常;

第二次握手Client 确认了:对方发送、接收正常

第三次握手Server 确认了:接收正常

  • 发送方通过 SYN 控制消息并携带自己期望的初始序列号 SEQ 给接收方
  • 接收方收到 SYN 消息之后,通过 ACK 控制消息以及 SEQ+1 来进行确认,并带上自己的 SEQ
  • 发送方通过 ACK 控制消息以及接收方的 SEQ+1 来进行确认,并且还能够在第三次握手通信的同时,直接携带数据进行传输

2、为什么要四次挥手?

image-20241219233644469
image-20241219233644469

客户端发送完ACK包后,会进入超长等待时间,而服务端收到ACK后会立即关闭连接,这是第四次挥手。

那为什么客户端需要等待超时时间呢?

这是为了保证服务端已经收到ACK包,假如客户端在发送完ACK后,就立即关闭连接,而这时ACK包传输时丢失,服务端将一直停留在最后确认状态。

假如等待一会儿,这时服务端因为没有收到ACK包,会重发FIN包,客户端收到响应后重发ACK包并刷新超时时间。

这和三次握手一样,是为了在不可靠的网络链路中进行可靠的连接断开确认。