Linux 中 TCP 核心处理与分段处理机制解析
1. 套接字绑定与哈希表操作
在将套接字绑定到端口时,会进行一系列的操作。首先,让 sk→prev 指向绑定桶( tcp_bind_hashbucket 对象),该对象对应于绑定哈希冲突列表中的条目。接着,将 tcp_tw_bucket 对象与和 tcp_bind_bucket 对象相关联的套接字链( tb→owners )进行链接。
之后,需要从已建立列表中移除套接字的条目。这需要持有已建立哈希表的头锁,通过访问与套接字对应的 tcp_ehash_bucket 对象来获取该锁,而 tcp_ehash[] 表中的索引存储在套接字的 hashent 字段中。持有头锁后,将套接字从哈希表 tcp_ehash[] 中解除链接,套接字通过 next 和 pprev 字段在已建立的冲突哈希链中进行链接。
下一步是将套接字链接到时间等待哈希桶中。时间等待套接字没有单独的桶,该桶是 tcp_ehash[] 表的一部分, tcp_ehash[] 的下半部分用于时间等待套接字。要访问哈希桶的头部,只需将 tcp_ehash_size 加到已建立哈希桶的头部即可,套接字通过 next 和 pp
超级会员免费看
订阅专栏 解锁全文
230

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



