对TCP三次握手和四次挥手的理解

359 阅读2分钟

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

TCP是面向连接的可靠的传输层协议,所谓的面向连接指的是在正式传输数据之前,需要在两个端口之间建立可靠的连接。之所以需要先建立连接,是因为信道是不可靠的,但是需要在不可靠的信道上可靠的传输数据。所以需要通过相互握手确定当前信道、通信双方收发能力是否正常,这就是TCP相对于UDP可靠的地方。如果像UDP一样不需要握手,上来就发送数据,对方收到收不到也不管,那就是不可靠的。

为什么是三次握手,而不是2次或者4次?

三次握手是通信双方能确认自己和对方收发能力是否正常的最少次数 screen

首次SYN请求发出后因为某些网络节点原因阻塞在网络空间内,在TCP断开连接后服务器又收到这个建立连接请求,如果采用两次握手,那么服务器返回ACK+SYN请求后就会一直等待客户端,会造成资源浪费。而采用三次连接,服务器在等待一段时间后发现客户端没有返回ACK请求,就知道客户端并没有要求建立连接,避免资源浪费

为什么断开连接需要四次挥手

因为TCP是全双工的,主动断开的一方发送FIN请求仅仅代表自己没有数据要发送了,但是仍然能够接收数据。所以想要完全断开收发两条信道需要四次挥手

为什么四次挥手后主动断开方需要等待2MSL?

  1. 防止最后一次ACK请求对方没有收到,在超时后B重新发送FIN+ACK,A重发ACK
  2. 等待2MSL后,失效的SYN连接请求都会在网络中消失