《数据通信与网络》笔记--IGMP

因特网组管理协议(internet group management protocol,IGMP)是实现IP多播的辅助协议。那什么是多播呢?

“多播”亦称“多点传送”(multicast),也就是一台主机发出的包可以同时被其他多个有资格的主机接收,这台主机和那些有资格的主机就形成了一个组,他们在组内的通信是广播式的。多播的工作原理是,将一个网络上的某些主机的网卡设置成多播传送工作模式,指定其不过滤以某一个多播传送地址作为目的物理地址的数据帧,这样,这些主机的驱动程序中就可以同时接收以该多播传送地址作为目的物理地址的数据帧,而其他主机的驱动程序却接收不到,这些主机在逻辑上便形成了一个“多播”组。采用这种技术,相对广播而言,可有效减轻网络上“多播”组之外的其他主机的负担,因为发送给“多播”组的数据不会被传送到它们的驱动程序中去处理,避免资源的无谓浪费。最开始的时候,设计这一技术的目的是弥补“广播”(Broadcasting)通信的不足。

实际上多播还是广播(因为交换机无法找到多播帧的物理目的地址,关于多播帧的物理目的地址会在本文的后面讲到),只是不加入组播组的机器在硬件一层就已经将组播进行过滤了,减少了机器运算资源的浪费,但是还是浪费了网络资源,所以思科公司制定了CGMP cisco group membership Protocol 思科组成员关系协议,CGMP以Client/Server方式工作,路由器相当于服务器,交换机相当于客户机,路由器接收到IGMP 消息后,以CGMP指令通知交换机多播接收者加入或退出多播组的情况,指导交换机进行准确的多播定向转发。 

还有一个叫IGMP Snooping的功能,它是运行在二层设备上的组播约束机制,用于管理和控制组播组。当二层设备运行了IGMP Snooping后,已知组播组的组播数据不会在二层被广播,而在二层被组播给指定的接收者。

扯远了,我们回来继续讲IGMP吧~

组管理

对于英特网上的多播,我们需要具有路由多播分组能力的路由器,这些路由器的路由表必须由某些多播路由协议更新,这些多播路由协议将在以后进行说明。
IGMP不是一个多播路由协议,而是一个管理组成员(group membership)的协议。在任何网络中,都存在有一个或多个多播路由器把多播分组分发给主机或者其他的路由器,IGMP协议为多播路由器(multicast router),提供关于连接到网络上的主机(路由器)成员状态的信息。一共有2个版本的IGMP,本文讨论的是IGMPV2

IGMP操作

对于每一个组,都有一个路由器负责将多播分组分发给指定的那个组,如果与网络相连的多播路由器有3个,他们的组标识符都是相互排斥的。
《数据通信与网络》笔记--IGMP_第1张图片
上图中,只有路由器R分发其多播地址为239.2.59.1的分组。路由器R是分发路由器,R1和R2依赖于R进行组列表的维护,它们是这个网络中R的接收者,但是对于其他的网络,R1和R2可能是分发路由器,但是不在本网络中。

加入一个组

一个主机或者路由器可加入一个组,每一个主机维护一个组内成员进程表,当一个进程要加入到一个新组时,他就向主机发送请求,该主机就在他的表中增加该进程的名字和所请求的组的名字。如果这是在该组中的第一个成员关系请求,则该主机就向多播路由器发送一个成员关系报告报文(地址为主播地址,在这个网段中的组成员都能接收到,其他组成员接收到该报文后就不再发送关系报告报文了),如果这不是第一个成员关系,则不需要发送成员关系报文,因为主机已经是组的成员,他已经接收了这个组的多播分组。

离开一个组

当主机发现没有进程对一个特殊的组有加入请求时,他就发送一个离开报告,同样的,当路由器发现没有一个与网络连接的接口对一个特殊的组有加入请求,他就发现一个关于该组的离开报告(地址:224.0.0.2,所有的组播路由器)。
但是当一个多播路由器接收到一个离开报告时,因为报告只是来自一个主机或者路由,可能还有其他的主机或者路由器依然存在对该组有加入请求,所以他不可能立即从它的多播地址表中清除该组。为了确保这样做,路由器发送一个特殊查询报文,并插入有关该组的组标识符或多播地址,对任意主机或路由器,路由器允许有一个规定的时间对主机或路由器做出响应。如果在规定的时间内没有接收到加入请求,那么路由器就假定网络中没有忠实的成员,并从它的列表中删除该组。

监视成员关系

主机或路由器可通过发送成员关系报告报文加入到一个组中,也可以通过发送一个离开报告离开一个组,但是发送这两种类型的报告时不够的。考虑这种情形,有一个主机对一个组中有加入请求,但是该主机关闭或者从系统中删除。多播路由器将永远接收不到离开报文。所以路由器周期性发送普通的查询报文(地址:224.0.0.1,所有的主机),当主机或者路由器接收到普通查询报文时,如果它对一个组有加入请求,就用一个成员关系报告来响应。

封装

IGMP报文封装在IP数据报中,而IP数据报本身有封装在帧中。

在网络层的封装

对于IGMP协议,IP分组的协议字段是2,在协议字段中携带这个值的每一个IP分组都有需要给IGMP协议传送数据,当这个报文被封装在IP数据报中,TTL的值设置为1。因为IGMP的域是在局域网中,IGMP报文不能传送到局域网以外。这个TTL保证了报文不能离开局域网。

在数据链路层的封装

在网络层,IGMP报文被封装在IP分组中,作为IP分组处理,但是IP分组有一个多播地址,所以ARP协议不能找到在数据链路层转发该分组对应的mac地址,接着发生的事情依赖于下面的数据链路层是否支持物理多播地址。
大多数局域网支持物理多播地址,以太网就是其中的一种。以太网的物理地址是6个字节的。如果以太网地址的前25位是0000000100000000010111100,他被定义为TCP/IP协议的物理多播地址,余下的23位可用来定一个组,要将IP多播地址转换成以太网地址,多播路由器就要提取D类IP地址中最低的23位,并将其插入到以太网物理地址中。
《数据通信与网络》笔记--IGMP_第2张图片
但是D类地址的组标识符是28位,这就是说5位没有使用,这就表示2^5(32)个IP多播地址映射到一个多播地址,映射是多对一的,主机可能接收到并不属于它涉及到的组的分组,为此,主机必须检查IP地址,并丢弃任何不属于他它的分组。

你可能感兴趣的:(《数据通信与网络》笔记--IGMP)