TCP连接的关闭

  • 2MSL等待状态 (TIME_WAIT状态)
    • MSL:报文段最大生存时间(IP数据段为TTL)
    • TIME_WAIT(2MSL)是主动关闭方所产生的状态,当其发送最后的ACK之后,还需要等待2MSL时间,以防ACK丢失之后进行重传(等待方会超时并重发最后的FIN)。
    • TCP连接在2MSL等待期间,定义这个连接的插口不能被使用,任何迟到的报文将被丢弃。
    • 执行主动关闭将进入TIME_WAIT,被动关闭不会进入TIME_WAIT状态。
  • 平静时间
    • RFC 793 指出:TCP在重启后的MSL秒内不能建立任何链接,称为平静时间。
    • 这是因为重启后的机器有可能使用重启前处于2MSL等待时间的插口对,从而误将重启前的连接发出但却迟到的报文错误地当做重启后新连接的报文。
  • FIN_WAIT_2 状态
    • 在FIN_WAIT_2状态,我们已经发出了FIN,并且另一端已经对它确认过了,说明我们已经关闭了一个方向的连接。但是,要进入TIME_WAIT状态,还需要接受到对方用来关闭另一个方向的FIN才行。所以,对方如果不发出关闭另一个方向的FIN的话,我们这端就有可能永远处在FIN_WAIT_2状态,而对方一直处于CLOSE_WAIT状态。直到应用层进行关闭。
    • 伯克利实现:如果主动关闭的应用层进行的是全关闭,则设置一个定时器,如果这个连接空闲10分75秒,则将进入CLOSED状态。

TCP连接的关闭
https://quantum-cyborg.github.io/2017/05/26/CS/NetWork/TCP连接的关闭/
作者
碳基机器
发布于
2017年5月26日
许可协议