Linux從用戶層到內核層系列 - TCP/IP協議棧部分系列1: linux內核協議棧協議的註冊

題記本系列文章的目的是拋開書本從源代碼和使用的角度分析Linux內核和相關源代碼,byhankswang和你一起玩轉linux開發


輕鬆搞定TCP/IP協議棧,原創文章歡迎交流, [email protected]微笑

歡迎加入到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的核心源碼流程如下:



本文如有紕漏請指出並交流,郵箱[email protected]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章