美文网首页
5.TCP的四次挥手

5.TCP的四次挥手

作者: 那钱有着落吗 | 来源:发表于2021-04-14 09:31 被阅读0次
    image.png

    我这里大概讲一下:
    1.客户端在主动关闭的时候,发送flag为FIN=1的包给服务端,这个时候客户端的状态变为FIN_WAIT-1
    2.服务端接收到了客户端的FIN包之后,发送一个确认ACK包,自己变成了了close-wait状态,客户端接收到了数据之后状态变为 wait2,服务端之后要关闭后,还需要把所有数据给发送完毕才能真正关闭
    3.当服务端数据发送完毕,发送第二次ACK包给客户端,同时状态变为了last-ack,客户端接收到之后会发送给服务端一个ACK包,然后会等待 2分钟的最长报文等待时间,在这个时间段如果没有重连就会处于关闭状态,服务端接收到数据之后状态变更为closed。

    为什么会有time-wait状态呢?

    image.png

    第一个原因就是需要确保有足够的时间让对方收到ACK包, 如果服务端没有收到ACK包,就会重发FIN包给客户端,一来一去正好是两个MSL,也就是2分钟的时间;
    第二个原因就是允许老的重复分节在网络中消逝。(TCP中是可靠的服务,当数据包丢失会重传,当有数据包迷路的情况下,如果不等待2MSL时,当客户端以同样地方式重新和服务建立连接后,上一次迷路的数据包这时可能会到达服务,这时会造成旧包被重新读取)。

    image.png image.png

    服务器出现大量time-wait状态原因

    image.png image.png image.png

    相关文章

      网友评论

          本文标题:5.TCP的四次挥手

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