IGMP
Rio 2023-03-16
计算机网络
总览
什么是IGMP、IGMP工作机制
# 什么是IGMP
IGMP是Internet Group Management Ptotocol的简称,被称为互联网组管理协议,负责IPV4组播成员管理的协议。
# ICMP作用
- IGMP协议用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
- 参与IP组播的主机可以在任意位置、任意时间加入或退出组播组。IP组播通常应用在视频点播、网络会议等场合
![image-20230317075255555](/assets/img/image-20230317075255555.5b741527.png)
- IGMP 报文向路由器申请加入和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机通过 IGMP 加入到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发组播包到对应的主机了。
- IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常为 1,因为 IGMP 是工作在主机与连接的路由器之间。
# IGMP协议版本
- IGMPv1:允许主机加入组播组,但没有离开信息。路由器基于超时机制去发现其成员离开
- IGMPv2:包含了离开信息,允许迅速向路由协议报告组成员终止情况
- IGMPv3:允许主机指定它要接收或组织的通信流量的主机对象(一个用户可能同时要接收好几个组播源给它发数据,这个用户可以指定它什么时间接收或者暂不接收等)
# 常规查询与响应工作机制
以 IGMPv2
作为例子
![image-20230317080102365](/assets/img/image-20230317080102365.7efaabe2.png)
- 路由器会周期性发送目的地址为
224.0.0.1
(表示同一网段内所有主机和路由器) IGMP 常规查询报文。 - 主机1 和 主机 3 收到这个查询,随后会启动「报告延迟计时器」,计时器的时间是随机的,通常是 0~10 秒,计时器超时后主机就会发送 IGMP 成员关系报告报文(源 IP 地址为自己主机的 IP 地址,目的 IP 地址为组播地址)。如果在定时器超时之前,收到同一个组内的其他主机发送的成员关系报告报文,则自己不再发送,这样可以减少网络中多余的 IGMP 报文数量。
- 路由器收到主机的成员关系报文后,就会在 IGMP 路由表中加入该组播组,后续网络中一旦该组播地址的数据到达路由器,它会把数据包转发出去。
# 离开组播组工作机制
情况一,网段中仍有该组播组
![image-20230317080338579](/assets/img/image-20230317080338579.429db599.png)
- 主机 1 要离开组 224.1.1.1,发送 IGMPv2 离组报文,报文的目的地址是 224.0.0.2(表示发向网段内的所有路由器)
- 路由器 收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个),以便确认该网络是否还有 224.1.1.1 组的其他成员。
- 主机 3 仍然是组 224.1.1.1 的成员,因此它立即响应这个特定组查询。路由器知道该网络中仍然存在该组播组的成员,于是继续向该网络转发 224.1.1.1 的组播数据包。
情况二,网段中没有该组播组
![image-20230317080412024](/assets/img/image-20230317080412024.4456f04b.png)
- 主机 1 要离开组播组 224.1.1.1,发送 IGMP 离组报文。
- 路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个)。此时在该网段内,组 224.1.1.1 已经没有其他成员了,因此没有主机响应这个查询。
- 一定时间后,路由器认为该网段中已经没有 224.1.1.1 组播组成员了,将不会再向这个网段转发该组播地址的数据包。
# 组播地址
组播地址不是用于机器ip地址的,因为组播地址没有网络号和主机号,所以跟dhcp没关系。组播地址一般是用于udp协议,机器发送UDP组播数据时,目标地址填的是组播地址,那么在组播组内的机器都能收到数据包。
是否加入组播组和离开组播组,是由socket一个接口实现的,主机ip是不用改变的
# 参考
小林coding