Linux从用户层到内核层系列 – TCP/IP协议栈部分系列2: 协议栈各种协议的初始化

释放双眼,带上耳机,听听看~!

TCP协议的初始化(以TCP协议为入口分析协议栈协议的注册与使用,其他协议类型触类旁通)

TCP/IP协议栈初始化开始的时候由
fs_initcall
函数把
inet_init
注册到
linux
的启动表项中,TCP协议的初始化也是有
inet_init
开始的。

从内核的源代码中可以看到,在
inet_init
中分别对
ARP/IP/TCP/UDP/ICMP
协议和
IPv4

proc
部分进行了初始化,对除了TCP协议之外的协议的初始化我们会在其他的博文中介绍。

Linux从用户层到内核层系列 - TCP/IP协议栈部分系列2: 协议栈各种协议的初始化

协议注册部分请参见博文:
TCP/IP协议栈源码图解分析系列1:协议的注册

其中需要补充说明的部分包括:tcp_sockets_allocated、 tcp_orphan_count,其他的部分图中已经进行了相关的解释。

A. tcp_sockets_allocated

1. tcp_sockets_allocated 类型的定义

struct percpu_counter {

spinlock_t lock;

s64 count;
#ifdef CONFIG_HOTPLUG_CPU

struct list_head list;
/* All percpu_counters are on a list */
#endif

s32 __percpu *counters;
};

struct percpu_counter tcp_sockets_allocated;

2. tcp_sockets_allocated 功能作用

tcp_sockets_allocated 用于对当前TCP sockets数目的统计,相当于TCP的counter, tcp_sockets_allocated 会在tcp_v4_init_sock用于初始化socket的时候加1,其操作函数为
percpu_counter_inc(&tcp_sockets_allocated); 在TCP协议销毁socket的时候通过
tcp_v4_destroy_sock函数调用
percpu_counter_dec(&tcp_sockets_allocated)来对
tcp_sockets_allocated 的值减1.

B.tcp_orphan_count

tcp_orphan_count 被注册到tcp_prot.orphan_count中, orphan_count会在tcp_close的时候对无法完成发送的数据包进行统计,对其操作的函数与tcp_sockets_allocated 相同,都为函数对
percpu_counter_inc与
percpu_counter_dec。

Linux从用户层到内核层系列 - TCP/IP协议栈部分系列2: 协议栈各种协议的初始化Linux从用户层到内核层系列 - TCP/IP协议栈部分系列2: 协议栈各种协议的初始化Linux从用户层到内核层系列 - TCP/IP协议栈部分系列2: 协议栈各种协议的初始化Linux从用户层到内核层系列 - TCP/IP协议栈部分系列2: 协议栈各种协议的初始化Linux从用户层到内核层系列 - TCP/IP协议栈部分系列2: 协议栈各种协议的初始化

给TA打赏
共{{data.count}}人
人已打赏
安全运维

WordPress网站专用docker容器环境带Waf

2020-7-18 20:04:44

安全运维

运维安全-Gitlab管理员权限安全思考

2021-9-19 9:16:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索