您的位置:首页 > 理论基础 > 计算机网络

tcp/ip (十三)

2010-05-10 21:30 148 查看
下载
第13章IGMP:Internet组管理协议
13.1 引言
1 2 . 4节概述了I P多播给出,并介绍了D类I P地址到以太网地址的映射方式。也简要说明了
在单个物理网络中的多播过程,但当涉及多个网络并且多播数据必须通过路由器转发时,情
况会复杂得多。
本章将介绍用于支持主机和路由器进行多播的
I n t e r n e t组管理协议( I G M P)。它让一个物理网络上的所
有系统知道主机当前所在的多播组。多播路由器需要这
些信息以便知道多播数据报应该向哪些接口转发。I G M P
在RFC 111 2中定义[Deering 1989]。
正如I C M P一样, I G M P 也被当作I P 层的一部分。
I G M P报文通过I P数据报进行传输。不像我们已经见到的其他协议, I G M P有固定的报文长度,
没有可选数据。图1 3 - 1显示了I G M P报文如何封装在I P数据报中。
I G M P报文通过I P首部中协议字段值为2来指明。
13.2 IGMP报文
图1 3 - 2显示了长度为8字节的I G M P报文格式。
图13-2 IGMP报文的字段格式
这是版本为1的I G M P。I G M P类型为1说明是由多播路由器发出的查询报文,为2说明是主
机发出的报告报文。检验和的计算和I C M P协议相同。
组地址为D类I P地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组
地址。在下一节中,当介绍I G M P如何操作时,我们将会更详细地了解它们。
13.3 IGMP 协议
13.3.1 加入一个多播组
多播的基础就是一个进程的概念(使用的术语进程是指操作系统执行的一个程序),该进
程在一个主机的给定接口上加入了一个多播组。在一个给定接口上的多播组中的成员是动态
图13-1 IGMP报文封装在IP数据报中
IP数据报
IP首部IGMP报文
20字节8字节
4位
IGMP
版本(1)
4位
IGMP
类型(1-2)
未用检验和
32位组地址(D类IP地址)
8字节
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
的—它随时因进程加入和离开多播组而变化。
这里所指的进程必须以某种方式在给定的接口上加入某个多播组。进程也能离开先前加
入的多播组。这些是一个支持多播主机中任何A P I所必需的部分。使用限定词“接口”是因为
多播组中的成员是与接口相关联的。一个进程可以在多个接口上加入同一多播组。
S t a n f o r d大学伯克利版U n i x中的IP 多播详细说明了有关socket API的变化,这些变
化在Solaris 2.x和ip(7)的文档中也提供了。
这里暗示一个主机通过组地址和接口来识别一个多播组。主机必须保留一个表,此表中
包含所有至少含有一个进程的多播组以及多播组中的进程数量。
13.3.2 IGMP 报告和查询
多播路由器使用I G M P报文来记录与该路由器相连网络中组成员的变化情况。使用规则如
下:
1) 当第一个进程加入一个组时,主机就发送一个I G M P报告。如果一个主机的多个进程加
入同一组,只发送一个I G M P报告。这个报告被发送到进程加入组所在的同一接口上。
2) 进程离开一个组时,主机不发送I G M P报告,即便是组中的最后一个进程离开。主机知
道在确定的组中已不再有组成员后,在随后收到的I G M P查询中就不再发送报告报文。
3) 多播路由器定时发送I G M P查询来了解是否还有任何主机包含有属于多播组的进程。多
播路由器必须向每个接口发送一个I G M P查询。因为路由器希望主机对它加入的每个多播组均
发回一个报告,因此I G M P查询报文中的组地址被设置为0。
4) 主机通过发送I G M P报告来响应一个I G M P查询,对每个至少还包含一个进程的组均要
发回I G M P报告。
使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还
包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使
用相应的多播链路层地址)还拥有属于那个组主机的接口上。
图1 3 - 3显示了两个I G M P报文,一个是主机发送的报告,另一个是路由器发送的查询。该
路由器正在要求那个接口上的每个主机说明它加入的每个多播组。
图13-3 IGMP的报告和查询
对T T L字段我们将在本节的后面介绍。
13.3.3 实现细节
为改善该协议的效率,有许多实现的细节要考虑。首先,当一个主机首次发送I G M P报告
第13章IGMP:Internet组管理协议使用137 下载
IGMP报告,TTL=1,
IGMP组地址=组地址
目的IP地址=组地址
源IP地址=主机的IP地址
IGMP查询,TTL=1,
IGMP组地址=0
目的IP地址=224.0.0.1
源IP地址=路由器IP地址
主机
多播路
由器
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是I P交付服务)。
下一个报告将在间隔一段时间后发送。这个时间间隔由主机在0 ~ 1 0秒的范围内随机选择。
其次,当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时
间间隔后才发出一些响应(采用“响应”的复数形式是因为该主机必须对它参加的每个组均
发送一个响应)。既然参加同一多播组的多个主机均能发送一个报告,可将它们的发送间隔设
置为随机时延。在一个物理网络中的所有主机将收到同组其他主机发送的所有报告,因为如
图1 3 - 3所示的报告中的目的地址是那个组地址。这意味着如果一个主机在等待发送报告的过
程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了。因为多播路
由器并不关心有多少主机属于该组,而只关心该组是否还至少拥有一个主机。的确,一个多
播路由器甚至不关心哪个主机属于一个多播组。它仅仅想知道在给定的接口上的多播组中是
否还至少有一个主机。
在没有任何多播路由器的单个物理网络中,仅有的I G M P通信量就是在主机加入一个新的
多播组时,支持I P多播的主机所发出的报告。
13.3.4 生存时间字段
在图1 3 - 3中,我们注意到I G M P报告和查询的生存时间( T T L )均设置为1,这涉及到I P首部
中的T T L字段。一个初始T T L为0的多播数据报将被限制在同一主机。在默认情况下,待传多
播数据报的T T L被设置为1,这将使多播数据报仅局限在同一子网内传送。更大的T T L值能被
多播路由器转发。
回顾6 . 2节,对发往一个多播地址的数据报从不会产生I C M P差错。当T T L值为0时,多播
路由器也不产生I C M P“超时”差错。
在正常情况下,用户进程不关心传出数据报的T T L。然而,一个例外是Tr a c e r o u t e
程序(第8章),它主要依据设置T T L值来完成。既然多播应用必须能够设置要传送数
据报的TTL值,这意味着程序设计接口必须为用户进程提供这种能力。
通过增加T T L值的方法,一个应用程序可实现对一个特定服务器的扩展环搜索( e x p a n d i n g
ring search)。第一个多播数据报以T T L等于1发送。如果没有响应,就尝试将T T L设置为2,然
后3,等等。在这种方式下,该应用能找到以跳数来度量的最近的服务器。
从2 2 4 . 0 . 0 . 0到2 2 4 . 0 . 0 . 2 5 5的特殊地址空间是打算用于多播范围不超过1跳的应用。不管
T T L值是多少,多播路由器均不转发目的地址为这些地址中的任何一个地址的数据报。
13.3.5 所有主机组
在图1 3 - 3中,我们看到了路由器的I G M P查询被送到目的I P地址2 2 4 . 0 . 0 . 1。该地址被称为
所有主机组地址。它涉及在一个物理网络中的所有具备多播能力的主机和路由器。当接口初
始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送
I G M P报告。
13.4 一个例子
现在我们已经了解了一些I P多播的细节,再来看看所包含的信息。我们使s u n主机能够支
138使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
第13章IGMP:Internet组管理协议使用139 下载
持多播,并将采用一些多播软件所提供的测试程序来观察具体的过程。
首先,采用一个经过修改的n e t s t a t命令来报告每个接口上的多播组成员情况(在3 . 9节
显示了n e t s t a t - n i命令的输出结果)。在下面的输出中,用黑体表示有关的多播组。
其中, - n参数将以数字形式显示I P地址(而不是按名字来显示它们),- i参数将显示接
口的统计结果,- a参数将显示所有配置的接口。
输出结果中的第2行l e 0(以太网)显示了这个接口属于主机组2 2 4 . 0 . 0 . 1(“所有主机”),
和两行地址,后一行显示相应的以太网地址为: 0 1 : 0 0 : 5 e : 0 0 : 0 0 : 0 1。这正是我们期望看到的以
太网地址,和1 2 . 4节介绍的地址映射一致。我们还看到其他两个支持多播的接口: S L I P接口
s l 0和回送接口l o 0,它们也属于所有主机组。
我们也必须显示I P路由表,用于多播的路由表同正常的路由表一样。黑体表项显示了所
有传往2 2 4 . 0 . 0 . 0的数据报均被送往以太网:
如果将这个路由表与9 . 2节中s u n路由器的路由表作比较,会发现只是多了有关多播的条
目。
现在使用一个测试程序来让我们能在一个接口上加入一个多播组(不再显示使用这个测
试程序的过程)。在以太网接口( 1 4 0 . 2 5 2 . 1 3 . 3 3)上加入多播组2 2 4 . 1 . 2 . 3。执行n e t s t a t程序
看到内核已加入这个组,并得到期望的以太网地址。用黑体字来突出显示和前面n e t s t a t输
出的不同。
我们在输出中再次显示了其他两个接口: s l 0和l o 0,目的是为了重申加入多播组只发生
在一个接口上。
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
140使用TCP/IP详解,卷1:协议
图1 3 - 4显示了t c p d u m p对进程加入这个多播组的跟踪过程。
图13-4 当一个主机加入1个多播组时t c p d u m p 的输出结果
当主机加入多播组时产生第1行的输出显示。第2行是经过时延后的I G M P报告,我们介绍
过报告重发的时延是1 0秒内的随机时延。
在两行中显示硬件地址证实了以太网目的地址就是正确的多播地址。我们也看到了源I P
地址为相应的s u n主机地址,而目的I P地址是多播组地址。同时,报告的地址和期望的多播
组地址是一致的。
最后,我们注意到,正像指明的那样, T T L是1。当T T L的值为0或1时,t c p d u m p在打印
时用方括号将它们括起来,这是因为T T L在正常情况下均高于这些值。然而,使用多播我们
期望看到许多T T L为1的I P数据报。
在这个输出中暗示了一个多播路由器必须接收在它所有接口上的所有多播数据报。路由
器无法确定主机可能加入哪个多播组。
多播路由器的例子
继续前面的例子,但我们将在s u n主机中启动一个多播选路的守护程序。这里我们感兴
趣的并不是多播选路协议,而是要研究所交换的I G M P查询和报告。即使多播选路守护程序只
运行在支持多播的主机( s u n)上,所有的查询和报告都将在那个以太网上进行多播,所以
我们在该以太网中的其他系统中也能观察到它们。
在启动选路守护程序之前,加入另外一个多播组2 2 4 . 9 . 9 . 9,图1 3 - 5显示了输出的结果。
图13-5 当多播选路守护程序运行时t c p d u m p 的输出结果
在这个输出中没有包括以太网地址,因为已经证实了它们是正确的。也删去了T T L等于1
的说明,同样因为它们也是我们期望的那样。
当选路守护程序启动时,输出第1行。它发出一个已经加入了组2 2 4 . 0 . 0 . 4的报告。多播地
址2 2 4 . 0 . 0 . 4是一个知名的地址,它被当前用于多播选路的距离向量多播选路协议D V M R P
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
(Distance Vector Multicast Routing Protocol)所使用(D V M R P在RFC 1075中定义[ Wa i t z m a n ,
Partridge, and Deering])。
在该守护程序启动时,它也发送一个I G M P查询(第2行)。该查询的目的I P地址为
2 2 4 . 0 . 0 . 1(所有主机组),如图1 3 - 3所示。
第一个报告(第3行)大约在5秒后收到,报告给组2 2 4 . 9 . 9 . 9。这是在下一个查询发出之
前(第4行)收到的唯一报告。当守护程序启动后,两次查询(第2行和第4行)发出的间隔很
短,这是因为守护程序要将其多播路由表尽快建立起来。
第5、6和7行正是我们期望看到的: s u n主机针对它所属的每个组发出一个报告。注意组
2 2 4 . 0 . 0 . 4是被报告的,而其他两个组则是明确加入的,因为只要选路守护程序还在运行,它
始终要属于组2 2 4 . 0 . 0 . 4。
下一个查询位于第8行,大约在前一个查询的2分钟后发出。它再次引发三个我们所期望
的报告(第9、1 0和11行)。这些报告的时间顺序与前面不同,因为接收查询和发送报告的时
间是随机的。
最后的查询在前一个查询的大约2分钟后发出,我们再次得到了期望的响应。
13.5 小结
多播是一种将报文发往多个接收者的通信方式。在许多应用中,它比广播更好,因为多
播降低了不参与通信的主机的负担。简单的主机成员报告协议( I G M P )是多播的基本模块。
在一个局域网中或跨越邻近局域网的多播需要使用本章介绍的技术。广播通常局限在单
个局域网中,对目前许多使用广播的应用来说,可采用多播来替代广播。
然而,多播还未解决的一个问题是在广域网内的多播。[Deering and Cheriton 1990] 提出
扩展目前的路由协议来支持多播。9 . 1 3节中的[Perlman 1992]讨论了广域网多播的一些问题。
[Casner and Deering 1992] 介绍了使用多播和一个称为M B O N E(多播主干)的虚拟网络
在整个I n t e r n e t上传送I E T F会议的情况。
习题
13.1 我们知道主机通过设置随机时延来调度I G M P的发送。一个局域网中的主机采取什么措
施才能避免两台主机产生相同的随机时延?
13.2 在[Casner and Deering 1992]中,他们提到U D P缺少两个通过M B O N E传送音频采样数据
的条件:分组失序检测和分组重复检测。你怎样在U D P上增加这些功能?
第13章IGMP:Internet组管理协议使用141 下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: