接TCP三次握手 这篇文章讲述TCP断开连接时的四次挥手过程。
第一步:
主机1会主动发送FIN=1标志, sequence number1给到主机2,确认单方面关闭连接, 不再向主机2发送数据。
第二步:
主机2收到确认FIN标志后,发送ACK=1, ack number1 = sequence number1 + 1给到主机1, 确认收到了主机1的请求。
第三步:
主机2发送ACK=1 sequence number2, FIN=1给到主机1,确认主机2单方面也关闭了连接,不再向主机1发送数据。
第四步:
主机1收到数据后 ack number= sequence number2 + 1, ack=1发送给主机2,主机2确认。
如下图所示:
为什么握手只需要三次而挥手需要四次呢?
这是因为在握手中双方都有一个SYN序列数的初始化过程需要传递给对方确认,而挥手发送的FIN只是一个单向的标志,只代表着其中的一方如上图的主机1, 而另一方主机2可能还存有数据没有发送给主机1的情况,这个时候收到主机1的FIN后,给主机1一个确认收到的消息后,可以在传输完数据之后再向主机1发送一个单方面关闭连接的FIN给到主机1. 最后双方才断开连接。