要求:
- 多播地址
- 局域网、广域网的多播
- 源特定多播
- 多播套接字选项(核心)
- 封装范例
内容:
1.多播地址
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.局域网、广域网的多播
局域网的多播,根据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