卷2 第12章 IP多播
12.1 引言
- D类地址(224.0.0.0 ~ 239.255.255.255)用于多播
- 主机组动态变化
- IGMP管理组成员
主机多播级别
| 级别 | 说明 |
|---|
| 0 | 不能发送/接收 |
| 1 | 能发送不能接收 |
| 2 | 能发送和接收 |
12.2 代码介绍
net/if_ether.h:以太网多播
netinet/in.h:多播结构
netinet/in_var.h:多播定义
netinet/ip_var.h:多播结构
12.3 以太网多播地址
IP→以太网映射
01:00:5e + IP地址低23位
text
12.4 ether_multi结构
| 成员 | 说明 |
|---|
| enm_addrlo/hi | 地址范围 |
| enm_ac | 回指arpcom |
| enm_refcount | 引用计数 |
12.5 以太网多播接收
- SIOCADDMULTI:添加多播地址
- SIOCDELMULTI:删除多播地址
12.6 in_multi结构
| 成员 | 说明 |
|---|
| inm_addr | 多播地址 |
| inm_ifp | 接口指针 |
| inm_refcount | 引用计数 |
| inm_timer | IGMP定时器 |
12.7 ip_moptions结构
| 成员 | 说明 |
|---|
| imo_multicast_ifp | 输出接口 |
| imo_multicast_ttl | TTL |
| imo_multicast_loop | 环回标志 |
| imo_membership | 组成员数组 |
12.8 多播的插口选项
| 选项 | 说明 |
|---|
| IP_MULTICAST_IF | 接口 |
| IP_MULTICAST_TTL | TTL |
| IP_MULTICAST_LOOP | 环回 |
| IP_ADD_MEMBERSHIP | 加入组 |
| IP_DROP_MEMBERSHIP | 离开组 |
12.9 多播的TTL值
推荐TTL值
| TTL | 辖域 |
|---|
| 0 | 同一主机 |
| 1 | 同一子网 |
| 32 | 同一地点 |
| 64 | 同一区域 |
| 128 | 同一州 |
| 255 | 不限 |
12.10 ip_setmoptions函数
处理选项
- IP_MULTICAST_IF:设置接口
- IP_MULTICAST_TTL:设置TTL
- IP_MULTICAST_LOOP:环回控制
- IP_ADD_MEMBERSHIP:加入组
- IP_DROP_MEMBERSHIP:离开组
12.11 加入IP多播组
处理流程
- 验证地址
- 查找接口
- 检查是否已加入
- 分配in_multi结构
- 更新以太网多播表
12.12 离开IP多播组
12.13 ip_getmoptions函数
12.14 多播输入处理
- 多播路由器接收所有多播
- 检查接口成员关系
- 转发到其他接口
12.15 多播输出处理
- 设置M_MCAST标志
- 选择TTL
- 选择源地址
- 环回处理
- 转发(路由器)
- 发送
12.16 性能的考虑
12.17 小结
多播使用D类地址,通过IGMP管理组成员。以太网多播映射不唯一。