主动端time-wait是必须的一个状态,理由有二:
1,主动端主动断开后经过了一系列阶段后最终进入了time-wait,而被动端发送给主动端的一个序列号为s数据d被中间路由器暂存了,主动端的time-wait超时,此时主动端又发起了一个对相同被动端的连接(地址/端口相同),三次握手过后,被暂存的数据d终于被路由器发送到了主动端,此时主动端正要接收序列号为s的数据,那么这种处理产生的结果就是不可预测的了。
2,如果恰好这个被暂存的数据是前一次被动端由于没有收到主动端最后的ack而重新发送的fin分组,那么主动端就会认为是被动端断开了连接...因此time-wait是必要的,并且这也解释了为何在主动端发起连接的时候,序列号要随机生成。