文章目录
IGMP
运行于主机和路由器之间
因特网组管理协议,TCP/IP 协议族中负责 IP 组播成员管理的协议,用来在接收者与其他直接相邻的组播路由器之间建立、维护组播组成员关系
- 负责组播成员管理,运行在主机和组播路由器之间
- 主机侧:通过IGMP向路由器通告组成员关系
- 路由器侧:通过IGMP协议维护组成员关系
- 所有IGMP版本都支持ASM模型 - IGMPv3可以直接应用于SSM模型,而 IGMPv1 和 IGMPv2 则需要 SSM-Mapping 技术的支持 - 运行 IGMP 高版本的路由器可以识别低版本的成员报告(向前兼容)
组播组管理协议工作机制:
- 主机加入或离开组播组
- 路由器维护组播组
- 查询器选举
- 成员报告抑制
IGMPv1
定义基本的组成员查询和报告过程
类型
- 成员关系查询 0x11
- 成员关系查询 0x12
组地址
- 当一个成员关系报告正被发送时,组地址字段包含组播地址
- 当用于成员关系查询时,本字段为0,并被主机忽略
路由器周期性发送成员关系查询,默认查询周期为 60s,
成员关系报告的发送可以被动发送也可主动发送
被动发送:主机收到成员关系查询消息后,发送成员关系报告
主动发送:主机主动发送成员关系报告
工作机制
- 普遍组查询与响应
- 响应抑制机制(当发现已经有人向自己感兴趣的组发送过数据之后,本地这边就不会再次发送报告)
每个收到查询的主机会启动一个计时器,默认0------10秒随机值,超时后发送报告
静默离开
记时130秒,即组成员关系超时时间=IGMP普遍查询消息发送间隔 x 健壮系数 + 最大查询响应时间
查询器选举
查询器依靠组播路由协议PIM,PIM中选择的DR会充当IGMPv1里面的查询器
IGMPv2
IGMPv2为默认版本,在IGMPv1的基础上添加了查询器选举和离开组机制
类型
- 成员关系查询 0x11
常规查询:用于确定哪些组播组有效,该组播组是否还有成员在使用,常规查询地址全零表示
指定组查询:用于查询特定的组播组是否还有组成员,在一台设备发送离开报文后进行特定查询该组是否还有使用者两次- 版本2的成员关闭报告 0x16;版本1的成员关系报告 0x12
- 离开组信息 0x17
组地址
- 在成员查询消息中,发送一个常规查询时组地址设为0,当发送一个特定组查询时,则应设置为组的地址
- 在成员报告或离开组的消息中,组的地址保留了要报告或要离开的地址
IGMPv2增加了最大响应时间字段,以动态地调整主机对组查询报文的响应时间
工作机制
- 独立的查询器选举机制
- 存在多个组播源的时候IP地址小的获胜,成为查询者,进行普遍组查询
IGMPv3
成员可以指定接受或不接受某个组播源的报文
- 服务于 SSM 模型
- 增加了主机的控制能力,对组播源进行过滤
- 取消了成员报告抑制机制
- 过滤模式包含 Include 和 Exclude
工作机制
- 周期性地向 224.0.0.1 发送普通查询
- 接受端发送成员报告,指出希望加入或拒绝某些组播发送的数据
- 独立的查询器选举机制
- 存在多个组播源的时候IP地址小的获胜,成为查询者,进行普遍组查询
IGMPv3主机发送类型
组数和地址数为1
- Mode Is Include:接收从指定源列表发往该组播组的数据
- Mode Is Exclude:不接收源地址列表中包含的源发往该组的组播数据
- Change To Include Mode:表示组播组与源列表之间的对应方式由EXCLUDE转换到INCLUDE
- Change To Exclude Mode:表示组播组与源列表之间的对应方式由INCLUDE转换到EXCLUDE
- Allow New Source:现有基础上,还希望从某些组播源接收组播数据
- Block Old Sources:现有基础上,不再希望从某些组播源接收组播数据
特定源组查询
无离开报文,通过这种方式进行离开
- 针对某个源某个组进行特定组的查询,确保组还有成员在使用
IGMP总结
机制 IGMPv1 IGMPv2 IGMPv3 查询器选举 依靠其他协议 自己选举 自己选举 普遍组查询 支持 支持 支持 成员报告报文 支持 支持 支持 特定组查询报文 不支持 支持 支持 成员离开方式 静默离开 主动发送离开报文 未定义专门的离开报文,通过特定类型的报告报文传达 特定源、组查询报文 不支持 不支持 支持 指定组播源 不支持 不支持 支持 可识别协议报文 IGMPv1 IGMPv1 IGMPv2 IGMPv1 IGMPv2 IGMPv3 ASM模型 支持 支持 支持 SSM模型 需要IGMP Mapping 需要IGMP Mapping 支持
IGMP Snooping
组播数据在二层被泛洪
- 网络资源浪费
- 存在安全隐患
IGMP Snooping概述
- 解决组播报文在二层泛洪的问题
- 运行在数据链路层,是二层交换机上的组播约束机制,用于管理和控制组播组
- 通过监听 IGMP 报文,建立组播MAC地址表
端口角色
路由器端口:接受组播数据----上游接口
- 收到源地址不为 0.0.0.0 的 IGMP 普遍组查询报文或PIM Hello 报文的接口都将被叫做动态路由器端口
- 手工配置的路由器端口叫做静态路由器端口
成员端口:发送组播数据----下游接口
- 收到 IGMP Report 报文的接口,叫做动态成员端口
- 手动配置的成员叫做静态成员端口
工作原理
启用 IGMP Snooping 机制后,查询响应仅向路由器接口转发
模拟器环境会出现BUG,报告可以,但是普遍组查询和离开报文会被隔离,这种情况要想实现 IGMP 操作就需要在组管理设备上配置静态的 IGMP表项