国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 網(wǎng)絡(luò)通信 > 正文

Linux的TCP/IP協(xié)議棧

2019-11-04 11:04:13
字體:
供稿:網(wǎng)友

  下面是分析tcp_v4_init的時(shí)候了,這個(gè)函數(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當(dāng)然就是一個(gè)inode節(jié)點(diǎn)了,而tcp_socket等于tcp_inode.u.socket_i,
通過一個(gè)指針?biāo)麄冎赶蛲粋€(gè)內(nèi)存.
tcp_socket是用來通信使用的,可以叫TCP的controlsocket或者是communication
socket,當(dāng)TCP通信沒有相應(yīng)的socket的時(shí)候這個(gè)socket就充當(dāng)了socket的角色.比如在一個(gè)關(guān)閉端口上收到SYN時(shí)發(fā)送RST,或者是在三次握手的時(shí)候發(fā)送SYN(還沒有accept產(chǎn)生新的socket)

值得注重的是ops->create函數(shù)的調(diào)用,我們前面見過對(duì)于AF_INET來說這個(gè)回調(diào)函數(shù)是net/ipv4/af_inet.c的inet_create函數(shù),這個(gè)函數(shù)是用來創(chuàng)建一個(gè)socket的時(shí)候用的,由于函數(shù)比較長,這里先略過分析,這第一次的分析只是一個(gè)大致流程的熟悉而已.

由于有socket創(chuàng)建和通信,所以這段代碼是協(xié)議相關(guān)的,所以把這段代碼從原來的tcp.c里面提取了出來
下面是tcp_init函數(shù),它在net/ipv4/tcp.c里面,大體上來說就是創(chuàng)建了幾個(gè)hash表和bucket.這段代碼創(chuàng)建了下面幾個(gè)全局對(duì)象:
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?那幾個(gè)cachep的作用也不是很清楚,非凡是第二個(gè),根本摸不著頭腦.由于整個(gè)函數(shù)主要是內(nèi)存分配和錯(cuò)誤處理,這里不貼了.

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

到這里為止,linux下面IP棧的開始的工作我們基本應(yīng)該有了個(gè)了解,其中有幾個(gè)要害的函數(shù):
dev_add_pack:注冊(cè)一個(gè)鏈路層以上的處理函數(shù),一般是用來使用新的網(wǎng)絡(luò)層協(xié)議的,不過假如注冊(cè)時(shí)重復(fù)也是可以的,這時(shí)候系統(tǒng)會(huì)設(shè)置一個(gè)copy位.假如是ETH_P_ALL則會(huì)接收所有的數(shù)據(jù)包.加入的元素保存在ptype_all鏈表和ptype_basehash鏈表中間.

inet_add_protocol:注冊(cè)一個(gè)建立在IP層以上的協(xié)議,例如TCP和UDP等

proc_net_register(還有類似的proc_register):
在/proc/net目錄下面創(chuàng)建一個(gè)子目錄項(xiàng)來使治理者能通過文件系統(tǒng)得到統(tǒng)計(jì)信息

現(xiàn)在迷惑的地方還有很多,一個(gè)是結(jié)構(gòu)體sk_buff的每個(gè)成員的意義,一個(gè)是結(jié)構(gòu)體sock的意義,不過這兩個(gè)問題應(yīng)該在以后看多了就知道了.下面我就打算一個(gè)個(gè)分析每個(gè)協(xié)議的處理了,包括狀態(tài)轉(zhuǎn)化/數(shù)據(jù)發(fā)送/接收.
--
Wishyourskybesunny,
Wishyourheartbehappy,
Wishyourbodybehealthy,
WishUneverbelazy.
:):>;);>:-):->;-);->

上一篇:OSPF 起源

下一篇:IP地址組成與類型

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 略阳县| 济宁市| 得荣县| 丽水市| 宝山区| 大埔区| 子长县| 瑞金市| 万州区| 哈尔滨市| 襄樊市| 南漳县| 启东市| 娄底市| 抚远县| 三门峡市| 中阳县| 丹寨县| 北海市| 德安县| 顺平县| 深圳市| 新平| 乐清市| 界首市| 曲阜市| 厦门市| 扎兰屯市| 长汀县| 鲁山县| 永新县| 田林县| 西乌珠穆沁旗| 玉门市| 仙桃市| 徐水县| 收藏| 探索| 伊吾县| 米林县| 奎屯市|