• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 操作系統(tǒng) > Linux教程 >

    Linux操作系統(tǒng)的TCP/IP協(xié)議棧

    時間: 若木1 分享
    分析tcp_v4_init,這個函數(shù)在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節(jié)點了,而tcp_socket等于tcp_inode.u.socket_i,通過一個指針他們指向同一個內(nèi)存.tcp_socket是用來通信使用的,可以叫TCP的controlsocket或者是communication
    socket,當TCP通信沒有相應的socket的時候這個socket就充當了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,它們當然分別是所有的滿足TCP_ESTABLISHED<=sk->state
    再下來就是icmp_init函數(shù)了,在net/ipv4/icmp.c里面,事實上,如果把tcp_v4_init里面的IPPROTO_TCP替換成IPPROTO_ICMP,基本都是一樣的.剩下的proc_net_register函數(shù)前面已經(jīng)講過了,這里就不說了.
    到這里為止,Linux下面IP棧的開始的工作我們基本應該有了個了解,其中有幾個關(guān)鍵的函數(shù):
    dev_add_pack:注冊一個鏈路層以上的處理函數(shù),一般是用來使用新的網(wǎng)絡(luò)層協(xié)議的,不過如果注冊時重復也是可以的,這時候系統(tǒng)會設(shè)置一個copy位.如果是ETH_P_ALL則會接收所有的數(shù)據(jù)包.加入的元素保存在ptype_all鏈表和ptype_basehash鏈表中間.
    inet_add_protocol:注冊一個建立在IP層以上的協(xié)議,例如TCP和UDP等
    proc_net_register(還有類似的proc_register):
    在/proc/net目錄下面創(chuàng)建一個子目錄項來使管理者能通過文件系統(tǒng)得到統(tǒng)計信息
    現(xiàn)在迷惑的地方還有很多,一個是結(jié)構(gòu)體sk_buff的每個成員的意義,一個是結(jié)構(gòu)體sock的意義,不過這兩個問題應該在以后看多了就知道了.下面我就打算一個個分析每個協(xié)議的處理了,包括狀態(tài)轉(zhuǎn)化/數(shù)據(jù)發(fā)送/接收。
    23803 主站蜘蛛池模板: 午夜精品久久久内射近拍高清| 黑人巨茎大战欧美白妇| 一本无码人妻在中文字幕免费| 国产日韩精品视频| 日本一卡2卡3卡4卡三卡视频 | 国产精品久久免费视频 | a级成人免费毛片完整版| 亚洲资源在线视频| 国产精品亚洲精品日韩已方| 最新国产精品亚洲| 59pao成国产成视频永久免费| 亚洲精品乱码久久久久久蜜桃| 91福利在线视频| 青草草在线视频永久免费| 中日韩一区二区三区| 免费a级午夜绝情美女视频| 国产美女一级做a爱视频| 波多野结衣在线免费电影| sqy2wc厕所撒尿| 人气排行fc2成影免费的| 国产黄大片在线观看| 无码丰满少妇2在线观看| 欧美黑人巨大videos极品 | 全免费A级毛片免费看网站| 国产鲁鲁视频在线观看| 无人区免费高清在线观看 | 国内大片在线免费看| 无码国产成人午夜电影在线观看| 欧美网站www| 精品国产午夜肉伦伦影院| xxxx黑人da| fc2免费人成在线| 亚洲日韩乱码中文字幕| 吃奶摸下激烈视频无遮挡| 好大好硬好爽免费视频| 日韩视频在线观看中字| 爆乳女仆高潮在线观看| 五月婷婷婷婷婷| 久久久久久国产精品三级| 午夜伦伦影理论片大片| 国产免费1000拍拍拍|