ZoundryDocument
Tcp通过三次握手建立链接,4次握手释放链接,如图:
这里我们关心四次挥手。
由上图可以看到,server段需要等待2maximum segment lifetime(MSL),MSL值得是数据报文在网络中能够存活的假设的最长时间(通过跳数最大为255估算),MSL的值在RFC 1122中为2min,在Berkeley系列实现中,为30s,所以我们关闭一个socket以后,需要等待1min-4min,才能使用相同的端口。
加入这段时间,主要是为了处理由于网络中某些路由节点宕机以后,FIN包获得其他路由发送至目的地,路由节点重启以后,它继续宕机前的逻辑,继续向目的地发送FIN包,导致目的地接受到两个FIN包。
如果基于某种特殊的原因,必须在Time_Wait状态建立新的链接,可以设置SO_REUSEADDRESS属性。但是,我们可能会接受到上一个链接的数据。