目錄
9.1 引言
9.2 廣播
9.2.1 使用廣播地址
9.2.2 發送廣播數據報
9.3 組播
9.3.1 將組播IP地址轉換為組播MAC地址
9.3.2 例子
9.3.3 發送組播數據報
9.3.4 接收組播數據報
9.3.5 主機地址過濾
9.4 IGMP協議和MLD協議
9.4.1 組成員的IGMP和MLD處理
9.4.2 組播路由器的IGMP和MLD處理
9.4.3 例子
9.4.4 輕量級 IGMPv3 和 MLDv2
9.4.5 IGMP和MLD健壯性
9.4.6 IGMP和MLD計數器和變量
9.4.7 IGMP和MLD Snooping
9.5 與IGMP和MLD相關的攻擊
9.6 總結
多播組成員管理協議
????????IPv4:IGMP:Internet Group Management Protocol,互聯網組管理協議。
????????IPv6:MLD:Multicast Listener Discovery,組播偵聽發現協議。
9.1 引言
IP地址分類:
????????unicast:單播。
????????multicast:多播=組播。
????????broadcast:廣播,IPv6沒有廣播。
????????anycast:任播。
任播:
????????路由器將目的IP是任播地址的數據包發送到多個接收者中最近一個。
????????使用場景:
????????????????服務發現: 如IPv6主機通過發送HTTP的任播報文。來發現局域網可用Web服務器。
????????????????負載均衡:一組相同功能的服務器共享同一個任播地址。客戶端請求路由到最近服務器。
????????????????路由器冗余:多個路由器共享同一個任播地址,實現冗余和容錯性。
IPv6鏈路本地地址:
????????前綴:fe80::,用于局域網內通信。
廣播和組播為應用程序提供兩種服務:
????????交付數據至多個目的地
????????請求/發現服務器。
一般只有UDP才利用廣播和組播。
IPv4組播是可選的。
IPv6組播是強制性,因為鄰居發現ND需使用。
9.2 廣播
9.2.1 使用廣播地址
組播MAC地址:
????????第一個字節的最低位二進制為0代表單播地址,為1代表組播地址。
????????如01:00:00:00:00:00,03:00:00:00:00:00
本地網絡(有限廣播)廣播:255.255.255.255,用于向局域網所有設備發送數據。
子網定向廣播地址:如192.168.1.255:用于向特定子網中所有設備發送通知、服務發現和配置信息等。
ping 廣播IP地址+廣播MAC地址作用:
????????觸發所有接收設備回包,獲得所有設備的MAC地址。無需源主機單獨向每個設備發送ARP。
????????但是某些操作系統可能禁止ping廣播IP地址。
組播地址只能作為目的IP,不能作為源IP。
9.2.2 發送廣播數據報
socket選項:
????????SO_BROADCAST:設置套接字允許發送廣播數據包。
ping -b會設置SO_BROADCAST
9.3 組播
即多播,multicast。
1. 當主機希望加入一個多播組時,它向路由器發送IGMP Membership Report報文,其中包含感興趣的組播地址,并可能包含可選的源列表。用于指定從哪些源接收組播數據。
2. 路由器收到IGMP報文后,更新其多播組成員表,并根據多播組成員表轉發組播數據到感興趣的主機。
多播組成員表和可選源列表都會定期更新或超時刪除。
IGMP報文中的源列表分為:
????????特定源組播(SSM):明確接收或不接收特定發送方的組播流量。
????????任源組播(ASM):不考慮發送方身份。
9.3.1 將組播IP地址轉換為組播MAC地址
組播數據應使用組播MAC地址作為目的MAC。
組播MAC地址結構:
????????前24位: 前24位固定為01-00-5E。
????????后23位: 等于IPv4組播IP地址的低23位。
IPv4組播的以太網地址范圍:01:00:5E:00:00:00到01:00:5E:7F-FF-FF
組播IP地址轉換為組播MAC地址:
IPv4組播地址范圍:224.0.0.0到239.255.255.255,D類地址。
根據上圖所示轉換方法:
????????組播地址 224.128.64.32(十六進制為 E0.80.40.20 )和 224.0.64.32(十六進制為 E0.00.40.20 )都被映射到01:00:5E:00:40:20
所以發往組播224.128.64.32的報文應使用源MAC 01:00:5E:80:40:20來封裝。
IPv6組播IP地址轉換為組播MAC:
????????MAC前16位: 前綴固定是33-33
????????MAC后32位: IPv6組播地址的最后32位。
????????如組播地址ff02::1:2。轉換為組播MAC地址:33-33-00-01-00-02。
9.3.2 例子
mDNS:組播DNS。
????????一般工作在局域網內部。
????????作用:
????????????????共享DNS響應:多個主機共享DNS響應,減輕DNS服務器負擔,避免太多主機DNS查詢。
????????????????設備互相發現:新設備發送mDNS查詢來通告自己的存在。
????????????????服務發現:通過mDNS查詢來尋找局域網特定服務(打印機)。
224.0.0.251:mDNS組播組IP。
使用ICMP報文回復了ping 224.0.0.251的主機,表明加入了mDNS組。
9.3.3 發送組播數據報
多網口的主機須決定使用哪個IP地址和接口。
9.3.4 接收組播數據報
組播組的成員資格是動態的,它隨進程加入或離開組而改變。
查看組播組成員方法:
????????ip maddr show
????????netstat -gn
# ip maddr show
1: ????????lo ????????????????接口索引號和接口名稱。
????????inet 224.0.0.1 ????????該接口加入的IPv4組播地址。
????????inet6 ff02::1 ????????????????該接口加入的IPv6組播地址
????????inet6 ff01::1
加入組播組方法:
????????ip maddr add 224.0.0.1 dev eth0 eth0接口加入224.0.0.1組
????????ip maddr add ff02::1 dev eth0
9.3.5 主機地址過濾
mreq.imr_multiaddr.s_addr = inet_addr("組播組地址");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
加入組播組:
????????setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) ;
離開組播組:
????????setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
9.4 IGMP協議和MLD協議
組播成員管理協議:
????????IGMP:Internet Group Management Protocol,互聯網組管理協議,IPv4使用。
????????MLD:Multicast Listener Discovery,組播偵聽發現協議,IPv6使用。
MLD和IGMP功能幾乎相同,都用于管理組播組成員。
IGMP/MLD管理方法:
????????主機向路由器發送組成員報告報文,路由器知道主機感興趣組播組后,以便知道組播數據報轉發到對應接口。
SSM,即源特定多播模式:
????????接收方只能接收來自特定源的多播流量。
????????目前廣泛使用IGMPv3和MLDv2的支持SSM。
????????當主機想要接收特定源的多播流時,會發送IGMPv3/MLDv2報文,其中包含指定源地址和多播組地址。
ASM:即任意源多播模式。
????????接收方可以接收來自任意源的多播流量。
如上圖,組成員管理的兩種方式:
????????路由器定期IGMP/MLD查詢。
????????主機主動IGMP/MLD報告。
IGMPv3報告發送到224.0.0.22,即IGMPv3組播路由器地址。
MLDv2報告發送到ff02::16,即MLDv2組播路由器地址。
和ICMP類似,IGMP報文也封裝在IPv4。
IGMP報文的TTL固定為1,所以報文僅限于本地子網。
報文格式:
組播路由器也和廣域組播協議(PIM-SM,BIDIR-PIM)交互,將流量轉發給感興趣主機,或禁止流量流向不感興趣主機。
廣域組播協議:
????????在廣域網(WAN)中實現組播。
????????如:PIM,BIDIR-PIM。
PIM(Protocol Independent Multicast):即協議無關組播協議。
兩種模式:
????????PIM-DM(Dense Mode):適用于組播組成員密集的網絡
????????PIM-SM(Sparse Mode):適用于組播組成員分布稀疏的網絡。
PIM使用場景:
????????大型企業內部跨子網或分支機構的組播通信。如視頻會議、流媒體。
????????電信運營商廣域網中組播通信,如電視直播、廣播和IPTV等。
9.4.1 組成員的IGMP和MLD處理
作用:允許主機指明自己有興趣的組,還可以指定允許/拒絕特定源發送的流量。
方法:向同子網的組播路由器發送報告。
IGMP報告報文如下:
類型字段:
????????指示報文類型,可能的值有:
????????????????0x11: Membership Query(成員查詢)
????????????????????????路由器發送成員查詢消息
????????????????0x12: Membership Report(成員報告)
????????????????????????主機發送成員報告消息,表示主機加入多播組。
????????????????0x13: Leave Group(離開組)
????????????????????????主機發送,表示主機離開組播組,路由器不在轉發該組播組流量給該主機。
????????????????0x22: IGMPv3 Membership Report(IGMPv3 成員報告)
????????????????????????IGMPv3的成員報告,用于支持源特定多播(SSM)和其他高級功能。
組記錄:
????????其中每個組記錄格式如下:
上圖字段解釋:
????????記錄類型:
????????????????INCLUDE:主機對指定的源地址感興趣。
????????????????EXCLUDE:主機對指定的源地址不感興趣。
????????IPv4組播地址:
????????????????加入或離開的組播組。
????????源地址:主機感興趣、不感興趣的源地址。
9.4.2 組播路由器的IGMP和MLD處理
組播路由器的工作內容:
????????發送組成員查詢。
????????接收組成員報告,維護組播組成員。
????????成員刷新與老化。
組播路由器有三種查詢報文:
????????通用查詢:查詢所有組播組。
????????特定組查詢:查詢特定組播組的成員。
????????特定組和源查詢:用于組播路由器之間查詢與響應。
通用查詢報文目的IP:
????????IPv4 IGMP中為224.0.0.1,代表所有組播節點。
????????IPv6 MLD中為ff02::1,代表鏈路范圍內所有組播節點。
特定組查詢報文的目的IP:
????????為查詢的該特定組的組播IP。
9.4.3 例子
上圖顯示ICMPv6協議報文細節,其實就是MLD協議,MLD屬于ICMPv6。
從上文可知,該報文是IPv6 MLD查詢報文
????????組播目的IP地址:組播地址ff02::1 (表示所有組播節點)
????????組播目的MAC地址:33:33:00:00:00:01 (根據組播IP轉換而來,固定前綴為33:33)
主機發送的IGMP報文TTL為1,不會通過路由器轉發。
很多應用協議都通過發送報文到組播地址,或來查詢服務或散播服務,實現局域網設備和服務發現。如:
????????mDNS
????????UPnP:用于智能家居設備發現。
????????發現局域網是否有打印機。
9.4.4 輕量級 IGMPv3 和 MLDv2
9.4.5 IGMP和MLD健壯性
同一鏈路可運行多個組播路由器,故障備份,最小IP地址路由器被選為查詢器。
查詢器選舉(querier election)
????????比較源IP地址,IP小的路由器為查詢器,非查詢器進入備用模式。
查詢組播路由器需要定期查詢組播成員。
9.4.6 IGMP和MLD計數器和變量
IGMP和MLD需處理組播路由器的失效、協議報文丟失,早期協議版本的兼容性。
????????大多基于狀態改變和計時器來啟用這些功能。
9.4.7 IGMP和MLD Snooping
IGMP ( MLD) snooping:
????????2層交換機查看在第3層的信息,了解它對特定的組播流量流動是否有興趣。
如果沒有IGMP snooping,交換機會廣播鏈路層流量。
而支持IGMP(MLD)snooping的交換機通過查看主機與路由器通信的IGMP信息,記錄哪些端口需要哪些特定的組播流動,從而減少流量轉發。
9.5 與IGMP和MLD相關的攻擊
IGMP Flooding 攻擊:發送大量IGMP或MLD報文,引起帶寬耗盡。
IGMP欺騙:攻擊者偽造IGMP報文,導致路由器維護錯誤組播組成員信息,最終路由器錯誤轉發。
偽裝成組播路由器,在IGMP查詢報文中使用非常小的"最大響應時間",誘導主機頻繁發送組播成員報告,消耗CPU。
9.6 總結
兩種IPv4廣播地址:
????????受限(255.255.255.255)
????????定向(如192.168.1.255)
IPv4組播MAC:前綴01:00:5e+組播IP地址的低23位。
IPv6組播MAC:16位前綴33:33+組播IP地址的低序32。
IGMP和MLD中魯棒性變量:
????????一個時間值。
????????表示如果路由器在該時間內沒有再收到成員報文,路由器將成員從組播組成員列表中移除。
如果沒有魯棒性變量,當網絡抖動或不穩定性時。不好影響:
????????路由器過早認定主機已離開組播組,過早將主機從成員列表中刪除,導致主機無法接收到組播流量。
????????過多組播成員狀態變化和更新導致網絡擁塞或不必要的流量。特別是大型網絡中。
魯棒性變量使用場景:不穩定網絡。