执行主动关闭(调用close函数)的一端会经历TIME_WAIT状态,这个状态的持续时间是最长分节生命期(maximum segment lifetime, MSL)的2倍。任何TCP实现都必须指定MSL 的值。一般这个值会在30秒到2分钟之间,即TIME_WAIT状态可能存在1到4分钟的时间。MSL是任何IP包能够在网络中存活的最长时间。每个数据报含有一个称为跳限的8位字段,最大值为255,但仍然假设具有最大跳限的分组在网络中存在的时间不超过MSL的规定时间。 TIME_Wait状态存在有2个理由:1)可靠地实现TCP全双工连接的中止。2)允许老的重复分节在网络中消逝。 ![]() 理由1的解释:在TCP断开连接(一般由客户端发起)四次挥手的过程中,客户端发送的ACK N+1因为网络原因丢失了,则服务器需要重发它的FIN N。所以虽然此时客户端已经调用了close函数,但是仍然需要一个中间状态重新处理FIN N,并且发送ACK N+1。 理由2的解释:如果由于网络原因,导致某个连接的重复分组在该连接已经断开的时候收到,进而被误认为是一次新的连接。为了杜绝这一点,TCP将不给处于TIME_wait状态的连接发起新的连接(例外:当到达的SYN的序列号大于前一次连接的结束序列号)。 |
|