三握四挥?
...大约 1 分钟TCP计网
1、为什么要三次握手?
![image-20241220001941255](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20241220001941255.png)
最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手:Server 确认了对方发送正常,自己接收正常;
第二次握手:Client 确认了:对方发送、接收正常
;
第三次握手:Server 确认了:接收正常
- 发送方通过 SYN 控制消息并携带自己期望的初始序列号 SEQ 给接收方
- 接收方收到 SYN 消息之后,通过 ACK 控制消息以及 SEQ+1 来进行确认,并带上自己的 SEQ
- 发送方通过 ACK 控制消息以及接收方的 SEQ+1 来进行确认,并且还能够在第三次握手通信的同时,直接携带数据进行传输
2、为什么要四次挥手?
![image-20241219233644469](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20241219233644469.png)
客户端发送完ACK包后,会进入超长等待时间,而服务端收到ACK后会立即关闭连接,这是第四次挥手。
那为什么客户端需要等待超时时间
呢?
这是为了保证服务端已经收到ACK包,假如客户端在发送完ACK后,就立即关闭连接,而这时ACK包传输时丢失,服务端将一直停留在最后确认状态。
假如等待一会儿,这时服务端因为没有收到ACK包,会重发FIN包,客户端收到响应后重发ACK包并刷新超时时间。
这和三次握手一样,是为了在不可靠的网络链路中进行可靠的连接断开确认。