Linux从用户层到内核层系列 - TCP/IP协议栈部分系列1: linux内核协议栈协议的注册
题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com博文1:协议的注册(以TCP协议为入口分析协议栈协议的注册与使用,其他协议类型触类旁通)首先关于TCP协议在协议栈里的注册相关的有三个地方,分别是使用proto_register函数、sock
题记:本系列文章的目的是抛开书本从源代码和使用的角度分析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
更多推荐
所有评论(0)