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

题记:本系列文章的目的是抛开书本从源代码和使用的角度分析Linux内核和相关源代码,byhankswang和你一起玩转linux开发

轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com微笑

欢迎加入到CHLK - Linux开发交流群 QQ:327084515 讨论Linux开发相关问题


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


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

从内核的源代码中可以看到,在inet_init中分别对ARP/IP/TCP/UDP/ICMP协议和IPv4proc部分进行了初始化,对除了TCP协议之外的协议的初始化我们会在其他的博文中介绍。



协议注册部分请参见博文: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。


本文如有纰漏请指出并交流,邮箱byhankswang@gmail.com



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值