&nb好區sp; 上一(yī)篇文章已經文工了解到如何學習MAC和根據MAC查表得到輸出光雜結果。輸出結果有兩種可能,一(yī)種是确定的輸出端少冷口号,指示分(fēn)組從确定的端口号輸出;另一(劇綠yī)種是查不到匹配表項,需要廣播(泛洪)輸出。交換機除了正常端口号輸出和男遠廣播輸出外(wài),還有一(yī)種方式就是多播輸出。要求同一(yī)個分外雪(fēn)組從指定的多個端口分(fēn)别輸出。
分(黃嗎fēn)組輸出是單播還是多播是根據其MAC地址的标識來區分(fē站南n)的。
 錯紙;1)單播
&nb術章sp; 單播的分(fēn)組如何麗你識别,有什麽特征區分(fēn)呢?從MA用舞C地址的設計上做了嚴格的區分(fēn)。MAC地址一(yī拿作)共6個字節,其第1個字節的最低位bit值如果爲0,則表示其是一(yī)個單東筆播MAC地址。單播地址是分(fēn)配給每一(yī)短子個單獨網卡使用的物(wù)理标識地址,所以一(yī訊對)個單播地址是肯定對應到一(yī)台單獨的主機。單獨的主機肯定是連接拿樂在交換機的一(yī)個特定的端口上面,故單播地址分(湖要fēn)組轉發,也就是一(yī)個單獨确土答定的端口号,其端口标記用一(yī)個數字表示即可。
&嗎下nbsp;
2)多播
&n飛錢bsp; 與單播相對,其标識定義也就是MAC地址的器舞第1個字節的最低位bit是1,則表示一(y討哥ī)個多播地址。特别的,如果MAC地址的所有bit位機劇都是1,則表示一(yī)個廣播地址。多播與單播的差異除了MAC地址的标又厭識不同外(wài),另外(wài)最大(dà)的區别匠姐就是,一(yī)個多播地址代表的是一(yī)組主機,可以是包含1台或是多台線嗎主機。那多播地址的分(fēn)組轉發,如何确定給哪些主機發送,從哪些端口呢海轉發呢?在MAC轉發表中(zhōng)是用多行記錄來表示,還是在端口那一說爸(yī)列用多個端口号數字來表示呢?下(xià)面介紹一(yī)種新的端水兒口表示方法。
 秒光;廣播是一(yī)個多播的特例,是一(yī)個要求所有節點都人拿必須加入的特殊組。多播在有些時候也叫組播,這其實是網絡層的叫法,與其相應村個的網絡層傳播方式還有任播。網絡層的組播有專門的組播協議實畫問現方法,網絡層的組播IP地址與MAC層的MAC地址有着一(yī)遠身一(yī)對應的關系,具體(tǐ)協議和轉換可網上搜索學習,轉換算法在後面文銀離章代碼中(zhōng)會有提到。
多播街坐既然是表示一(yī)組主機的集合,那這個集合如何學習而來,轉發的時候又(師樹yòu)根據什麽樣的端口信息進行輸出呢?
 影問;1)多播學習
首先,通過不算組播協議學習,我(wǒ)(wǒ)們知(zhī)道唱文,主機發布入組消息,其實并不是爲了通知(zhī)交換就從機,而是通知(zhī)網關。對交換機而言,如果兒不想支持更好的組播轉發是需要監聽(tīng)Interne雨醫t組管理(IGMP)協議的,也就是要處理二層以上醫還的内容。如果隻想簡單粗暴的确證組播功能,則可以把所有的組播消息當作廣播來處理這化即可。隻是這種粗暴的方式會給網絡流量、管理和用戶體(tǐ)驗來說帶來諸東鄉多蔽端。
 畫山;通常支持組播管理的交換機可以用兩種不同的方式黑飛來實現,第一(yī)種是帶一(yī)個輕量級的處理器,可以支持對二層見理以上更多協議進行處理,則交換機可以實現更多複雜(zá)的功喝車能。另外(wài)一(yī)種是根據場景要求,讓硬件支持也音特定的管理協議。硬件對組播的支持不需要靈活性,比如隻支持IGM南街PV3協議,則可以直接根據該協議内容僅需關心的幾個字段直接提取數據便可完爸火成協議處理,不像軟件那樣做逐層的解析和判斷。IGMP具體(tǐ化物)需要用到的字段有Record Type,用綠窗來指示是入組還是退組。Multicast Ad笑木dress用來表示IP組播的地址,根據該地址可以有又映射其對應的多播MAC地址。
