(資料圖)
}
除了 IP 還有下面協(xié)議:
$ grep -R dev_add_pack net/{ipv4,packet}/*net/ipv4/af_inet.c: dev_add_pack(&ip_packet_type); //IPnet/ipv4/arp.c: dev_add_pack(&arp_packet_type); //ARPnet/ipv4/ipconfig.c: dev_add_pack(&rarp_packet_type);net/ipv4/ipconfig.c: dev_add_pack(&bootp_packet_type);net/packet/af_packet.c: dev_add_pack(&po->prot_hook); //用于抓包net/packet/af_packet.c: dev_add_pack(&f->prot_hook); //用于抓包
包的類型可以通過(guò)下面命令查看:
$ cat /proc/net/ptype # packet type (skb->protocol)Type Device Function0800 ip_rcv0806 arp_rcv86dd ipv6_rcv
1.7.4 小結(jié)
好了,inet_protos 存儲(chǔ)著 TCP、UDP 和 ICMP 接收數(shù)據(jù)的 udp_rcv 和 icmp_rcv 函數(shù)地址,ptype_base 存儲(chǔ)著接收數(shù)據(jù)的 ip_rcv 函數(shù)地址。后面會(huì)看到軟中斷中會(huì)通過(guò) ptype_base 找到 ip_rcv 函數(shù)地址,進(jìn)而將 IP 包正確地送到 ip_rcv 中執(zhí)行。在 ip_rcv 中將會(huì)通過(guò) inet_protos 找到 TCP 或者 UDP 的處理函數(shù),再而把包轉(zhuǎn)發(fā)給 tcp_v4_rcv 或者 udp_rcv 函數(shù)。
ip_rcv、tcp_v4_rcv、udp_rcv 和 icmp_rcv 函數(shù)已經(jīng)注冊(cè)好了,就等待數(shù)據(jù)包的到來(lái)。最后通過(guò) inet_create 函數(shù)根據(jù)具體協(xié)議類型和 inetsw 鏈表數(shù)組創(chuàng)建套接字來(lái)完成接收數(shù)據(jù)。
二、網(wǎng)絡(luò)收包概述
前面主要介紹了系統(tǒng)啟動(dòng)時(shí)的初始化操作,接下來(lái)開(kāi)始正式介紹網(wǎng)絡(luò)的詳細(xì)收包過(guò)程,從網(wǎng)絡(luò)接口層(L1)、網(wǎng)絡(luò)層(L2)、傳輸層(L3)、套接字(L3.5)再到應(yīng)用層(L4)的整個(gè)過(guò)程。
從硬中斷到協(xié)議棧的調(diào)用鏈:
關(guān)鍵詞:
版權(quán)與免責(zé)聲明:
1 本網(wǎng)注明“來(lái)源:×××”(非商業(yè)周刊網(wǎng))的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。
2 在本網(wǎng)的新聞頁(yè)面或BBS上進(jìn)行跟帖或發(fā)表言論者,文責(zé)自負(fù)。
3 相關(guān)信息并未經(jīng)過(guò)本網(wǎng)站證實(shí),不對(duì)您構(gòu)成任何投資建議,據(jù)此操作,風(fēng)險(xiǎn)自擔(dān)。
4 如涉及作品內(nèi)容、版權(quán)等其它問(wèn)題,請(qǐng)?jiān)?0日內(nèi)同本網(wǎng)聯(lián)系。