TCP时间等待定时器处理机制详解
1. 时间等待定时器概述
在网络通信中,TCP连接关闭后会进入TIME_WAIT状态,为了管理处于这个状态的连接,需要使用时间等待定时器。定时器会按照相等的时间间隔处理各个槽位(slot)。如果获得第一个槽位,意味着应将其放置在当前即将最先过期的调度槽位的下一个槽位。
2. 槽位计算与模式切换
首先会计算回收模式(recycle mode)下的槽位。在代码的第529行(cs 10.34)进行回收模式槽位的计算,具体做法是将超时值向上取整为 2 * TCP_TW_RECYCLE_TICK 的倍数,然后将最终值除以 2 * TCP_TW_RECYCLE_TICK 。若计算得到的值超过回收模式的限制,就会切换到非回收模式(non - recycle mode)。
在第531行,会持有全局时间等待锁 tw_death_lock ,因为接下来要操作全局时间等待链。接着会检查时间等待桶(time - wait bucket)是否已经被调度。如果时间等待桶的 pprev_death 字段不为空,说明它已经链接在全局列表中,此时会在第534 - 539行将该桶从列表中移除,并将 tcp_tw_count 减1,因为后续要重新调度它,重新调度会使计数器加1。如果该桶之前未被调度,会对其持有额外的引用,以确保在定时器过期之前不会销毁该时间等待桶。之后会检查基于回收时钟计算的槽位是否超过回收时间等待表持有的最大槽位数 TCP_TW_RECYCLE_SLOTS 。 </
超级会员免费看
订阅专栏 解锁全文
1725

被折叠的 条评论
为什么被折叠?



