第七章 因特网组管理协议
(IGMP)
§7-1 引言
IP通信可用到两种类型的通信中:单播和多播。
单播是在一个发送器和一个接收器之间的通信。它是一对一的通信。
多播是一个发送器将同样的报文同时发送给大量的接收器。是一对多的通信。
IP编址方法支持多播。以1110开始的32位地址是多播地址。
多播地址只能用作目的地址。
多播地址也叫做groupid。
硬件广播
许多硬件技术都包含同步(或接近同步)向多个目的站发送分组的机制。
广播交付意味着网络向每个目的站交付一个分组的副本,其实现方式并不一样
类似以太网的总线技术
由交换机和点到点连接构成的网络中。
广播地址(Broadcast Address),在大多数硬件技术中采用保留地址中的特殊地址。
广播的主要缺点是对资源的消耗,除了使用网络带宽外,还消耗所有计算机上的计算资源。
所以,TCP/IP使用单播选路和类似ARP的地址绑定机制来消除广播交付。
组播的硬件起源
组播(multicasting)是一种多点交付,允许每个系统选择是否参与组播。
地址机制保留有较大数目的组播地址,参加组播的站点选择一个特定的组播地址用于通信。
配置好网络接口硬件后,现在站点将可以识别和接收:
单播、广播、和多播分组。
从概念层次看,单播和广播都可以看作组播的特殊形式。
但是,尽管组播具有明显的一般性,也不能替代传输的常规形式。
因为实现转发和交付的底层硬件有根本的差别:
单播和广播根据网络拓扑结构进行转发。
组播必须转发给所有网络段。
以太网组播
以太网提供了硬件组播的最好的实例:
以太网地址用G/L位(高位八位组的地位比特)区别常规单播地址(置0)和组播地址(置1)。点分十六进制表示为:
以太网接口板初始化后,可接收单播和广播地址。
使用设备驱动程序软件后进行重新配置后,可以识别一个或多个组播地址。
IP组播
IP组播(IP multicasting)是对硬件组播的互联网抽象。
IP组播允许到一系列计算机子集的传输,这些子集被允许跨越互联网上任意物理网络,在IP术语中,称为组播群(multicasting group)。
IP组播具有下列一般特性:
群组地址(D类地址,由Internet管理机构分配,永久、临时)
群组数(228实际受选路表大小,而非编制约束)
动态组播成员(任意加入和退出群组,加入任意多个群组)
硬件的使用(若底层不支持硬件组播,则用广播或单播来交付)
网络间转发(因群组跨越网络,需要组播路由器)
交付机制(与IP数据报交付使用相同的尽最大努力交付机制)
成员和传输(任意主机可向任意群组发送,群组只确定接收)
概念性组成部分
一般的目的互联网组播系统需要三个概念性组成部分:
1.组播编址方法
2.有效的通知和交付机制
3.有效的网络间转发工具
IP组播地址
永久地址:又称为熟知的(well-known),用于Internet上的主要服务以及基础结构维护(例如,组播选路协议)
临时地址:又称为瞬变的(transient multicast group),需要时创建,群组成员为0时丢弃。
考虑两个相互冲突的目标:
允许分配地址时的本地自治,同时定义具有全局含义的地址
IP组播使用数据报目的地址来规定数据报为组播交付,采用D类地址:
1110+群组标识
~
两个重要的通常用于控制协议,而非数据传交付的永久组播地址:
永久分配给全系统群组(all system group)
永久分配给全路由器群组(all routers group)
组播地址机制
IP组播地址不能用作源地址,不能出现在源路由或记录路由选项中。
不会生成关于组播数据报的ICMP差错报文。如发往组播地址的Ping得不到回答。
组播使用TTL字段限制数据传播。
IP组播映射到以太网组播
IP组播标准并没覆盖所有类型的网络硬件,但能映射到以太网组播地址上。
将IP组播地址的低23位放到特殊的以太网组播地址的低23比特上。
这种映射并不唯一,因为IP组播地址有28个有效比特用来表示组播群组,可能有多个群组同时映射到一个以太网组播地址。
所以主机可能接收到目的不是本机的某些组播数据报,因此IP软件必须检查所有到达的数据报的地址。
主机和组播交付
IP组播可用在单个物理网络上,也可在互联网上。
在单个物理网络上,主机直接把数据报放在一帧中并使用接收方在监听的组播地址,发送给目的主机。
在互联网上,组播路由器负责在网络间转发组播数据报。主机把组播数据报转发给组播路由器,使用本地网络硬件的组播能力,而非单播、广播时所用选路技术。组播路由器监听所有IP组播,根据需要转发。
所以,本地组播和非本地组播的主要区别在于组播路由器,而不在主机。
组播作用域
组播群组的作用域(scope)指群组成员的范围。
如果群组成员全部在同一物理网络内,认为作用域限制在一个网络内。类似,若在同一机构内,认为作用域限制在一个机构内。
除了群组作用域,每个组播数据报也有一个作用域,定义为某数据报传播通过的网络集合。数据报的作用域称为它的范围(range)。
IP使用两种技术限制组播作用域:
TTL字段控制范围
管理辖区(administrative scoping)
如限制同一网络内主机和路由器通信的控制报文在本网络内,可设置TTL=1;同一主机内的两进程使用IP组播进行处理器间的通信,可设置TTL=0;路由器厂商配置本地网点的路由器以限制TTL<15的数据报。
管理辖区,用于控制辖区,地址空间包括用于某网点的或用于某机构的本地群组的部分。
~ 作用域限制在一个机构内
~ 作用域限制在一个网点内
把主机软件扩展为可处理组播
参与IP组播的主机可具有以下所示三种级别中的一种:
级别 含义
0 主机不能发送也不能接收IP组播
1 主机能发送但不能接收IP组播
2 主机能发送和接收IP组播
改进为能发送:使主机IP软件允许应用程序指定组播地址为目的地址,网络接口软件能把组播地址映射为相应的硬件组播地址(若硬件不支持组播,就使用广播技术)
改进为能接收:
IP软件必须有一个API,允许应用程序声明加入或退出某个组播群组。
如果有多个应用程序加入同一群组,则IP软件必须为每个应用程序传送一份收到的发往该群组的数据报。
如果所有应用程序退出该群组,主机必须记住不再参与该群组工作。
主机必须运行一个协议(IGMP),把自己的群组成员状态通知给本地组播路由器。
Internet群组管理协议
IGMP的工作分为两个阶段:
1.当主机加入一个新的组播群组时,发送一个IGMP报文给群组的组播地址,宣布其成员。
本地组播路由器接收到这个报文后,向互联网上其它组播路由器传播找个群组成员信息,以建立必要的路由。
2.为适应动态的成员,本地组播路由器周期性的轮询本地网络上的主机,以便确定现在各个群组中有哪些主机。如经过若干次轮询后,某个群组中始终没有成员,组播路由器则认为该群组中不再有本网络中的主机,于是停止向其它组播路由器通告该群组的成员信息。
IGMP的实现
1.主机与组播路由器之间的所有通信都使用IP组播。
携带ICMP报文的数据报在传输过程中尽量利用硬件的组播能力。在支持硬件组播的网络上,不参与IP组播的主机就不会收到ICMP报文。
2.当轮询确定群组成员时,组播路由器不会为每个群组发送单独报文,而是发送单个查询请求得到关于所有群组的信息。默认的轮询间隔是125秒。
3.如果多个组播路由器连接在同一网络,它们会迅速而有效的选择一个路由器轮询主机成员。
4.主机不会同时响应路由器的ICMP查询,每个查询包含一个N值,指定了最大响应时间(默认值是10秒)。当查询到达时,主机选择一个0至N之间的随机时延,在这个时延之后发送响应报文。
实际上如果某个主机时多个群组的成员,就会为每个群组选择不同的随机响应时延,这样,主机对路由起的响应就会在10秒内随机分布。
5.每台主机监听群组中其它主机的响应,并抑止那些不必要的通信量。
因为发送到全系统地址的查询到达每个群组成员,每个主机随机响应。实际上,只有最小时延的那台主机用群组的组播地址响应,其它成员收到副本,取消定时器并抑止传输。
组播路由器不需要保留群组的确切记录,只需要知道网络中是否有一台主机是群组的成员。
群组成员状态的转换
ICMP必须记住主机所属的每个组播群组的状态。
主机保留一个记录群组成员信息的表。每当一个应用程序加入一个新的群组,ICMP软件就为之分配一项并填入关于该群组的信息。
在这些信息中,维护着一个群组参照计数器(group reference counter),其初始值为1。
每当新应用程序加入群组,就把相应项的计数器加1。反之,如果一个应用程序退出一个群组,则减1。
当计数器为1时,主机通知组播路由器它将退出该群组。
§7-2 IGMP
IGMP
Internet Group Management Protocol(因特网组管理协议)
设计IGMP是为了帮助多播路由器识别在局域网上的一些主机,而这些主机是一个多播组的成员。
IGMP和IP协议配合使用。
IGMP 报文
IGMP 报文的类型
ICMP有两种类型的报文:报告和查询。
报告报文是从主机发送到路由器。
查询报文是从路由器发送到主机。
Report
Query
IGMP 报文格式
版本(1)
类型
未使用
检验和
在报告中的组地址,在查询中是全0
8 bits
8 bits
16 bits
类型:查询(1) 报告(2)
IGMP 报文格式中各字段说明:
版本:4比特字段。定义了协议的版本,现在是版本1。
类型:4比特字段。定义了报文的类型。1是查询报文,2是报告报文。
检验和:16比特字段。
组地址:定义了在报告报文中的组地址,在查询报文中这个字段填入0。
组播转发和选路信息
前面描述的IGMP和组播编址方法指定了主机怎样和本地路由器交互,如何通过单个网络传送组播数据报,但没有指定路由器怎样交换群组成员信息,或者怎样确保每个数据报的副本能够到达所有群组成员。
现在没有同一的标准协议来传播组播选路信息。
组播选路比较复杂和困难,它与常规选路在基本方法上是不同的。
在下图简单的网络拓扑结构中,存在与常规选路的差异。
网络3
R
网络1
网络2
A
B
C
D
E
F
G
1.对动态选路的需求
在单播选路中,只有当拓扑结构改变或设备出故障时才会发生路由改变,而组播路由则不同,应用程序加入或者退出一个组播群组就会发生组播路由的改变。
例如,网络2有一个主机加入组播群组“×”,则路由器R要把网络2包括进去。然而开始时,到“×”的组播不会传播到网络2中去。
2.目的选路的不足之处
组播转发需要路由器检查多个目的地址。
例如,在上图中路由器R到任一群组的转发有三种动作。
3.任意发送方
组播数据报可以从非组播群组成员的计算机上发起,并且可以路由通过没有任何组播成员的网络。
基本组播选路
组播路由器使用多个目的地址转发数据报,因此产生一个问题,“决定如何转发数据报时,组播路由器到底使用什么信息呢?”
组播路由器必须依靠数据报的源地址。
反向路径转发RPF(Reverse Path Forwarding),使用数据报的源地址来避免数据报反复通过一个环路。
组播路由器有一个常规选路表,其中有到每个目的站的最短路径
当数据报到达时,路由器提取出源地址
在本地选路表中查找出I,I是对应源地址的接口
如果数据报是通过接口I到达的,路由器就给其它接口转发一份副本,否则就丢弃
优点:RPF基本方法能够保证组播群组中的每个成员都能接收组播数据报。
缺点:RPF浪费了没有群组成员的网络的带宽。
为了避免传输不需要的组播数据报,引进了RPF的修改版本,称为截尾反向路径转发TRPF(Truncated Reverse Path Forwarding)或截尾反向路径广播TRPB(Truncated Reverse Path Broadcasting)。
组播路由器包含两种信息:常规选路表和通过每个网络接口可达的组播群组列表。
当组播数据报到达时,路由器首先应用RPF规则。
1.如果RPF指定丢弃该副本,则丢弃
2.如果RPF要求通过特定接口传输该数据报,路由器首先会进行额外的检查,以便验证数据报目的地址中指定的一个或多个群组成员通过该接口是可达的。
3.如果检查获知通过该接口没有群组成员可达,路由器就会跳过该接口并继续检查下一接口。
截尾的来源:沿路径不再有群组成员时路由器就会使转发截至。
总结:
当进行转发决策时,组播路由器使用了数据报的源地址和目的地址。基本转发机制称为截尾反向路径转发。
TRPF的两个后果
1.一个组播数据报可能通过两条具有相同层次的不同的路径,到达同一网络。
主机可能收到同一数据报的两份副本。如X->5
2.同一拓扑结构中不同源站的相同组播,具有不同路由结果。
交付取决于数据报的源地址。如X->,Z->
X
Z
Y
5
2
6
3
1
4
组播树
Tree,转发树或交付树。
每个组播路由器对应于树中一个节点
连接两个路由器的网络对应于树中的一个边
数据报的源站是树的根(root)或根节点
从源站沿每条路径的最后一个路由器称为叶(leaf)路由器
连接叶路由器的网络称为叶网络(leaf network)
在上图中以X为根,R3,R4,R5,R6是叶路由器。
以Z为根则不正确,因为R3在两条路径上。
使用图论术语可以表达一个重要的原则:
组播转发树被定义为一系列通过组播路由器的途径,这些途径从源站到组播群组的所有成员。对于某组播群组,每个可能的数据报源都能确定一个不同的转发树。
组播表的每项由一个序偶标识:
(组播群组,源站)
同一网络中的主机具有相同的组播路由,因此组播选路表用网络前缀作为源站,由每个路由器保留转发表。
因此,组播选路表的大小正比于互联网中网络数和组播群组数的乘积。
而常规选路表的大小仅正比于网络数目。
组播选路的实质
注意:“IP组播与TRPF特性之间的不一致性”。
IP允许任何主机动态的加入或退出一个组播群组。而TRPF必须了解群组成员的关系。
成员关系迅速变化,而群组成员信息必须通过互联网传播。
成员关系是组播选路的核心:所有组播选路方法都提供了一种传播成员信息的机制,还提供了转发数据报时使用该信息的方式。
每种组播设计都在选路通信量超载和低效数据传输之间折衷。
通常路由器获得的成员关系信息并不完整,选路滞后于变化。
反向路径组播
反向路径组播RPM(Reverse Path Multicasting)是对TRPF的扩展,更加具有动态性。
这种设计基于三种假设:
与消除不必要的传输相比,确保到达每个成员更重要
组播路由器各包含一个具有正确信息的常规选路表
组播选路应尽可能的提高效率(如消除不必要的传输)
RPM分为两个步骤:
1.开始时,使用RPF广播方法通过互联网的所有网络发送每个数据报的副本。
2.组播路由器互相通知关于不能通往群组成员的路径的情况。路由器停止向不能到达的路径转发。
步骤2中,RPM自底向上传播成员信息。
1.信息先从选择加入或退出群组的主机开始,使用IGMP传递信息给本地路由器。
2.叶路由器确定是否向叶网络转发。当没有群组成员时,再同步通知到根的路径上的下一个路由器。就这样路由器沿叶—>根的路径依次剪除路径。
RPM实际是广播并剪除(broadcast and prune)策略,路由器使用RPF广播,直到收到允许剪除路径的信息。
另外路由器还要处理接枝请求(graft request)。
当主机加入一个群组,路由器查阅自己的群组记录,获得以前发出过剪除请求的路由器地址,向其发送新报文,撤销前一次剪除的效果,把以前剪除的分枝接回树上。
矢量距离组播选路协议
矢量距离组播选路协议DVMRP(Distance Vector Multicast Routing Protocl)是仍在Internet中使用的最早的组播选路协议之一。
允许在组播路由器之间传递群组成员关系和选路信息。
类似于RIP,定义了IGMP的一种扩展形式。
实质上该协议传递的信息包括当前组播群组成员关系,也包括路由器之间传送数据报的费用。对于每个可能的(群组,源站)序偶,路由器都在物理互联基础上施加一个转发树。
DVMRP指定了额外的IGMP报文,允许路由器声明成员关系、退出一个组播群组以及询问其它路由器。以及携带选路信息的报文。
Mrouted是UNIX下实现DVMRP的著名程序。
其它组播协议
随着Internet的迅速发展,DVMRP从规模上已无法处理大量路由器、更大量的组播群或者成员关系的迅速变化。因此DVMRP不适合作为Internet的通用组播选路协议。
为了克服DVMRP的局限性,IETF研究了其它一些组播协议,包括
核心基干树CBT(Core Based Trees)
协议无关组播PIM(Protocol Independent Multicast)
OSPF组播扩展(MOSPF)