您好,
有個好奇的問題想請教一下大家,
如果我有一張多ports網路卡跟一台switch,
我有辦法透過這張網路卡的其中一個port A,
送封包到switch,
然後再透過switch內部的forward設定,
把封包丟到同一張網卡的另一個port B嗎?
如果這理論上是可行的,
那如果我依照這個方式去測試同張卡的port performance,
這樣是否無法正常的驗證出來?
因為會變成這張卡的效能要同時應付port A丟出的封包速率,
還要去處理port B接收的速率,
進而導致測出來的port A performance值不準確的問題?
所以如果要真正測出這張卡的performance,
必須要兩張網卡對接去做測試,
這樣說正確嗎?
又或是,
這樣測的話就變成你要把Tx performance(port A),
跟Rx performance(port B)相加,
變成整張網卡的performance?
以我個人的認知,
Ethernet loopback test僅是拿來做為HW basic function驗證,
用以快速確認Ethernet port是否有硬體上的問題,
但如果用loopback test的方式來測port throughput,
我自己的認知是因為封包是自己丟給自己,
可能就無法反應真實的狀況,
以目前我google到的結果,
沒有看到有人是利用loopback的方式在做正式的throughput test.
不知道這樣的認知是否有誤,
謝謝.
先問: 你測到這個數據之後, 要拿來幹嘛?
再問: 你測出一個自己傳給自己的 Performance, 對於網路傳輸有甚麼幫助?
如果我們定義傳輸=將資料由一端傳遞到另一端
那麼, 你自己傳給自己, 狹義上並不能稱為傳輸
因為傳給自己 vs. 傳給異端, 中間通過的介質與條件必不相同, 所以測出傳給自己的數據, 其實在傳給異端的情境中, 沒有太多參考價值.
因此我才會問:
你測了這個要拿來做甚麼? 以及他會在甚麼情境有具體的意義?
沒有產業應用意義的事情, 也不是不能做, 但那就回到學理討論的層面去了, 這樣你要看的不只是介面卡外面的事情, 連晶片裡面的架構都要去了解清楚, 才能做出正確的量測.
舉例來說: 同時有多 Port 的卡片, 他在內部兩個 Port 之間, 是否還會夾一層小的 Switch 功能? 如果有這層存在, 你有可能有些測試的條件是不成立的.
是的, 板子上自帶一個小型switch, 但為何您如此肯定, 如果板上自帶小的switch, 採用這種port A to port B的測試就無法成立呢? 因為我原本有一個想法, 就是port A接到外部switch, 再透過switch的port forwarding功能把封包轉到port B, 但我仍無法確定這是否就會有actual traffic, 還是仍然是假性的, 且沒有參考價值, 只能是驗證HW是否正常而已.
因為你這樣接起來, 兩邊的 Switch 就會形成 Loop, 然後 Switch 若有支援 STP/RSTP 協定的話, 30 秒後就會自動切斷其中一條路徑, 阻止你的傳輸
你可以先拿兩台 Switch 測看看, 不需要接任何網卡, 就兩台 Switch 同時對接兩條線(兩個 Switch Port), 不要開啟任何 Ethernet Channel 或 LACP 功能, 看看這兩台會怎麼反應?
你也可以插上兩片網卡看看, 就當成是在模擬你的卡內部有 Switch 的狀況...
https://networkers-online.com/p/spanning-tree-the-problem-and-the-solution
了解, 原來這也跟switch有關聯, 感謝您詳細的解說! 再次跟您確認, 所以您認為, 測出傳給自己的數據, 在傳給異端的情境中, 沒有太多參考價值, 也就是說, 自己封包打給自己, 這種得出來的結果, 無法套用在系統A網路傳輸給系統B網路的異端的情境裡, 理由就如同上一則網友cmwang的回覆, 對OS而言IP A到IP B其實不會走到實體網路,只會在OS kernel內部直通, 用此方式不會有actual traffic, 只能當作是測試硬體是否有問題, 無法拿來當作實體應用的參考, 以上說法是否正確呢?
剛看到您更新了您的comment, 您說, 如果我的網卡上面的ports內部是接到卡上的小型switch, 此時, 如果我拿相同的網卡跟他對接, 也會形成switch loop的問題, 理由是:
網卡A controller -> 網卡A內部switch -> 網卡A port -> 網卡B port -> 網卡B內部switch -> 網卡B controller
由於end端都是接到小型switch, 雖然是兩張不同的卡, 各自插在兩台不同的system上, 此時仍然會有loop的問題, 而導致會被自動切斷, 如果內部小型switch有支援STP/RSTP協定的話.
如果這個理論是成立的, 請問要如何去避免呢? 可以更改switch內部設定, 去防止自動切斷的問題嗎?
就結果論來說是這樣沒錯;
但實際上的問題更複雜一些, 因為你不是直接對網卡下指令 (除非你能拆開網卡, 直接把指令訊號灌進晶片的接腳內), 而是透過 OS 轉譯之後, OS 才去對網卡下指令. 而 OS 在轉譯你的指令過程中, 就已經先判斷指令的合理性, 對於他認為不合理的指令, 也不會傳達給網卡, 在 OS 內就已經處理掉了.
如果這個理論是成立的, 請問要如何去避免呢? 可以更改switch內部設定, 去防止自動切斷的問題嗎?
不切斷的話, 這個架構將會引發 Switch 之間的廣播風暴:
什麼是廣播風暴,如何防止局域網環路引起的廣播風暴?
廣播風暴一旦發生, 所有通訊都會被阻塞, 因為所有傳輸路徑都塞滿了垃圾封包在傳遞...
這些在網路的基礎課程裏面都會談到, 您可以參考 Cisco 的 CCNA 課程內容
這裡有一個實作廣播風暴的影片, 在 2'47" 的地方, 你可以看到他插上 loop 之後, Switch 的燈就開始狂閃, 代表已經引發廣播風暴, 此時是無法傳輸任何資料的:
https://www.youtube.com/watch?v=5Lu8HjeWRyc
我剛google了一下, 有些switch似乎是可以config把STP disable, 如果把兩邊的STP disable後, 理論上應該就可以做, 對吧?
網卡A controller -> 網卡A內部switch -> 網卡A port -> 網卡B port -> 網卡B內部switch -> 網卡B controller
這樣就可以做performance and stress test, 且會有實際封包送收.
如前所述, 關掉 STP 之後, 實體層又接成 Loop 架構的話, 結果就是引發廣播風暴.
了解, 但我仍然有疑問, 這樣的網路產品, 如果他要外接switch去接更多的後端device, 那這樣豈不能做? 舉例來說, 例如我本身有在用Fortinet產品, FortiGate跟FortiSwtich, FortiGate就是有支援多個網路port, 且自帶內建switch, 然後FortiGate可以允許你接他的switch產品FortiSwitch, 那為什麼FortiGate接上FortiSwitch後卻仍可以正常的使用, 不會有阻斷的問題發生?
阿抱歉我傻了, 就是因為有STP所以才可以這樣接且不會發生broadcast storm, 但如果依照您說的, 開啟STP後, 兩台switch串接再一起, 就會有30秒自動組斷的問題, 換句話說, 我就無法將兩張有自帶switch的網卡接在一起, 因為網卡上面都有switch, 但如同我上一則留言, 如果是這樣的話, 那理論上FortiGate(板上內建switch)與FortiSwitch接在一起(透過FortiLink), 為什麼不會發生組斷的問題呢? 是因為FortiLink有機制去防止阻斷, 即使開啟了STP嗎?
Got it! 你想通了....
有試過同時把兩條線, 對接在 Gate 和 Switch 的兩個 Port 上面嗎? 如果有的話, 當時是不是其中一個 Port 的燈會熄滅?
若燈會滅的話, 代表他已經自己啟動 STP 去切斷其中一條了 (被切斷的燈會熄掉, 不過 Log 裡面會留下 STP 判定的紀錄), 所以其實他是只用一條線在通訊的, 並不是兩條同時使用 (這是假設你沒開 LACP 的狀況)
感謝您詳細的解說, 的確FortiGate接FortiSwitch透過的是FortiLink, 而FortiLink採用的是LACP(Link Aggregation Control Protocol), 就是把兩個ports合併成一條logical port, 自然就不會有switch因STP而阻斷其中一條線的問題.
一般OS不太容易這樣測,因為就算單一主機的不同網卡或不同port bind不同IP,對OS而言IP A到IP B其實不會走到實體網路,只會在OS kernel內部直通,鵝是在VM上透過I/O passthrough讓兩個Guest各抓1port測(i.e. OS各自獨立,所以只能跑到實體網路通),您參考參考吧....