TCP/IP详解 卷1:协议 学习笔记 第十三章 IGMP:Internet组管理协议

IGMP让多播路由器知道相连网络上所有接口上的多播组,多播路由器就能知道多播数据报应向哪些接口转发。

IGMP与ICMP一样,被当作IP层的一部分,IGMP报文通过IP数据报传输,IGMP报文通过IP首部中协议字段值为2来指明。IGMP报文长度固定,没有可选数据:
在这里插入图片描述
以上是IGMP版本为1的格式,类型字段为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。组地址字段在查询报文中设为0,报告报文中组地址为发送报告的主机加入的组地址(接口上每有一个关联的多播组就发一个报告报文)。

一个主机上的某个进程可以在给定接口上加入一个多播组。在一个给定接口上的某个多播组中的成员是动态的,它随时因进程加入和离开该多播组而变化。

主机通过组地址和接口来识别一个多播组。主机必须保留一个表,其中存放至少含有一个进程的多播组及其中的进程数量。

多播路由器使用IGMP报文来知道与该路由器相连网络中组成员的变化情况,规则如下:
1.当第一个进程加入一个组时,主机就发送一个IGMP报告,如果一个主机上多个进程加入同一组,只发送一个IGMP报告。这个报告发送到进程加入的组所关联的接口上。
2.进程离开一个组时,主机不发送报告,当主机上最后一个进程离开该组,在随后收到的IGMP查询中不再发送报告报文。
3.多播路由器定期发送IGMP查询报文来了解主机上是否有加入多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。
4.主机收到IGMP查询时,对每个包含进程的多播组都发回一个IGMP报告。
在这里插入图片描述
多播路由器对每个接口维护一个表,表中记录该接口上至少还包含一个进程的多播组。

主机发送IGMP报告时,不保证该报告被可靠接收(因为使用的是IP协议),下一个报告间隔时间由主机在0~10秒范围内随机选择。

当主机收到一个路由器的IGMP查询后,并不立即响应,而是经过一定时间间隔再发送一些响应(主机必须对它参加的每个组发送一个响应)。一个物理网络中的所有主机都将收到同组其他主机发送的报告,因为如上图,目的地址是组地址,这意味着一个主机如果收到了其他主机的相同报告,则该主机的响应就不必发送了,因为路由器将该多播报文发送到此物理网络中时,该主机也能收到。

在没有任何多播路由器的单个网络中,仅有的IGMP通信量是在主机加入一个新的多播组时,支持IP多播的主机发送的报告。

上图中,IP首部中的TTL字段值被设为1,一个初始TTL值为0的多播数据报将被限制在同一主机,默认,待传多播数据报的TTL被设为1,这将使多播数据报仅局限在同一子网内传送,更大的TTL值能被多播路由器转发。

对一个发往多播地址的数据报不会产生ICMP差错报文(当TTL为0时,多播路由器也不产生ICMP超时差错)。

一般用户进程不关心传出数据报的TTL,但一些进程,如Traceroute需要使用TTL值,编程API要为进程提供设置TTL的能力。

通过增加TTL,应用可实现对一个特定服务器的扩展环搜索,第一个多播数据报以TTL等于1发送,如果没有响应,就尝试增加TTL,这样应用能找到以跳数度量的最近服务器。

从224.0.0.0到224.0.0.225的特殊地址是打算用于多播范围不超过1跳的应用,不管TTL的值为多少,多播路由器都不转发目的地址为这些地址中任何一个地址的数据报。

上图中,路由器的IGMP查询报文被送到的目的IP地址为224.0.0.1,该地址被称为所有主机组地址,它表示一个物理网络中的所有具备多播能力的主机和路由器,当接口初始化后,所有具备多播能力的接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告。

在支持多播的主机sun上采用经过修改的netstat命令报告每个接口上的多播组成员情况,黑体表示有关的多播组:
在这里插入图片描述
netstat命令的-n选项以数字形式显示IP地址(而不是按名字来显示它们),-i选项显示接口的统计结果,-a选项显示所有配置的接口。

上图显示,le0(以太网)接口属于主机组224.0.0.1(所有主机组地址),并且相应以太网地址为01:00:5e:00:00:01,是组地址映射的结果。SLIP接口sl0和回送接口lo0也都支持多播,且属于所有主机组。

查看sun主机上的路由表:
在这里插入图片描述
可见所有传往224.0.0.0的数据报均被送往以太网接口le0。

令主机sun的以太网接口140.252.13.33加入多播组224.1.2.3,再查看多播组信息:
在这里插入图片描述
可见该接口已加入这个组(且其他接口没有加入),并得到了期望的以太网地址。以下是加入这个多播组时的tcpdump的输出:
在这里插入图片描述
第一行是主机加入多播组时产生的IGMP报告报文,第二行是防止第一个报文丢失而发送的相同IGMP报告报文,两者间隔6秒多,这是主机在0~10秒内随机选择的时间间隔。

两行中的目的IP地址都是多播组地址。

先将sun主机上以太网接口le0接口加入另一个多播组224.9.9.9,然后启动sun主机上的多播选路的守护程序,观察所交换的IGMP查询和报告报文,此时运行tcpdump:
在这里插入图片描述
当选路守护程序启动时,输出第一行,它发出一个已经加入了组224.0.0.4的报告。多播地址224.0.0.4是一个知名地址,当前用于多播选路的距离向量多播选路协议DVMRP(Distance Vector Multicast Routing Protocol)。

在该守护程序启动时,它也在第二行发送了一个IGMP查询报文,查询的目的IP是IP地址为224.0.0.1(所有主机组)。

第一个报告(第3行)大约5秒后收到(sun上的报告,报告给本机sun上的选路守护程序),报告给组224.9.9.9,这是下一个查询发出前收到的唯一报告。当守护程序启动后,两次查询(第2行和第4行)相隔的时间很短,原因是守护程序需要将其多播路由表尽快建立起来。

第5、6、7行sun主机针对它所属的每个组发出一个报告,其中除了224.0.0.4外的两个组是主动加入的。只要选路守护程序还在运行,它就始终要属于组224.0.0.4。

下一个查询位于第8行,大约在前一个查询的2分钟后发出,它再次引发出我们期望的报告,这些报告的顺序与前面不同,因为接收到查询到发送报告的时间是随机的。

最后一个查询大约在前一个查询的2分钟后发出,我们再次得到了期望的响应。

主机收到IGMP查询报文后,到发送IGMP报告时的时间是随机的,一个局域网内的主机可使用基于IP或以太网地址的随机时间,因为每个主机的值都不同,可避免两台主机产生相同的随机时延。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值