IGMP 它让一个物理网络上的所有系统知道主机当前所在的多播组,多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。
IGMP报文格式:
这是版本1的IGMP。
IGMP类型为1,说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文,检验和的计算和ICMP协议相同
组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。
IGMP协议
加入一个多播组
多播的基础就是一个进程的概念(使用的术语进程是指操作系统执行的一个程序),该进程在一个主机的给定接口上加入了一个多播组。
在一个给定接口上的多播组中的成员是动态的——它随时因进程加入和离开多播组而变化。
这里所指的进程必须以某种方式在给定的接口上加入某个多播组
进程也能离开先前加入的多播组。这些是一个支持多播主机中任何API所必需的部分。使用限定词“接口”是因为多播组中的成员与接口相关联。一个进程可以在多个接口上加入同一个多播组。
这里暗示一个主机通过组地址和接口来识别一个多播组。主机必须保留一个表,此表中包含所有至少含有一个进程的多播组以及多播组中的进程数量
多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况,使用规则如下:
如下图显示两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询:
该路由器正在要求那个接口上的每个主机说明它加入的每个多播组。
实现细节
当一个主机首次发送IGMP报告(当第一个进程加入一个多播组)时,由于使用的是IP交付服务,不保证该报告被可靠接收。所以下一个报告将在间隔一段时间后发送,这个时间间隔由主机在0~10s的范围内随机选择。
在IGMP报文图中,报告和查询的生存时间(TTL)均设置为1,一个初始TTL为0的多播数据报将被限制在同一主机。默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送,更大的TTL值能被多播路由器转发
正常情况下,用户进程不关心TTL,只有Traceroute程序,它主要依据设置TTL值来完成。既然多播应用必须能够设置要传送数据报的TTL值,这意味着程序设计接口必须为用户进程提供这种能力。
增加TTL的方法: