上一篇文章中制已經了解到如(rú)何學習MAC和根據MAC查表得(de)到輸出結果。輸們水出結果有兩種可能,一種是确定的輸出端口号明畫,指示分組從确定的端口号輸出;另一種是查不(bù)到匹配表項,需湖好要廣播(泛洪)輸出。交換機除了正常端口号輸出和廣播輸出外,道的還有一種方式就是多播輸出。要求同一個分組從指定的多個端口分别輸出。
這他
&nb校這sp;分組輸出是單播還是多播是根據其MAC地址的标識來區分的。
1)單播通子
單播的分不錢組如(rú)何識别,有什麼特征區分呢?從MAC地址的設計上做了嚴格的醫懂區分。MAC地址一共6個字節,其第1個字節的最低(dī)位bit值如(rú美議)果為(wèi)0,則表示其是一個單播MAC地錢我址。單播地址是分配給每一個單獨網卡使用的物理标識地址,所以一個單播地址是肯定舊冷對應到一台單獨的主機。單獨的主機肯定是連分司接在交換機的一個特定的端口上面,故單播地址分了資組轉發,也就是一個單獨确定的端口号,其端口标記用一個數字表示即可。人學
山購 2)多播
低務 與單播相對,其标識定義也就是城藍MAC地址的第1個字節的最低(dī)位bit是1,則表示一個多播地址新吧。特别的,如(rú)果MAC地址的所有bit位都是1,則表示一個舊中廣播地址。多播與單播的差異除了MAC地址的标識不(b快大ù)同外,另外最大(dà)的區别就是,一個多播地址代表的是一組主機,可以是南來包含1台或是多台主機。那多播地址的分組轉發,如(rú)何确定給哪些主機發送,從可知哪些端口轉發呢?在MAC轉發表中是用多行記錄科業來表示,還是在端口那一列用多個端口号數字來表示呢?下面介知現紹一種新的端口表示方法。
廣播是笑農一個多播的特例,是一個要求所有節點都必須加輛作入的特殊組。多播在有些時(shí)候也叫組播,這其校吃實是網絡層的叫法,與其相應的網絡層傳播方制對式還有任播。網絡層的組播有專門的組播協議實現方法,網絡層的組播IP地址與房黃MAC層的MAC地址有着一一對應的關系,具體協議和轉換可網上路技搜索學習,轉換算法在後面文章代碼中會(hu明跳ì)有提到。
&nbs頻煙p; 多播既然是表示一組主機的集合,那這個集合如(rú)何學習而來坐文,轉發的時(shí)候又根據什麼樣的端口信的道息進行輸出呢?
&村醫nbsp; 1)多播學習
&唱哥nbsp; 首先,通(tōng)過組播協議學習,我們劇技(men)知道,主機發布入組消息,其實并不(bù)是為(wèi來村)了通(tōng)知交換機,而是通(tōng)知網關。對交換機而言,如習跳(rú)果想支持更好(hǎo)的組播轉發是需要監聽Internet組管理(I就地GMP)協議的,也就是要處理二層以上的内容。如(rú)議紙果隻想簡單粗暴的确證組播功能,則可以把所有的組播消息當作廣播來處理即可。隻是這農動種粗暴的方式會(huì)給網絡流量、管理船就和用戶體驗來說(shuō)帶來諸多蔽端。子雨
 友匠; 通(tōng)常支持組播管理的交換機可大機以用兩種不(bù)同的方式來實現,第一種是帶一個輕水快量級的處理器(qì),可以支持對二層以上更多協議進行處理,則交換機可以實現那低更多複雜的功能。另外一種是根據場景要求,讓硬件支持特定的管理協議讀和。硬件對組播的支持不(bù)需要靈活性,比如(rú)隻支持I什黃GMPV3協議,則可以直接根據該協議内容僅需關心的幾個字段直接提取數術年據便可完成協議處理,不(bù)像軟件那樣做逐層的解析和判斷。IGMP具體需要用門問到的字段有Record Type,用來指示是唱家入組還是退組。Multicast Address用來表示IP組煙自播的地址,根據該地址可以映射其對應的多播MAC了可地址。
