美文网首页
网络之tcp的四次挥手

网络之tcp的四次挥手

作者: 谜00016 | 来源:发表于2019-08-23 11:29 被阅读0次

说说tcp的四次挥手

答:首先说明的是“挥手”是为了终止连接。

tcp四次挥手示意图 关于四次挥手的流程,可以通过上图简单表示出来。
第一次挥手
Client发送一个FIN,用来关闭数据传输,此时CLient进入FIN-WAIT-1阶段。假设seq=u,FIN=1

第二次挥手
SERVER端收到FIN请求后,发送一个ACK来进行确认回复。其中ACK=1,ack=u+1,seq=v。当Client收到这个回复,Client就会进入FIN-WAIT-2阶段。

第三次挥手
在SERVER端将最后的数据传输后,服务端会发送一个FIN来告知最后的数据已经传输完成。此时服务端进入LAST-ACK阶段。FIN=1,ACK=1,ack=u+1,假设seq=w。

第四次挥手
客户端收到服务发送的FIN之后,会进入TIME-WAIT阶段,在这个阶段,最多等待2*MSL时间(ps:MSL是Maximum Segment Lifetime的英文缩写,含义是报文最大生存时间)。然后发送一个ACK给服务端,告诉服务端已接收到FIN,服务端你可以关闭了。ACK=1,seq=u+1,ack=w+1。

说说为什么客户端TIME-WAIT这个阶段存在的意义。

客户端收到服务发送的FIN之后,会进入TIME-WAIT阶段,在这个阶段,最多等待2*MSL时间(ps:MSL是Maximum Segment Lifetime的英文缩写,含义是报文最大生存时间)。
这个阶段存在的意义有两个

  • 能最大程度的确保,当客户端最后一个确认报文丢失,服务端会超时重传FIN+ACK,而客户端就能在2MSL时间内收到这个重传的FIN+ACK,客户端可以再重新传ACK确认报文,重启2MSL计时器。我们想一想,如果没有这个等待时间,客户端发送了ACK之后立即进入关闭阶段,那么当这个ACK丢失,服务端即使超时重传,客户端也无法接收到重传的FIN+ACK,更无法重发ACK给服务端了,这样服务端就没法正常的进入关闭阶段了。
  • 还可以防止“失效的连接请求报文”出现在另一个连接中,因为经过2*MSL,本次连接产生的所有报文段都从网络中消失。

相关文章

网友评论

      本文标题:网络之tcp的四次挥手

      本文链接:https://www.haomeiwen.com/subject/mmsisctx.html