下面是分析tcp_v4_init的時候了,這個函數(shù)在net/ipv4/tcp_ipv4.c里面:

tcp_inode當(dāng)然就是一個inode節(jié)點了,而tcp_socket等于tcp_inode.u.socket_i,
通過一個指針?biāo)麄冎赶蛲粋€內(nèi)存。
tcp_socket是用來通信使用的,可以叫TCP的controlsocket或者是communication
socket,當(dāng)TCP通信沒有相應(yīng)的socket的時候這個socket就充當(dāng)了socket的角色。比如在一個關(guān)閉端口上收到SYN時發(fā)送RST,或者是在三次握手的時候發(fā)送SYN(還沒有accept產(chǎn)生新的socket)
值得注意的是ops->create函數(shù)的調(diào)用,我們前面見過對于AF_INET來說這個回調(diào)函數(shù)是net/ipv4/af_inet.c的inet_create函數(shù),這個函數(shù)是用來創(chuàng)建一個socket的時候用的,由于函數(shù)比較長,這里先略過分析,這第一次的分析只是一個大致流程的熟悉而已。
由于有socket創(chuàng)建和通信,所以這段代碼是協(xié)議相關(guān)的,所以把這段代碼從原來的tcp.c里面提取了出來
下面是tcp_init函數(shù),它在net/ipv4/tcp.c里面,大體上來說就是創(chuàng)建了幾個hash表和bucket.這段代碼創(chuàng)建了下面幾個全局對象:
tcp_openreq_cachep
tcp_bucket_cachep
tcp_timewait_cachep
tcp_ehash
tcp_bhash
其中ehash代表establishedhash,bhash代表bindhash,它們當(dāng)然分別是所有的滿足TCP_ESTABLISHED<=sk->state<TCP_CLOSE狀態(tài)的SOCK.但是我不清楚bucket在這里是什么意思。anyoneknows?那幾個cachep的作用也不是很清楚,特別是第二個,根本摸不著頭腦。由于整個函數(shù)主要是內(nèi)存分配和錯誤處理,這里不貼了。
再下來就是icmp_init函數(shù)了,在net/ipv4/icmp.c里面,事實上,如果把tcp_v4_init里面的IPPROTO_TCP替換成IPPROTO_ICMP,基本都是一樣的。剩下的proc_net_register函數(shù)前面已經(jīng)講過了,這里就不說了。
到這里為止,Linux下面IP棧的開始的工作我們基本應(yīng)該有了個了解,其中有幾個關(guān)鍵的函數(shù):
dev_add_pack:注冊一個鏈路層以上的處理函數(shù),一般是用來使用新的網(wǎng)絡(luò)層
(責(zé)任編輯:武林網(wǎng))
新聞熱點
疑難解答
圖片精選