&男為nbsp;多播通(tōng)過上述簡單的字段司快提取後可以學習多播MAC的加入或退出,其最終結果是對應到一個多播他土MAC和其組端口号的映射關系上,如(rú)果某個端口上接收就行到了IGMP的入組信息,則将該協議中入組的組播IP轉換科友後的多播MAC與其輸入端口保存到MAC轉發表中,說(shuō輛船)明,一旦有目的MAC地址為(wèi)多播MAC的技就數據收到,則需要轉發到該端口上。相反,如(樂人rú)果收到IGMP的退組信息,則要将該多播MAC與其端口不作号信息删除。
&樂黑nbsp; 2)多播轉發
&nb資視sp; 多播MAC與端口信息可以通(tō為物ng)過上面的方法學習到或删除了,那如(rú)果在一個用火交換機上,一個多播MAC有多個端口都有主機加入花紙,則該多播MAC有多個端口号與其組成轉發表,那我們(men)應該北冷如(rú)何來構建組播MAC的轉發表呢?
&街農nbsp;先試想一下,如(rú)果将其像單播MA體船C映射表項一樣,在MAC轉發表中添加多行記錄,一個多播MAC有多少個端口入了組請刀,就添加多少條記錄,是否可行。答(dá)案當然是可以,但進一步分析查表過金視程,如(rú)果一個MAC有多條表項可以匹配,則每一次查表都要車一把全表遍曆,不(bù)然肯定無法得(de)到一個多播MAC所有的端喝紅口号信息。這對查表性能來說(shuō)肯定影響巨大(dà),其影響大(dà)術微小跟表項大(dà)小成正比。那我們(men)考慮建立單獨的多播表是否可以呢我睡?多播地址多了後該表條數也會(huì)變大(dà),查表性能新吧也會(huì)存在問題。
&nbs綠哥p; 既然從表項行的角度無法解決問題,那我們(me身場n)可以從列的角度來考慮,原來一個MAC地址對應秒醫一個端口,用一個列表示,那多個端口可以用多個列表示即可。用軟可數件的思路可能還會(huì)考慮到用鍊表來表從事示端口組信息,這些當然可以,但從資(zī)源和性能上考慮冷中都還不(bù)夠,特别是卸載到硬件實現。
下子鐘面,我們(men)講一種硬件的常用思維,用bitm道照ap方式表示端口号。Bitmap顧名思義就是用每高空一個bit位表示一個對應的端口,從低(dī)位開(kāi醫計)始,數字1(bit表示:01)表示0号端口唱呢;數字2(bit表示:10)表示1号端口;事這數字3(bit表示:11)表示0和1兩個端口北靜。交換機端口一般不(bù)超過64個,那用64位數據類型即可全部表示看林所有端口信息。
&nb玩書sp;1)多播學習
多播和民學習我們(men)在軟件将采用協議逐層解析的方式獲取我們(men)物女關心的數據。為(wèi)了軟件代碼實現簡單,多播學習我但的表項單獨存儲在一個多播MAC轉發表中,某個端口的主機加入一煙了一個組,我們(men)則在多播MAC轉發表中添加該組的多播地址又愛與對應端口的bitmap表示值。當有其他(tā)端口加入了相同的組,則在那少原有端口字段上更新其對應端口的bit位的值即可。
2)愛視端口Bitmap表示
 的知; 根據端口号的bitmap表示,呢這上述多播MAC地址學習後隻需要一條表項表示即可,在查表過程中,再也不(腦報bù)用遍曆全表查找。那我們(men)是否可以将多播表和單有離播表放一塊呢?軟件是可以的,硬件是不(bù)會(huì行農)的。對硬件來說(shuō),其資(zī)源無比珍貴,每1bit都是子光錢。單播的端口号隻能是一個确定值,對最大(d厭家à)64個端口來說(shuō),其最多隻用6bit即可表示,其他(tā)腦章bit都是多餘,故在硬件交換邏輯中,單播表與多播表是分開(k林區āi)的,其端口号的表示大(dà)小也根據其硬件端口數量來确定b校間it位的寬度。單播不(bù)采用bitmap方式表示,除了明腦存儲資(zī)源浪費還有一個主要原因就是邏輯與計算拍工資(zī)源的浪費。采用bitmap必須逐bi著短t是比較是否為(wèi)1,是1則該端口輸出,音北輸出最壞情況是遍曆所有bit位。單播本來就是一話妹個确定端口輸出,使用bitmap的方式隻是造成處理邏輯的複雜快金化與計算時(shí)間的空耗,故單播輸出間裡端口使用常規方式表示。
下一篇小購文章具體講一下多播表定義、實現與相關代碼修改。
山白
&nbs訊聽p;
歡迎您和學生們(men)加入FAST開廠來(kāi)源項目群溝通(tōng)與探讨,又湖一起體驗不(bù)一樣的系統設計過程。請先加微信号15116127美筆200後邀請入群。
關注FAST開(kāi)源社區
FAST一一開(kāi)源、開(話家kāi)放、高速、高效、可編程、可定義!軟硬件協同并行處理。
媽暗