端口哈希桶
在inet_csk_get_port函数中的变量声名中有如下几个结构体:
struct inet_hashinfo *hinfo = sk- >sk_prot- >h.hashinfo;struct inet_bind_hashbucket *head;struct inet_bind_bucket *tb = null;其中strcut inet_hashinfo是用来封装各种协议的绑定哈希表,具体定义如下所示,这个结构体在[linux内核角度分析服务器listen细节中介绍过,具体地,struct inet_bind_hashbcket是bind相关的哈希桶,bhash_size是bind哈希桶的大小。
struct inet_hashinfo { struct inet_ehash_bucket *ehash; spinlock_t *ehash_locks; unsigned int ehash_mask; unsigned int ehash_locks_mask; struct inet_bind_hashbucket *bhash; unsigned int bhash_size; struct inet_listen_hashbucket listening_hash[inet_lhtable_size] ____cacheline_aligned_in_smp;};struct inet_bind_hashbcket哈希桶的具体定义如下,其中chain代表着各个桶的哈希队列,用来链接具有同一哈希值的哈希元素
struct inet_bind_hashbucket { spinlock_t lock; struct hlist_head chain;};具体每个桶结构是struct inet_bind_bucket:
struct inet_bind_bucket { possible_net_t ib_net; unsigned short port; signed char fastreuse; signed char fastreuseport; kuid_t fastuid;#if is_enabled(config_ipv6) struct in6_addr fast_v6_rcv_saddr;#endif __be32 fast_rcv_saddr; unsigned short fast_sk_family; bool fast_ipv6_only; struct hlist_node node; struct hlist_head owners;};初次看到这几个结构体可能比较乱,下面用图进行描述:
由上图所示,每个绑定的端口号经过哈希计算都会挂在相应的chain链表上,chain链表上是一个个的桶结构,同一个chain上的节点具有相同的哈希值(通过端口号计算),桶结构inet_bind_bucket包含对应的端口号port、owners等信息,owners对应:该端口号对应的tcp_sock实例,如果该port支持复用,那么owners可能挂着多个tcp_sock节点。
在struct inet_bind_bucket中有一个关键的成员:signed char fastreuse
为了避免每次都遍历 inet_bind_bucket 的 owners 字段 来获知是否所有的 sock 都设置了 sk_reuse 字段,并且不是在 tcp_listen 状态。在 inet_bind_bucket 结构体中设置了 fastreuse 字段。如果 owners 没有元素,那么这 个字段为真。此后每次添加一个新的 sock 到 owners 中的时候,如果它设置了 sk_reuse 并且不在 tcp_listen 状态,就维持 fastreuse 为真,否则设置它为假。
高智能土壤多参数测试系统是什么,有什么作用?
回映短讯 | 回映电子受邀参加桂电成电“自动化与智能制造”专题研讨会
功率半导体器件的分类与封装介绍
Telit展示最新系列M2M无线通讯模块
工业机器人如何才能做到智能生产
Linux内核分析 端口哈希桶
分核锁与锁步有何不同
三菱PLC之间的通讯不需要编程吗
这款充电宝要逆天!能当插座给家电供电还可更换电池!
oppor11什么时候上市?oppo也要做无边框?oppor11四个摄像头,骁龙660+售价2799,下月发布!
关于接地接触器柜的简单介绍
傲科正式进军400G/800G光电芯片领域, 引领硅光行业发展方向
华为“刀片式基站”获2018年度国家科学技术进步奖一等奖
目前市场上常见的道闸防砸技术的介绍
江门尺寸检测服务三维激光扫描3D偏差检测技术服务
视频摄像系统的各种集成视频滤波放大器分析
测量神经网络的抽象推理能力
鸿海拟550亿日圆吞并夏普三工厂
怎样设计一个同步FIFO?(3)
电压跟随器反馈加电阻是为什么 电压跟随器的工作原理