iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
IT Operation

低延遲網路的維運工程:從 HFT 現場長出來的 30 天系列 第 19 篇

Day 19:IGMP querier 決定多播是否洪泛

  • 分享至 

  • xImage
  •  

行情資料走的是 IPv4 多播。今天用兩個多播群組,先看交換器在什麼條件下會洪泛,再讓兩個群組同時爆量,看出口佇列會發生什麼事。

送多播的工具

exanic-measure 只能送廣播,frame 裡沒有 IP 表頭,送不了多播。所以改用 Python 的 raw socket 自己組 frame:目的 MAC 用多播位址 01:00:5e:01:01:01,裡面包 IPv4/UDP,目的 IP 是群組位址。這條路走 kernel,單一 port 可以送到接近線速。

沒有 querier,有人訂閱也洪泛

兩個 port 各送 10 萬個到 239.1.1.1:

https://ithelp.ithome.com.tw/upload/images/20261001/20184063x3bShz4DWP.png

Et1、Et2 各收進 10 萬個,交換器把每一批都轉到 VLAN 裡另外兩個 port,Et3 兩批都收到,沒有人訂閱的 Et2 也照收。

接著讓 Et3 那台主機用 socket 加入 239.1.1.1。交換器學到了,卻在 Port-List 的 Et3 前面打了 *:

https://ithelp.ithome.com.tw/upload/images/20261001/20184063gIChNgVkHb.png

再送一次,這次 port0 送 239.1.1.1、port1 送 239.1.1.2,各 10 萬個。只有 Et3 訂了 239.1.1.1,Et2 的 OutMcastPkts 還是多了約 10 萬,跟沒人訂閱時一樣。

圖中警告的意思是這台的 snooping 要有 querier 才會生效。show igmp snooping querier(這台交換器的指令不加 ip)查不到 querier,show ip igmp snooping vlan <VLAN> 一直是 IGMP snooping pruning active : False、Flooding traffic to VLAN : True。一般的認知是沒有 querier,訂閱記錄過期後才退回洪泛;這台是一開始就不照訂閱表送。

交換器當 querier 之後

這個 VLAN 沒有 SVI,要先建一個,再給 querier 一個位址:

configure terminal
interface Vlan<VLAN>
   ip address 192.0.2.254/24
exit
ip igmp snooping vlan <VLAN> querier address 192.0.2.254
ip igmp snooping vlan <VLAN> querier
end

https://ithelp.ithome.com.tw/upload/images/20261001/20184063Vgvzl2O5hu.png

設完之後,pruning active 變成 True。再送一次同樣的流量,三次的 OutMcastPkts 增量放在一起看:

條件 Et2(沒訂閱) Et3
沒人訂閱、沒有 querier +100030 +200029
Et3 訂了 239.1.1.1、沒有 querier +100016 +200016
Et3 訂了 239.1.1.1、交換器當 querier +12 +100012

Et2 的增量從 10 萬掉到 12 個,那 12 個是 64 bytes 的控制封包。239.1.1.1 只送給有訂的 Et3,沒人訂的 239.1.1.2 誰都沒收到。

兩個群組同時爆量

行情最麻煩的是開盤那一刻,好幾個群組同時爆量,全部擠向同一個 port。這次讓 port0、port1 在同一個時刻分別送 239.1.1.1、239.1.1.2。這幾輪沒開 querier,兩個群組都洪泛到 Et3,Et3 就像同時訂了兩個群組的主機,一個 10G 出口接兩條;Et1、Et2 各只收一條,當對照組。

同樣的條件跑了兩輪,數字都落在下表範圍內。丟掉的封包是每組另外再跑一次讀的,Et1、Et2 的 discards 一直是 0。

每條 burst(個) 送完需要 LANZ 最長佇列(segments) 擁塞持續 Et3 丟掉的封包
100 0.13 ms 沒有紀錄 — 0
200 0.25 ms 658~780 194~251 µs 0
500 0.63 ms 1722~1955 0.9~1.0 ms 0
1000 1.3 ms 3682~3708 2.2 ms 0
2000 2.7 ms 5616~5617 4.1~4.2 ms 333
5000 6.6 ms 5619~5620 7.9~8.2 ms 3382

碰到上限時,LANZ 記到的是 5616~5620,比 status 的 5615 多一點。

https://ithelp.ithome.com.tw/upload/images/20261001/20184063YMTCn35eTb.png

佇列堆多深,看總流量超出出口多少

封包數一樣,佇列深很多:同樣 1000 個,Day 18 總量只略超過 10G,佇列只到 710 segments,今天約 3700,2000 個就碰上限。差在超出出口的量,今天兩條都在 8.9 Gbit/s 以上,加起來將近出口的兩倍。

多播的監控項目:出口佇列、訂閱表、querier 與計數器

LANZ 先看接訂閱主機的出口,一台主機訂的群組同時爆量,佇列就堆在它那個 port。沒有 querier 時,多播會灑到整個 VLAN,每個 port 都要看,爆量那幾輪的 Et3 就是這樣塞到丟包。

訂閱表(show ip igmp snooping groups)平常很穩定,定期存一份跟基線比,群組或 port 對不上,就查是哪台主機上下線、還是有人改了設定。Port-List 出現 *,就是 snooping 沒生效、正在洪泛。

每個多播 VLAN 都要查得到一台 querier:show igmp snooping querier 要有一筆,show ip igmp snooping vlan <VLAN> 的 pruning active 要是 True。巡檢時查一次,動到 VLAN、SVI、上游路由器或交換器重開之後再查。這次的 querier 設定沒存進 startup-config,交換器一重開就沒了,整個 VLAN 又會洪泛,所以 pruning active 從 True 變 False 就要告警。

計數器看 OutMcastPkts 的增量。沒訂閱的 port 平常只有 STP、LLDP 這類零星的控制封包,增量跟行情進來那個 port 的 InMcastPkts 差不多,就是被洪泛了,對照表裡沒有 querier 時的 Et2 就是這樣。

明天用這兩天量到的數字,談 microburst 的告警門檻怎麼定。


上一篇
Day 18:LANZ 佇列紀錄與 microburst 實測
系列文
低延遲網路的維運工程:從 HFT 現場長出來的 30 天 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言