为什么TCP连接的客户方在Time-Wait状态下必须等待2MSL的时间?答:第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。第二,防止 “已失效的连接请
第一,为了保证A发送的最后一个ACK报文能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法...
为了如此极端的状况,让大部分连接都等待极长的TIME-WAIT显然是不划算的。 其实这里我们可以推测出,对于原因1,TIME-WAIT的目的是在允许一次丢失ACK的情况下,尽量接收到服务端的重传请求。基于这个原因,我们可以想当然地将TIME-WAIT时长设置为RTO,但是首先,目前的TCP实现中,通信双方的RTO是分别计算的,一方无法直接知道...
为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢? 1、为了保证 A 发送的最后一个 ACK 报文段能够到达 B。 A 发送的 ACK 报文段有可能丢失,因而使处在 LAST-ACK 状态的 B 收不到对方已发送的 FIN + ACK 报文段的确认。这时 B 会超时重传这个 FIN+ACK 报文段,而 A 就能在 2MSL 时间内(超时 + 1MSL 传...
处于TIME_WAIT 状态的一端在收到重传的 FIN 时会重新计时(rfc793以及LinuxKernel源代码tcp_timewait_state_process函数)。 下面我们开始分析为什么在发送了最后一个 ACK 报文之后需要等待 2MSL 时长来确保没有任何属于当前连接的报文还存活于网络之中(前提是在这 2MSL 时间内不再收到对方的 FIN 报文,但即使收到...
这里假设主动关闭方为A,被动关闭方为B,TIME_WAIT状态是在主动关闭方A接收到主动关闭的FIN报文的ACK...
公告65、为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态? 第一种回答 理论上,四个报文都发送完毕,就可以直接进入CLOSE状态了,但是可能网络是不可靠的,有可能最后 一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。 第二种回答 对应这样一种情况,最后客户端发送的ACK = 1给服务端的过程中丢失了...
TIME WAIT状态需要持续的时间应该参考对端的RTO(重传超时时间)以及MSL(报文在网络中的最大生存时间)来计算而不是仅仅按MSL来计算。 假设A发送FIN到B,B回一个ACK给A,两次挥手轻松结束。然后被动关闭方B发送FIN给A,A收到后回ACK给B,A同时进入time_wait状态。 讨论: 1)假设B收到了最后一个ACK,但没有重发FIN...
1. 为什么需要TIME_WAIT状态?为什么TIME_WAIT的时长是2*MSL? 原因1:防止连接关闭时四次挥手中的最后一次ACK丢失: TCP需要保证每一包数据都可靠的到达对端,包括正常连接状态下的业务数据报文,以及用于连接管理的握手、挥手报文,这其中在四次挥手中的最后一次ACK报文比较特殊,TIME_WAIT状态就是为了应对最后一条ACK丢...
tcp time_wait等待2MSL有两个原因 1:如果最后一个ACK丢失,对端需要重传FIN,如果直接是CLOSED的状态,那对于重传的FIN,肯定是RST响应 2:为了保证最后一个ACK正常的丢失,因为不确认对方是否收到,需要等1个MSL,至于另一个MSL,能找到比较信服的解释就是被动关闭的一方在收到ACK的那一刻之前重发了FIN,为了保证这个FIN...