當前位置:首頁 >> 操作系統 >> 其他系統 >> 內容

Linux操作系統的TCP/IP協議棧

時間:2008-8-30 12:06:00 欄目:其他系統 點擊: 來源:不詳

 [其他系統]-本文簡要:分析tcp_v4_init,這個函數在net/ipv4/tcp_ipv4.c里面: __initfunc(voidtcp_v4_init(structnet_proto_family*ops)){interr;tcp_inode.i_mode=S_IFSOCK;tcp_inode.i_sock=1;...
D6電腦網 (d6pc.com): Linux操作系統的TCP/IP協議棧-其他系統

分析tcp_v4_init,這個函數在net/ipv4/tcp_ipv4.c里面:

 

__initfunc(voidtcp_v4_init(structnet_proto_family*ops))
{
interr;
tcp_inode.i_mode=S_IFSOCK;
tcp_inode.i_sock=1;
tcp_inode.i_uid=0;
tcp_inode.i_gid=0;
tcp_socket->inode=&tcp_inode;
tcp_socket->state=SS_UNCONNECTED;
tcp_socket->type=SOCK_RAW;
if((err=ops->create(tcp_socket,IPPROTO_TCP))<0)
panic("FailedtocreatetheTCPcontrolsocket.\n");
tcp_socket->sk->allocation=GFP_ATOMIC;
tcp_socket->sk->num=256;
tcp_socket->sk->ip_ttl=MAXTTL;
}


tcp_inode當然就是一個inode節點了,而tcp_socket等于tcp_inode.u.socket_i,通過一個指針他們指向同一個內存.tcp_socket是用來通信使用的,可以叫TCP的controlsocket或者是communication


socket,當TCP通信沒有相應的socket的時候這個socket就充當了socket的角色.比如在一個關閉端口上收到SYN時發送RST,或者是在三次握手的時候發送SYN(還沒有accept產生新的socket)


值得注意的是ops->create函數的調用,我們前面見過對于AF_INET來說這個回調函數是net/ipv4/af_inet.c的inet_create函數,這個函數是用來創建一個socket的時候用的,由于函數比較長,這里先略過分析,這第一次的分析只是一個大致流程的熟悉而已.


由于有socket創建和通信,所以這段代碼是協議相關的,所以把這段代碼從原來的tcp.c里面提取了出來


下面是tcp_init函數,它在net/ipv4/tcp.c里面,大體上來說就是創建了幾個hash表和bucket.這段代碼創建了下面幾個全局對象:

 

tcp_openreq_cachep
tcp_bucket_cachep
tcp_timewait_cachep
tcp_ehash
tcp_bhash


其中ehash代表establishedhash,bhash代表bindhash,它們當然分別是所有的滿足TCP_ESTABLISHED<=sk->state

再下來就是icmp_init函數了,在net/ipv4/icmp.c里面,事實上,如果把tcp_v4_init里面的IPPROTO_TCP替換成IPPROTO_ICMP,基本都是一樣的.剩下的proc_net_register函數前面已經講過了,這里就不說了.


到這里為止,Linux下面IP棧的開始的工作我們基本應該有了個了解,其中有幾個關鍵的函數:


dev_add_pack:注冊一個鏈路層以上的處理函數,一般是用來使用新的網絡層協議的,不過如果注冊時重復也是可以的,這時候系統會設置一個copy位.如果是ETH_P_ALL則會接收所有的數據包.加入的元素保存在ptype_all鏈表和ptype_basehash鏈表中間.


inet_add_protocol:注冊一個建立在IP層以上的協議,例如TCP和UDP等


proc_net_register(還有類似的proc_register):


在/proc/net目錄下面創建一個子目錄項來使管理者能通過文件系統得到統計信息


現在迷惑的地方還有很多,一個是結構體sk_buff的每個成員的意義,一個是結構體sock的意義,不過這兩個問題應該在以后看多了就知道了.下面我就打算一個個分析每個協議的處理了,包括狀態轉化/數據發送/接收。


 



D6電腦網|電腦學習,電腦維修,電腦技術網;
設電腦學習,電腦入門,電腦技術,電腦教程,電腦維修,硬件知識,
網頁設計建站,桌面壁紙,主題下載,WIN7下載,常用軟件下載等欄目。感謝您的支持!
欄目:其他系統 作者:佚名 來源:不詳
相關文章
  • 沒有相關文章
共有評論 0相關評論
發表我的評論
  • 大名:
  • 內容:
本類推薦
  • 沒有
本類固頂
  • 沒有
網友推薦
鏈接申請
  • D6電腦網(www.pecqso.live) © 2019 版權所有 All Rights Reserved.
  • 本站為純技術學習交流型網站,部分資源來源網絡,僅供學習交流,版權歸原作者,本站僅為轉載,如有侵犯您的利益請聯系我們刪除.謝謝!
    關于D6電腦學習網 廣告合作 [email protected] 聯系站長 網站地圖 粵ICP備09035016號
  • 擺脫淺薄和低俗的最好辦法就是學習,我們加油!D6PC! V3.0
  • 鹿鼎记送彩金 天易棋牌信誉怎么样 快乐彩开奖号码 重庆时时彩500本金稳赚 辽宁快乐12预测五号 迷你仓出租赚钱吗 澳门五分彩骗局步骤图 电脑赚钱每日线报 喜乐彩组合投注技巧 516游戏金蟾捕鱼下载 北京时时彩规律时间表 极速6合精准规律 福彩七乐彩走势图 微博如何发视频赚钱 保安中彩票 亿豪彩票安卓 麻将基本规则