UNIX网络编程-多播

要求:

  1. 多播地址
  2. 局域网、广域网的多播
  3. 源特定多播
  4. 多播套接字选项(核心)
  5. 封装范例

内容:

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. 发送多播的地址/接口
  • 结构体名称:
    1. 仅组播
      ip_mreq
      ipv6_mreq
      group_req
    2. 源地址相关的组播
      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

你可能感兴趣的:(UNIX网络编程-多播)