星期六, 3月 14, 2020

IP Multicast

有些應用需要進行一對多或多對多的封包傳送,例如網路廣播電台、網路電視廣播。如果封包使用 unicast 單點傳送的方式,傳送端需要先知道所有傳送的對象,一個一個傳送,對傳送端負擔較大,也需要很多倍的網路頻寬。封包的 broadcast 廣播通常會侷限在本地區域網路內,如果開放到網際網路容易造成網路雍塞而癱瘓。最適當的方式是用 multicast 多點傳送,傳送端負擔變少只需要傳送一次,由網路設備 (router 或 switch) 負責複製給每個需要的接收者,大大減少傳送端所需要的網路頻寬。

由於是由網路設備複製,網路設備需要知道那些網路埠有接收者,傳送者並不需要知道每個接收者是誰,只要知道有接收者並負責把風包丟出來即可。

IPv4 multicast 位址
  • 224.0.0.0/4,開頭為二進位的 1110,範圍為 224.0.0.0 ~ 239.255.255.255。
  • 對應的 Ethernet MAC 位址為 01:00:5e:xx:xx:xx,後 23-bit 來自 IP 位址後面 23 bits。可能 IP 位址不同,但 MAC 位址相同,此時 Switch 需要 multicast 它們的聯集。
  • 224.0.0/24:local link 區塊,由 IANA 個別指定。對應的 MAC 位址是 01:00:5e:00:00:xx,通常 L2 switch 會 broadcast 處理,不出 router。
    • 224.0.0.1:all hosts
    • 224.0.0.2:all routers
    • 224.0.0.18:VRRP
    • 224.0.0.22:IGMPv3 report
    • 224.0.0.251:mDNS
    • 224.0.0.252:LLMNR
  • 224.0.1/24:internetwork 區塊,由 IANA 個別指定
    • 224.0.1.1:NTP
    • 224.0.1.129 ~ 132:PTP 
    • 224.0.1.75:SIP
  • 224.0.2/24,224.4/15,233.252/14:Ad Hoc
  • 224.2/16:SDP/SAP
  • 232.0.0.0/8:Source Specific Multicast
  • 233.0.0.0/8:GLOP,16-bit ASN
  • 234.0.0.0/8:Unicast-Prefix-Based IPv4 Multicast addresses
  • 239.0.0.0/8:Administratively Scoped IP Multicast,由網管使用,封包不跨網管,位址在不同網管可重複使用。通常會再切割成較小區塊來限制特定 multicast 應用的範圍,避免小區塊間不必要的資料量。
    • 239.192/14:Organization local scope
    • 239.255/16:Local scope,不能再分割,可以往下擴充
    • Scope Relative addresses:相對於每個小區塊最後一個位址。每個小區塊預留最後 256 個位址
      • -0 (239.255.255.255):
      • -5 (239.255.255.250):SSDP
其他說明
  • 主要概念是一個 multicast IP 位址及由接收者驅動而建立的 multicast distribution tree
    • 接收者透過協定加入 multicast 群組,在 LAN 使用 IGMP (IPv4) 或 MLD (IPv6),在 routing domain 內用 PIM, MOSPF,domain 外用 MBGP
  • Protocol Independent Multicast
  • 封包傳送要遠離 source IP,跟 unicast 要接近 destination IP 不同。
  • IPv6 multicast 位址使用 Ethernet MAC 位址 33:33:xx:xx:xx:xx,後 32-bit 來自 IPv6 位址後面 4 bytes。
  • switch 監聽 IGMP 來維護其 multicast 表格稱為 IGMP snooping,如果有 L3 功能則可作為 IGMP querier。如果網路沒有 multicast router,有 IGMP snooping 能力的 switch 可用來產生需要的 IGMP 訊息給用戶加入 multicast 群組。如果 switch 沒這些功能,就只能 broadcast 處理這些 multicast 封包。
  • 無線網路原本就是 boardcast 環境,行為跟 Ethernet 有些不同。如果用戶都不在省電模式,multicast 封包會馬上送。如果有用戶在省電模式,AP 只在每個 DTIM interval 後送,且只在一個支援的速率送。無線網路有 ACK 來避免高遺失率,但 multicast 封包並不用 ACK 而可能有高遺失率。現在有一些方法處理這個問題,例如改用 unicast 一個一個傳 (只需改 AP)、或要求每個用戶 ACK (需要 AP 跟用戶都改)。
  • RTP、RSVP、mDNS
  • multicast 本質比較不適合 connection-oriented 這種有重傳的協定,但也有 TCP 例子 -- Pragmatic General Multicast
應用
  • Multicast Paging
參考來源
  1. CISCO:GUIDELINES FOR ENTERPRISE IP MULTICAST ADDRESS ALLOCATION (2004)
  2. https://en.wikipedia.org/wiki/IP_multicast
  3. https://en.wikipedia.org/wiki/Multicast_address 

沒有留言:

張貼留言