&nb路唱sp; 多播通過上述簡單的字段提取後可以學習多播笑是MAC的加入或退出,其最終結果是對應到一(y跳店ī)個多播MAC和其組端口号的映射關系上,如果某個端口上接收到了商聽IGMP的入組信息,則将該協議中(zhōng)入組的組播IP轉換後的空費多播MAC與其輸入端口保存到MAC轉發表中(zhōng),習雨說明,一(yī)旦有目的MAC地址爲多播M下音AC的數據收到,則需要轉發到該端口上。相反,愛訊如果收到IGMP的退組信息,則要将該多播M謝道AC與其端口号信息删除。
&長我nbsp;2)多播轉發
多播愛的MAC與端口信息可以通過上面的方法學習到或删除了,那如果在一(金制yī)個交換機上,一(yī)個多播MAC有多個端口都有主機農弟加入,則該多播MAC有多個端口号與其組成轉發表,那我(花月wǒ)(wǒ)們應該如何來構建組播MAC的轉發表呢?
先試費司想一(yī)下(xià),如果将其像單播MAC映射表項黑土一(yī)樣,在MAC轉發表中(zhōng)著的添加多行記錄,一(yī)個多播MAC有多少個端口入訊林了組,就添加多少條記錄,是否可行。答案當然是可以,但進一(yī)步分(什坐fēn)析查表過程,如果一(yī)個MAC有多條表項可以匹了放配,則每一(yī)次查表都要把全表遍曆,不然肯定無法得到一(yī)個多什海播MAC所有的端口号信息。這對查表性能來說肯定影響巨大(黑很dà),其影響大(dà)小(xiǎo)跟表項大(飛些dà)小(xiǎo)成正比。那我(wǒ)(wǒ)們考慮建立單獨的老是多播表是否可以呢?多播地址多了後該表條數也會變大(dà),查表性能也上答會存在問題。
&nb什裡sp; 既然從表項行的角度無法解決問喝歌題,那我(wǒ)(wǒ)們可以從列的角度來考了不慮,原來一(yī)個MAC地址對應一(yī)個端口,用一(yī)個列花資表示,那多個端口可以用多個列表示即可。用軟件的思路可能還會考慮到用鏈表來表匠農示端口組信息,這些當然可以,但從資(zī鐵冷)源和性能上考慮都還不夠,特别是卸載到硬件實現。
遠少下(xià)面,我(wǒ)(wǒ)們講一(了議yī)種硬件的常用思維,用bitmap方式表示端口号。Bitmap顧名思義就遠那是用每一(yī)個bit位表示一(yī)個對應的端口,從低慢林位開(kāi)始,數字1(bit表示:01)表示0号端口;數字2(bi靜你t表示:10)表示1号端口;數字3(bit表就得示:11)表示0和1兩個端口。交換機端口一(yī)般不超站坐過64個,那用64位數據類型即可全部表示所有端口信學呢息。
&n場妹bsp; 1)多播學習
&nb照業sp;多播學習我(wǒ)(wǒ)們在軟件将采用協議逐層解析小西的方式獲取我(wǒ)(wǒ)們關心的數據。爲了軟件代碼實現簡單,多播學習的討吧表項單獨存儲在一(yī)個多播MAC轉發兒黃表中(zhōng),某個端口的主機加入了一(yī)個組,我(wǒ銀錢)(wǒ)們則在多播MAC轉發表中(zhōng車少)添加該組的多播地址與對應端口的bitmap表示值。當嗎房有其他端口加入了相同的組,則在原有端口字段上低民更新其對應端口的bit位的值即可。
&村但nbsp;2)端口Bitmap表示
裡村
&nb司弟sp;根據端口号的bitmap表示,上述多播MAC地址學習人他後隻需要一(yī)條表項表示即可,在查表過程中(zhōn務為g),再也不用遍曆全表查找。那我(wǒ)(wǒ)們是刀什否可以将多播表和單播表放(fàng)一(yī)塊他看呢?軟件是可以的,硬件是不會的。對硬件來知讀說,其資(zī)源無比珍貴,每1bit都是房林錢。單播的端口号隻能是一(yī)個确定值,對最大(dà)64個端口來說,其最多視內隻用6bit即可表示,其他bit都是多餘,故在就林硬件交換邏輯中(zhōng),單播表與多播表是分(fēn)開(kāi算不)的,其端口号的表示大(dà)小(xiǎo)也根人銀據其硬件端口數量來确定bit位的寬度。單播不采用bitmap方式表示,除了業算存儲資(zī)源浪費(fèi)還有一(yī)個主要草國原因就是邏輯與計算資(zī)源的浪費(fèi)。采用bitmap車雪必須逐bit是比較是否爲1,是1則該端口輸出,輸出男現最壞情況是遍曆所有bit位。單播本來就是一(yī)個确定端微快口輸出,使用bitmap的方式隻是造成處理邏輯的複雜(zá)化與計算時間弟懂的空耗,故單播輸出端口使用常規方式表示。
&n雨人bsp;下(xià)一(yī)篇文章具體(tǐ)講一(yī)下兵森(xià)多播表定義、實現與相關代碼修改。
公還
&nb又男sp;
歡迎您和學生(shēn少學g)們加入FAST開(kāi)源項目群溝通與探讨,一高員(yī)起體(tǐ)驗不一(yī)樣的系統器的設計過程。請先加微信号15116127200後邀請入群化東。
關注FAST開(kāi)源社區
FAST一(yī)一(yī)開(kāi)源、開唱但(kāi)放(fàng)、高速、高效、可編程、可定義!軟友作硬件協同并行處理。