一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手_哔哩哔哩_bilibili

三次握手-建立连接

  1. SYN是Synchronize Sequence Numbers

三次握手的目的是为了让客户端和服务端在不可靠的信道上建立起可靠的连接。
首先客户端发起建立连接的请求,
image.png

三次握手而不是两次握手的原因

如果省略掉第三次从客户端向服务端发送的ack,那么会出现如下的极端情况:客户端向服务端发送SYN后,SYN滞留在某个网络节点中,于是客户端超时重发,服务端收到第二个SYN后,回复SYN+ack来确认连接请求,这时之前滞留的第一个SYN再发送到服务端中,服务端以为是新的连接建立请求,这时再回复客户端SYN+ACK,在客户端接收到SYN+ACK后,会自动忽略掉该报文,这样就会出现状态不一致,客户端以为只有一次连接建立,而服务端会认为有两次连接建立,因此需要第三次握手,客户端向服务端发送ACK来最终确认连接建立,并开始传输数据。

四次挥手

  1. 四次挥手双方都可以发起
  2. 四次挥手的原因:被动断开方数据可能没发送完,因此需要close-wait状态来发送数据,由被动断开方在发送完数据后,主动发送一个FIN,进入last-ack状态。
  3. 主动断开方进入time-wait状态而不是立即closed的原因:防止ack包在网络中丢失,导致被动断开方一直在last-ack状态。因此通过time-wait状态,如果ack丢了,被动断开方超时时会重发FIN。

image.png