TCP/IP详解 卷一 13章 IGMP

こ雲淡風輕ζ 提交于 2019-12-10 14:51:52

概述

IGMP:Internet组管理协议。让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。
IGMP在RFC1112中定义
IGMP是IP层中的一部分
通过IP数据报进行传输
长度固定(8字节),没有可选项
在这里插入图片描述

IGMP数据报

在这里插入图片描述
类型为1说明为多播路由器发出的查询报文,为2说明是主机发送的报告报文。检验和与计算检验和的ICMP相同
查询报文中的组地址设置为0
在报告报文中的组地址为要参加的组地址

加入一个多播组

多播的基础是一个进程(程序),该进程在一个主机的给定接口上加入或离开一个多播组
在一个给定接口的多播组成员是动态的。它随时因进程的加入和离开多播组变化

IGMP报告和查询

多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。记录规则:

  1. 当第一个进程加入一个组时,主机发送一个IGMP报告,如果是1个主机的多个进程加入同一个组,那么夜只发送1个IGMP报告。
  2. 进程离开一个组时,主机不发送报告。哪怕是组中最后一个进程离开。主机知道在确定的组中不在有组成员后,在随后的IGMP查询中就不再发送报告报文。
  3. 多播路由器定时发送IGMP查询来了解是否还有任何主机包含在属于多播组的进程。路由器必须向每个接口发送一个IGMP查询,以此希望主机对它加入的每个多播组均发回一个报告。
  4. 主机通过IGMP报告来响应一个查询报文,对每个至少还包含一个进程的组均发回IGMP报告

多播路由器对每个接口都存储一份表,表中记录着借口上至少还包含1个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。

实现细节

当一个主机首次发送IGMP报告时,并不保证该报告会被正确接受(IP层交付可不管是否有收到)下一个报告会间隔0~10秒的范围随机选择发送。
主机收到查询报文时并不立即响应,而是一段时间间隔后才发送响应。而同一多播组的多个主机均能发送一个报告,他们的发送间隔是随机的。在同一个物理网络中的所有主机将收到同组中其他主机的报告。
这样就会出现1个主机在等待发送报告的过程中,收到了其他主机的相同报告,则该主机的响应报文就不用发送了。因为多播路由器无所谓有多少个主机在同一组中,甚至不关心是哪个主机在多播组中。他只想知道至少有1个主机在多播组中。
在没有任何多播路由器的单个物理网络中,仅有的 I G M P通信量就是在主机加入一个新的多播组时,支持I P多播的主机所发出的报告。

生存时间字段

在这里插入图片描述
TTL字段如果为0,表示数据报被限制在同一主机,如果为1则限制在同一子网内传送,如果为更大的TTL,则能被多播路由器转发。

所有主机组

目的IP地址位224.0.0.1为所有主机组地址。它涉及在一个物理网络中的所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!