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


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

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


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

首先关于TCP协议在协议栈里的注册相关的有三个地方,分别是使用proto_register函数、sock_register函数和使用inet_register_protosw函数,这三个注册的函数都在inet_init初始化的时候进行的。


PART1.内核为协议栈内存的初始化与分配

proto_register(&tcp_prot, 1)主要功能是为TCP协议分配slab也就是在内核空间中为相关协议分配需要使用的cache, 包括tcp->slab, tcp->rsk_prot,tcp->twsk_prot,相关的源码流程图如下:



PART2: 与协议相关的处理函数的注册

sock_register主要功能是为socket注册与协议相关的处理函数,也就是内核中协议栈部分的回调函数的注册,充分的体现了面向对象的思想,相关的源码流程如下:


在上图中可以看到,在用户空间编写的代码程序在调用sock这个API去创建socket的时候,内核已经做好了一系列非常充分的准备。


PART3:内核协议栈协议列表的注册

inet_register_protosw主要的功能是把相关协议注册到协议栈中的链表中,此处仍以TCP协议为例。inet_register_protosw的核心源码流程如下:



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



Logo

更多推荐