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

首頁 > 系統 > Linux > 正文

實例解析:Linux操作系統的TCP/IP協議棧

2024-07-26 00:37:49
字體:
來源:轉載
供稿:網友
 

分析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_cacheptcp_bucket_cacheptcp_timewait_cacheptcp_ehashtcp_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的意義,不過這兩個問題應該在以后看多了就知道了.下面我就打算一個個分析每個協議的處理了,包括狀態轉化/數據發送/接收。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤岗市| 沙田区| 和林格尔县| 衡阳市| 松阳县| 科技| 科尔| 吉林市| 永福县| 噶尔县| 福海县| 金华市| 静安区| 兴安盟| 黔西| 大港区| 定襄县| 黄陵县| 通山县| 陵水| 保康县| 翼城县| 和林格尔县| 垣曲县| 东乌珠穆沁旗| 高碑店市| 吉安县| 金川县| 五峰| 喀什市| 湟中县| 沧源| 嘉义县| 阿克苏市| 连州市| 绥化市| 自贡市| 洛浦县| 通江县| 太谷县| 鸡西市|