資源描述:
《linux網(wǎng)橋知識總結(jié)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Linux網(wǎng)橋知識總結(jié)(beta1)——bymoonflowqq:171932120(總結(jié)自互聯(lián)網(wǎng))目錄前言4第一章網(wǎng)橋的基本概念51.1網(wǎng)橋的作用51.2網(wǎng)橋的工作原理5第二章重要數(shù)據(jù)結(jié)構(gòu)62.1net_bridge62.2net_bridge_port72.3net_bridge_fdb_entry82.4net_device92.4數(shù)據(jù)結(jié)構(gòu)關(guān)系18第三章設(shè)備和初始化203.1br_init[netbridgebr.c]203.2br_ioctl_deviceless_stub[netbridge
2、br_ioctl.c]213.3br_add_bridge[netbridgebr_if.c]213.4br_dev_setup[netbridgebr_dev_setup.c]243.5br_add_if()[netbridgebr_if.c]243.6LLC28第四章網(wǎng)橋的報(bào)文處理功能294.1網(wǎng)橋位置294.1.1netif_receive_skb函數(shù)314.1.2br_handle_frame函數(shù)344.1.3br_handle_frame_finish函數(shù)364.1.3附上br_forw
3、ard.c38第五章CAM表操作435.1CAM查找流程435.2相關(guān)代碼435.2.1重點(diǎn)函數(shù)435.2.2br_fdb.c函數(shù)解析43第六章STP及相關(guān)處理596.1STP處理過程596.2STP相關(guān)信息/net/bridge/br_private_stp.h596.4STP選舉過程616.4BPDU相關(guān)函數(shù)61第七章IOCTL和橋的管理687.1IOCTL相關(guān)函數(shù)68第八章總結(jié)69參考資料70前言此文檔是本人這段時(shí)間內(nèi)學(xué)習(xí)Linux網(wǎng)絡(luò)協(xié)議棧網(wǎng)橋功能相關(guān)知識,總結(jié)并且整理出來的文檔。本文中的參考內(nèi)核代碼
4、為2.6.24(相關(guān)的資料較多,便于開展),當(dāng)然也是對互聯(lián)網(wǎng)資源的整合。參考了銳捷的一份文檔,并且參考了網(wǎng)上很多資源??梢哉f基本上總結(jié)自互聯(lián)網(wǎng)。參考中附上我學(xué)習(xí)時(shí)參考的資料,很多,而且他們寫的都非常好,導(dǎo)致我都不知道寫啥了。不過僅僅只是為了借這次總結(jié)的機(jī)會,讓個(gè)人對Linux網(wǎng)橋部分更加深入。因?yàn)楸救顺鯇W(xué)Linux協(xié)議棧,對很多部分都還很迷茫,所以很多地方會出現(xiàn)失誤或者不夠清楚。我接觸Linux時(shí)間很短,但是非常喜愛Linux,同時(shí)對網(wǎng)絡(luò)部分非常喜愛,希望大家喜歡并且與我交流,共同進(jìn)步。第一章網(wǎng)橋的基本概念1
5、.1網(wǎng)橋的作用網(wǎng)橋工作在ISO層次結(jié)構(gòu)中的二層,通過mac地址來區(qū)分,實(shí)現(xiàn)幾個(gè)網(wǎng)絡(luò)或主機(jī)之間的互聯(lián)。1.2網(wǎng)橋的工作原理Figure(b)showswhatiscalledastore-and-forwardbridge,whichistheschemeusedbyLinux:Ethernetframesarecopiedoutoftherightportsonlyaftertheyhavebeenreceivedintheirentirety.(轉(zhuǎn)自ULNI)網(wǎng)橋的工作原理其實(shí)很簡單,就是:某個(gè)主機(jī)的消息從
6、哪個(gè)端口進(jìn)來,那么這個(gè)主機(jī)必定位與這個(gè)端口這一側(cè),從這個(gè)端口一定能找到這個(gè)主機(jī),給這個(gè)主機(jī)的消息也就應(yīng)該從這個(gè)端口轉(zhuǎn)發(fā)。比如,一個(gè)網(wǎng)橋連接主機(jī)A和主機(jī)B。當(dāng)主機(jī)A連接到網(wǎng)橋時(shí),會告訴網(wǎng)橋,它在端口A。網(wǎng)橋會維持一個(gè)映射表,讓端口A與主機(jī)A的mac地址對應(yīng)。當(dāng)有其他主機(jī)試圖通過網(wǎng)橋轉(zhuǎn)發(fā)目的mac地址為主機(jī)A的mac地址的消息時(shí),網(wǎng)橋會通過查表來指導(dǎo)應(yīng)該由端口A轉(zhuǎn)發(fā)。同理,當(dāng)網(wǎng)橋連接兩個(gè)或兩個(gè)以上主機(jī)或主機(jī)構(gòu)成的網(wǎng)絡(luò)時(shí),也按照這個(gè)原則,維持一個(gè)記錄端口和mac地址的映射表,需要轉(zhuǎn)發(fā)消息的時(shí)候通過查找這個(gè)表來找到應(yīng)
7、該去的地址。當(dāng)然,如果收到的消息是發(fā)給網(wǎng)橋本身的,就要交給上層協(xié)議來處理。這就是網(wǎng)橋的工作原理。第二章重要數(shù)據(jù)結(jié)構(gòu)2.1net_bridge在/net/bridge/br_private.h,這個(gè)結(jié)構(gòu)體描述一個(gè)網(wǎng)橋。dev是這個(gè)橋?qū)?yīng)的設(shè)備。port_list是net_bridge_port的鏈表頭。hash[BR_HASH_SIZE]是net_bridge_fdb_entry的散列表,也是網(wǎng)橋MAC地址和端口的映射表CAM。structnet_bridge{//自旋鎖spinlock_tlock;//橋組中
8、的端口列表structlist_headport_list;//網(wǎng)橋會建立一個(gè)虛擬設(shè)備來進(jìn)行管理,這個(gè)設(shè)備的MAC地址是動態(tài)指定的,通常就是橋組中一個(gè)物理端口的MAC地址structnet_device*dev;//網(wǎng)橋中虛擬網(wǎng)卡的統(tǒng)計(jì)數(shù)據(jù)structnet_device_statsstatistics;//hash列表自旋鎖spinlock_thash_lock;//存放的是net_bridge_