集線器hub不同於linux網橋實現的交換機,集線器不學習資料報的mac位址,沒有二層**表fdb,對於接收到的資料報總是泛洪到所有的子介面上。相當於沒有學習到任何mac位址(fdb為空)的網橋交換機。
兩個思路修改網橋為hub工作模式,一是保持fdb表為空,不新增任何表項,將fdb新增表項函式去除;另外也可以單獨寫乙個網橋接收處理函式,直接呼叫flood功能函式。以下**採用第一種方式,實現也比較簡單:
首先在向網橋新增子介面(br_add_if)時,不使用原本的網橋處理函式br_handle_frame,註冊乙個新的hub功能處理函式。
err = netdev_rx_handler_register(dev, br_handle_hub_frame, p);
新的處理函式,主要有幾個部分,乙個是合法性檢查;乙個是初始化skb的brdev和br_nf_bypass成員;最後就是在網橋上泛洪和向本機傳送乙份資料報。
rx_handler_result_t br_handle_hub_frame(struct sk_buff **pskb)
需要說明的是泛洪函式的最後乙個引數unicast始終設定為零,表示對於乙個hub來說無所謂單播,所有的資料報都是廣播。相反如果是單播報文的話,通過bridge命令可以關閉某個網橋子介面的單播泛洪功能,將會破壞hub功能。
bridge link set dev eth0 flood off
對於集線器hub而言,其實不需要向本機傳送乙份資料報。此處這麼做,網橋本身就可以接收資料報,可配置ip位址,可做管理介面,算是hub的乙個擴充套件功能。
另外br_nf_bypass變數為增加的乙個自定義變數。由於不管是**還是本機接收,都會遇到bridge網橋的hook點,nf_br_forward或者nf_br_local_in,難保證使用者不會增加ebtables的過濾策略,致使hub泛洪功能異常。增加變數br_nf_bypass掉過hook點函式,如下__br_forward函式。
static void __br_forward(const struct net_bridge_port *to, struct sk_buff *skb)
最後注意,網橋的vlan filtering功能也不要開啟(預設是關閉狀態)。
核心版本
linux-4.0
集線器與網橋的理解
本文內容整理自網路。包含的概念有 集線器 hub 網橋。集線器 hub 屬於 資料通訊系統 中的基礎裝置,它和 雙絞線等傳輸介質一樣,是 一種不需任何軟體支援或只需很少管理軟體管理的硬體裝置。它被廣泛應用到各種場合。集線器工作在區域網 lan 環境,應用於osi參考模型 第一層,因此又被稱為 物理層...
集線器 網橋 交換機的區別
擴充套件區域網的方法 1 在物理層擴充套件 使用集線器。集線器使各個小的區域網組成乙個更大的區域網,例如 乙個學校有三個系,每個系的區域網都是10base t規格的,這三個區域網有三個碰撞域。如果通過乙個集線器組合起來後就組成了乙個更大的區域網,原來的三個碰撞域就變成了乙個大的碰撞域,本來三個區域網...
網橋工作原理
在這裡插入描述 預備知識 1.碰撞域 衝突域 在任意時刻,同乙個衝突域中,只能有一台機器在傳送資料,這個衝突域內的機器都會受到傳送的內容,接不接受取決於是不是目的主機。2.網橋是工作在資料鏈路層的裝置,能隔離衝突域,也就是說網橋的每個埠都對應乙個衝突域,在乙個埠連線的網段中 比如網橋1的埠1,連線的...