要求:
- 多播地址
- 局域網、廣域網的多播
- 源特定多播
- 多播套接字選項(核心)
- 封裝范例
內容:
1.多播地址
多播地址-MAC地址映射.JPG
IPv4多播地址范圍:224.0.0.0-239.255.255.255;IPv6多播地址是以 FF: 開始的地址。
IPv4/IPv6地址到MAC地址的映射如上圖。
多播是一個IP協議上的特性,為了支持多播,需要做一些額外的工作來維護該特性。所以,部分多播地址被用做來維護該特性,如:224.0.0.1 標識所有支持多播功能的主機組;224.0.0.2標識所有路由組(更詳細內容可參考RFC文檔)。
2.局域網、廣域網的多播
局域網-廣域網的多播.JPG
局域網的多播,根據IP地址轉換的MAC地址(如:01:00:5e:00:01:01)即可被加入多播組的主機識別并接受。
廣域網經過了路由,不能單獨通過MAC地址來轉發。主機H3加入了組播,則路由器R2將被通知到。此時,R2將發送IGMP報文來通知R1:本路由器R2有一個人加入了組織,后續有活動,需要告知我R2,然后再轉給H3。
3.源特定多播
在同一網絡里,可能出現使用同一個多播組,卻發送不同報文。為了更好的標識處理該種場景,考慮將發送多播的主機地址和多播地址一起標識一個多播。這就是源特定多播(SSM)。
4.多播套接字選項
A. 發送
- IF ---- 指定發送組播的接口,默認由內核選擇
- TTL ---- 發送的組播報文TTL,默認 1
- LOOP ---- 是否回送自己一份發送的報文,默認回送
前綴:IP_MULTICAST_ / IPV6_MULTICAST_
B. 接受
- 動作:
1. ADD/DROP ---- 加入、離開一個組播
2. BLOCK/UNBLOCK ---- (不)阻塞特定地址發送的組播
3. ADD/DROP_SRC ---- 加入、離開一個源特定組播 - 結構體分類:
1. 多播地址
2. 接受多播的地址/接口
3. 發送多播的地址/接口 - 結構體名稱:
- 僅組播
ip_mreq
ipv6_mreq
group_req - 源地址相關的組播
ip_mreq_source
group_source_req
- 僅組播
5. 封裝范例
1. mcast_join
2. mcast_leave
3. mcast_block
4. mcast_unblock
5. mcast_join_source_group
6. mcast_leave_source_group