三次握手、四次挥手的理解

  • Post author:
  • Post category:其他


下面是个人对三次握手和四次挥手的理解。


1、三次握手

第一次握手:客户端向服务器发起连接请求(此时要确认客户端能不能发)。

第二次握手:服务器收到客户端的连接请求后,会给一个应答,以及请求连接的数据包(意味着服务器收到了客户端连接的请求,以此证明服务器能够接收,而且也证明了客户端能发。同时,服务器也给客户端发起了连接请求,服务器要确认自己能不能发)。

第三次握手:最后客户端给服务器一个应答,证明服务器是可以发的,客户端也可以收,即连接成功。


2、四次挥手

第一次挥手:客户端向服务器发起断开的请求(意味着客户端再不发送数据了,并不代表完全断开连接)。

第二次挥手:服务器收到后,会先给客户端一个应答(服务器可能还要发送数据,就不能立即关闭服务器到客户端的数据通道,只能先确认服务器收到了客户端发送要断开的请求,等服务器再无发送的数据之后再确认是否要断开连接)。

第三次挥手:服务器发起断开连接的数据包(意味着客户端知道了服务器已经发完数据)。

第四次挥手:客户端给服务器一个应答,证明服务器收到了断开连接的数据包,即断开连接。


3、为什么是三次握手,而不是两次?

答:两次不安全,TCP通信要确保双方都具有收发的能力。


4、为什么是四次挥手,而不是三次?

答:对于四次挥手,由于TCP是全双工通信,主动关闭方发送断开请求不代表完全断开连接,只能表示主动关闭方不在发送数据了。而接收方可能还要发送数据,就不能立即关闭服务器端到客户端的数据通道,只能先确认服务器端接收到了客户端发送要断开的信息,等服务器再无发送的数据之后再确认是否要断开连接,所以四次挥手时需要四次数据包的交互。


5、为什么四次挥手要等待2MSL

(MSL指的是报文在网络编程中最大生存时间)


答:在客户端发送对服务器端的断开请求的确认包后,这个确认包可能到达不了,服务器如果接受不到这个确认包就会重新发送断开请求,所以客户端发送确认包后需要留出2MSL时间。



版权声明:本文为weixin_73231980原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。