文章目录
- 21.1 地址映射
-
- 21.1.1 从逻辑地址到物理地址的映射:ARP
-
- 1. (ARP)高速缓存器
- 2. ARP分组格式
- 3. ARP封装成帧
- 4. 操作过程
- 5. 代理ARP
- 21.1.2 物理地址映射到逻辑地址:RARP、BOOTP、DHCP
-
- 1. RARP
- 2. BOOTP
- 3. DHCP
- 21.2 ICMP
-
- 21.2.1 报文类型
- 21.2.2 报文格式
- 21.2.3 差错报告
-
- 1. 目的端无法达到
- 2. 源端抑制
- 3. 时间超时
- 4. 参数问题
- 5. 重定向
- 21.2.4 查询
-
- 1. 回复请求和答案
- 2. 请求和回答时间戳
- 3. 请求和回答地址掩码
- 4. 询问和通知路由器
- 5. 校验和
- 21.2.5 调试工具
-
- 1. `Packet InterNet Groper, Ping` 程序
- 2. `Traceroute` 程序
- 21.3 IGMP
-
- 21.3.1 组管理
- 21.3.2 IGMP报文
- 21.3.3 报文格式
- 21.3.4 IGMP操作
-
- 1. 加入一组
- 2. 离开一组
- 3. 监控成员关系
- 4. 查询响应
- 5. 查询路由器
- 21.3.5 封装
-
- 1. 包装在网络层
- 2. 包装在数据链路层
- 21.3.6 `Netstat` 应用程序
- 21.4 ICMPv6
-
- 21.4.1 差错报告
-
- 1. 目的端无法达到
- 2. 分组太大
- 3. 时间超时
- 4. 参数问题
- 5. 重定向
- 21.4.2 查询
-
- 1. 回复请求和答案
- 2. 询问和通知路由器
- 3. 询问和通知邻站
- 4. 组成员关系
对于下图中的网络: 从协议栈的层次来看数据的流动: 从虚拟的IP只能在层上看到IP数据报的流动,路由器只根据路由选择: 在物理网络的具体链路层中,只能看到MAC帧的流动是看不见的IP数据报:
第20章讨论了网络层的主要协议-网络协议 IP
,它被设计为尽可能传递协议,没有流控和错误控制等特点,。IP抽象的互联网屏蔽了下层复杂的细节。如果我们在抽象的网络层上讨论问题,我们可以使用统一和抽象的IP研究主机与主机或主机与路由器之间的通信。
但是,为了使IP协议需要其他协议的帮助,以满足当今网际互联网的更多需求。
- 需要创建一些协议——,这些分组需要封装成帧,。为此设计的协议称为
Address Resolution Protocol, ARP
,它完成了从逻辑地址到物理地址的映射。有时我们需要反映射,即从物理地址到逻辑地址。例如,引导无盘网络或租用主机IP设计了三个协议:RARP、BOOTP、DHCP。 - 由于缺乏流控和错误控制,网络协议产生了另一种协议:ICMP,。
- IP最初是为单播传输设计的,即一个源端和一个目的端。因为因特网对多播传输的巨大需求,即一个源端和多个目的端。。
这里将在某些方面进行详细的讨论ARP、RARP、BOOTP、DHCP和IGMP等协议,也讨论ICMPv6,当IPv它也会在运行时运行。。
ARP和RARP在以下请求评论中可以找到讨论: 826, 903, 925, 1027, 1293, 1329, 1433, 1868, 1931, 2390 BOOTP和DHCP在以下请求评论中可以找到讨论: 951, 1048, 1084, 1395, 1497, 1531, 1532, 1533, 1534, 1541, 1542, 2131, 2132
ICMP的讨论可在下列请求评论中找到:
777, 792, 1016, 1018 , 1256, 1788, 2521
IGMP的讨论可在下列请求评论中找到:
966, 988, 1054, 1112, 1301, 1458, 1469, 1768, 2236, 2357, 2365, 2502, 2588
21.1 地址映射
互联网是由一些物理网络和网际互联设备(如路由器)所组成。从源主机发送的分组在到达目的主机之前,可能要经过许多不同的物理网络。在网络级上,主机和路由器用它们的逻辑(IP)地址进行标识。但是分组都要通过物理网络到达这些主机和路由器。在物理级上,主机和路由器用它们的物理地址标识。 physical address
就是本地地址,它的管辖范围是本地网络。物理地址在本地范围内是唯一的,但在全局上并不必如此,之所以称为,是由于。物理地址的例子是以太网协议中48位的MAC地址,它被写入在主机或路由器的网卡 NIC
上。
物理地址和逻辑地址是两种不同的标识符。这两个我们都需要,因为一个物理网络,如以太网可以在同一时间在网络层使用两个不同的协议,如IP和IPX(Novell);同样的,在网络层的分组,使用IP,也可以通过不同的物理网络,如以太网和LocalTalk(Apple)传输。
这就是说,将分组传递到一台主机或路由器,需要两级地址:逻辑地址和物理地址。既需要能将一个逻辑地址映射成为它相应的物理地址,反过来的映射也是需要的,这可使用静态和动态映射。
-
static mapping
是创建一个表,它将一个逻辑地址与物理地址联系起来,这个表存储在网络上的每个机器上。例如,每个机器知道其他机器的IP地址,但却不知道其物理地址,可通过查表得知物理地址。这样做有某些局限性,因为物理地址可能因以下原因而发生变化。 (1)一个机器可能会更换网卡,结果得到了一个新的物理地址; (2)在某些局域网中,如LocalTalk,每当计算机加电时,其物理地址都要改变一次。 (3)移动的计算机,可以从一个物理网络转移到另一个物理网络,这就引起物理地址的改变。要完成这些变化,静态映射必须周期性地改变,这给网络增加了非常大的开销。 -
dynamic mapping
中,每当一个机器知道两个地址(逻辑地址和物理地址)中的一个时,就可使用协议将另一个求出。
21.1.1 逻辑地址到物理地址的映射:ARP
任何时候,当主机或路由器有数据报要发送到另一个主机或路由器时,它必须有接收方的逻辑(IP)地址。(见25章);(见22章)。但是,,即发送方必须有接收方的物理地址——不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
主机或路由器发送一个ARP查询分组,该分组包括发送方的物理地址和IP地址、以及接收方的IP地址,(图21.1)。网络上的每个主机或路由器,都接收和处理这个ARP查询分组,但只有预期的接收者才能识别它的IP地址,并发回ARP响应分组, 图21.1a中,左边系统 A A A 有一个分组,要传递给IP地址为 141.23.56.23
的另一个系统 B B B 。系统 A A A 需要将分组传送给它的数据链路层,进行实际的传递,但它不知道接收方的物理地址。它使用ARP服务,请求ARP协议发送一个广播ARP请求分组,以查询IP地址为 141.23.56.23
的系统的物理地址。
在该物理网络上的每个系统,都接收到此分组,但只有系统 B B B 才回答,如图21.1b所示,系统 B B B 发送一个包含它的物理地址的ARP回答分组。现在,系统 A A A 可使用接收到的物理地址,来发送到该目的地的所有分组。 应注意的问题是,ARP解决的是的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过ARP,找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的,只要主机或路由器要和本网络上的、另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址,解析为链路层所需要的硬件地址。
?原因是,由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信,就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。现在,,而调用ARP来寻找某个路由器或主机的硬件地址,都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
1. (ARP)高速缓存器
如果系统 A A A 对发送到系统 B B B 的每个分组,都需要广播一个ARP请求,那么对ARP协议的使用就是低效率的。它可能有对自己IP分组的广播。为了解决这一问题,ARP协议可使用高速缓存器,因为一个系统通常发送多个分组到同一目的地(局部性原理)。
每一个主机都设有一个 ARP cache
,里面存储有其所在的局域网上的、各主机和路由器的、IP 地址到硬件地址的映射表。接收到ARP回答的系统,将它的映射存储在高速缓存器中,保持20分钟到30分钟(除非高速缓存已满)。。
例如,当主机 A A A 欲向本局域网上的某个主机 B B B 发送IP数据报时,就先在其ARP高速缓存中查看,有无主机 B B B 的IP地址。如有,就可查出其对应的硬件地址。再将此硬件地址写入MAC帧,然后通过局域网,将该MAC帧发往此硬件地址。
2. ARP分组格式
图21.2表示了ARP的分组格式: ARP分组具有下列字段:
- 。16位字段,用来定义。每个局域网基于其类型被指定一个整数。例如,以太网是类型 1 1 1 。ARP可使用在任何物理网络上。
- 。16位字段,用来定义。例如,对于IPv4协议,这个字段是 080 0 16 0800_{16} 080016 。ARP可用于任何高层协议。
- 。8位字段,用来定义。例如,对于以太网,这个值是 6 6 6 。
- 。8位字段,用来定义。例如,对于IPv4协议,这个值是 4 4 4 。
- 。16位字段,用来定义。已定义了两种类型:ARP请求 1 1 1 和ARP回答 2 2 2 。
- 。可变长字段,用来定义。例如,以太网这个字段是 6 6 6 字节。
- 。可变长字段,用来定义。例如,对于IPv4协议,这个字段是 4 4 4 字节。
- 。可变长字段,用来定义。例如,对以太网这个字段是 6 6 6 字节。对ARP请求报文,这个字段为全 0 0 0 ,因为发送方不知道目标的物理地址。
- 。可变长字段,用来定义。例如,对于IPv4协议,这个字段是 4 4 4 字节。
3. ARP封装成帧
。例如图21.3中,ARP分组封装在以太网的帧中。注意,类型字段指明了此帧所携带的数据是ARP分组。
4. 操作过程
讨论在一个典型的互联网上,ARP是如何工作的。首先,描述所包含的一些步骤,然后讨论主机或路由器所需要使用ARP的四种情况。在ARP过程中,需要进行如下几个步骤:
- 发送方知道目标的IP地址。我们将简要考察发送方如何得到这个地址;
- IP请求ARP协议产生一个ARP请求报文,填入发送方的物理地址、发送方的IP地址、目标的IP地址。目标的物理地址字段则填入 0 0 0 ;
- 将这个报文发送给数据链路层,在这个层它被封装成帧,;
- 每个主机和路由器都接收到这个帧。因为这个帧包含了广播目的地址,所以所有站点都将此报文送交给ARP。除了目标机器外,所有的机器都丢弃该分组。目标机器识别这个IP地址;
- 目标机器用ARP回答报文进行应答,此回答报文包含它的物理地址。报文使用单播;
- 发送方接收到这个回答报文,它现在知道了目标机器的物理地址;
- 携带发送给目标机器数据的IP数据报,现在封装成帧,用单播发送给目的端。
下列是可使用ARP服务的四种不同的情况(图21.4):
- 发送方是一个主机,它希望将分组发送给同一个网络上的另一个主机。在这种情况下,
必须将物理地址映射为逻辑地址,并将该逻辑地址作为数据报头部的目的IP地址它将要发送的数据报头部的目的IP地址,就是必须映射为物理地址的那个逻辑地址; - 发送方是一个主机,它希望将分组发送给另一个网络上的另一个主机。在这种情况下,该主机查找它的路由表,找出到达这个目的地的下一跳(即路由器)的IP地址。如果该主机没有路由表,它就要查找默认路由表的IP地址。这个下一跳路由器的IP地址,就是必须映射为一个物理地址的那个逻辑地址;
- 发送方是一个路由器,它已经接收到了一个数据报,要将该数据报发送给另一个网络上的一个主机。它先检查它的路由表,找出下一跳(即路由器)的IP地址。这个下一跳路由器的IP地址,就是必须映射为物理地址的那个逻辑地址。
- 发送方是一个路由器,它已经收到了一个数据报,要将该数据报发送给同一网络上的一个主机。数据报的目的IP地址,就是必须映射为物理地址的那个逻辑地址。
【例21.1】一个主机的IP地址为 130.23.43.20 130.23.43.20 130.23.43.20 ,物理地址为 B 2 : 34 : 55 : 10 : 22 : 10 B2:34:55:10:22:10 B2:34:55:10:22:10 ,它有一个分组想要发送给另一个主机 , 其IP地址为 130.23.43.25 130 . 23 . 43 . 25 130.23.43.25 , 物理地址为 A 4 : 6 E : F 4 : 59 : 83 : A B A4:6E:F4:59:83:AB A4:6E:F4:59:83:AB(第一个主机并不知道该物理地址) 。两个主机在同一个网络上。试说明ARP请求与回答分组如何封装在以太网帧中。 答:图21.5显示了ARP请求与回答分组。注意:此时ARP数据字段是28个字节,而单个地址不适合用4字节表示界限,这就是我们为什么不以4字节界限表示这些地址。
5. 代理ARP
有一种称为的技术,可用来产生子网化的效果。 proxy ARP
是可以代表一组主机的ARP。每当运行代理ARP的路由器,接收到一个寻找这些主机中的一个主机的IP地址的ARP请求时,路由器就发送一个ARP回答,宣布。当这个路由器收到真正的IP分组后,它就将这个分组发送给相应的主机或路由器。
图21.6中给出一个实例。安装在右边的主机只回答目标IP地址为 141.23.56.23 141.23.56.23 141.23.56.23 的ARP请求。但是,管理员可能需要创建一个子网、而不改变整个系统来识别出子网的地址。一个解决问题的方法是,,在这种情况下,这个路由器代表所有安装在子网上的主机。当路由器接收到一个ARP请求时,如果其目标IP地址与「它所代表的主机之一的地址」相匹配( 141.23.56.21 , 141.23.56.22 , 141.23.56.23 141.23.56.21, 141.23.56.22, 141.23.56.23 141.23.56.21,141.23.56.22,141.23.56.23),则它发送一个ARP回答,并宣布其硬件地址作为目标硬件地址;当该路由器收到IP分组,它就将该分组发送给相应的主机或路由器。
21.1.2 物理地址映射到逻辑地址:RARP、BOOTP、DHCP
有两种可能的场合,当一个主机知道它的物理地址,但不知道其逻辑地址:
- 无盘站点正在被引导,站点可以通过检查其接口,得到它的物理地址,但不知道它的逻辑地址;
- 一个组织机构没有足够的IP地址分配给每个站点,只能按需分配。站点可发送它的物理地址,并请求延续一个短暂的时间。
1. RARP
Reverse Address Resolution Protocol, RARP
是为仅知道物理地址的机器,寻找它的逻辑地址而设计的。每个主机或路由器都被指定一个或多个逻辑(IP)地址,这些地址是唯一的,并与机器的物理(硬件)地址无关。
要创建一个IP数据报,主机或路由器就要知道它自己的IP地址,一个机器的IP地址,通常可从存储在磁盘文件中的配置文件中读出。但是,一个无盘机器通常是从ROM引导的,ROM只有少量的引导信息。ROM是由厂商安装的,它不包括IP地址,因为在网络上的IP地址是由管理员分配的。
机器可以得到其物理地址(例如,读它的NIC),这在本地是唯一的。然后就可以使用RARP协议,从物理地址获取逻辑地址。先是创建一个RARP请求,并在上广播。在本地网络上,知道所有IP地址的另一个机器就用RARP回答来响应。。
RARP协议有一个严重的问题:在数据链路层进行广播,其广播地址在以太网中是全 1 1 1 ,而且不能通过网络边界。即,。正是这个原因,使得RARP几乎不再使用,而被BOOTP和DHCP两个协议取代。
2. BOOTP
Bootrap Protocol, BOOTP
是一种,使用BOOTP协议时,一般包括自举协议服务端 Bootstrap Protocol Server
和自举协议客户端 Bootstrap Protocol Client
两部分。设计这个协议是为了提供,它可以让无盘站点从一个中心服务器上获得IP地址,为局域网中的无盘工作站分配动态IP地址,并不需要每个用户去设置静态IP地址。
要注意的是,,网络管理员可以将客户机和服务器放置在同一网络或不同网络上,如图21.7所示。,而UDP分组本身被封装在IP分组中。
当客户机既不知道它自己的IP地址(源地址),也不知道服务器的IP地址(目的地址)时,它是如何发送IP数据报的?。客户机获取IP地址的过程如下:
- 首先,由BOOTP启动代码启动客户端,这个时候客户端还没有IP地址;
- 客户端使用广播形式,以IP地址 255.255.255.255 255.255.255.255 255.255.255.255 向网络中发出IP地址查询要求;
- 接着,运行BOOTP协议的服务器接收到这个请求,会根据请求中提供的MAC地址找到客户端,并发送一个含有IP地址、服务器IP地址、网关等信息的FOUND帧;
- 最后,客户端会根据该FOUND帧,通过专用TFTP服务器下载启动镜像文件,模拟成磁盘启动。
BOOTP优于RARP的一点是:客户机与服务器都是应用层的进程,当在其他应用层进程中时,客户机可以在一个网络上,而服务器在相隔多个其他网络的另一个网络上。但是,必须要解决一个问题,因为客户机不知道服务器的IP地址,所以,而。
解决这个问题必须要有一个中间媒介,可以用一个主机(或者配置为在应用层操作的一个路由器)作为中继。在这种情况下,该主机称为 relay agent
,中继代理知道BOOTP服务器的单播地址。当它接收到这种类型的分组时,它在单播的数据报中封装报文,并向BOOTP服务器发送请求。。BOOTP服务器知道来自中继代理的报文,因为在请求报文中有一个字段定义了中继代理的IP地址。在接收到回答之后,中继代理向BOOT客户机转发它。
BOOTP不是一个 dynamic configuration protocol
。当客户机请求其IP地址时,BOOTP服务器查找一个表,寻找与客户机物理地址相匹配的IP地址。这意味着,客户机的物理地址与IP地址的绑定必须已经存在,绑定是预先确定的。
但是,如果一个主机从一个物理网络移动到另一个物理网络时,情况又如何?如果主机想要一个临时的IP地址又如何?BOOTP不能处理这些问题,因为表中的物理地址和IP地址的绑定,在网络管理员改动之前,是静态的、固定的,BOOTP是一个。
3. DHCP
Dynamic Host Configuration Protocol, DHCP
已设计出来,提供静态的和动态的地址配置,可以是人工的或自动的。DHCP是一个局域网的网络协议,和BOOTP一样使用UDP协议工作,主要有两个用途:给自动分配IP地址;给作为对所有计算机作中央管理的手段,在中有详细的描述。
- :这种DHCP的性能与BOOTP相同,它与BOOTP向后兼容,即一个运行BOOTP客户机的主机,可以向一个DHCP服务器请求一个静态地址。。
- :DHCP有第二个数据库,它拥有一个可用的IP池,这一个数据库使DHCP成为动态的。当DHCP客户机请求一个临时的IP地址时,DHCP服务器就查找可用的(即尚未使用的)IP地址池,然后指定一个在有效的IP地址。 当DHCP客户机向DHCP服务器发送请求时,,如果其中存在所请求的物理地址的项目,则返回。反之,如果静态数据库中没有该项目,服务器就从可用的IP地址池中,,然后将该主机加到动态数据库中。即 。 当主机从一个网络移到另一个网络,或连接到一个网络后又断开连接时(如同一个用户和服务提供者的关系),DHCP是需要动态的,。 从可用IP地址池指定的地址是临时地址,DHCP服务器发出
lease
是对特定期间而言的。。服务器对这个更新选择同意或不同意。如果服务器不同意,客户机就停止使用该地址。 - 人工的和自动的配置。BOOTP协议的一个主要问题是「人工配置IP地址到物理地址的映射表」。即,每当物理或IP地址有变化时,网络管理员必须人工地修改。而DHCP协议则既允许人工配置,也允许自动配置,即静态地址可人工创建也可自动创建。
DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为 DHCP Server
和 DHCP Client
的服务端口;546号端口用于 DHCPv6 Client
,而不用于 DHCPv4
,是为DHCP failover
服务,这是需要特别开启的服务,是用来做“双机热备”的。
21.2 ICMP
如20章所述,IP协议是一个,它将一个数据报从它原始的源端传递到最终的目的端。IP提供了,这样的设计是为了有效地利用资源。但是它有两个缺点:缺少差错控制和辅助机制。
- ,如果出现某些差错将会发生什么?如果路由器找不到一个可以到达最终目的端的路由器,或者因生存时间字段为 0 0 0 、而必须丢弃一个数据报时,将会发生什么?如果最终目的主机在预先设定的时间内,不能收到所有的数据报分段,因此将一个数据报的全部分段都丢弃时,又会发生什么?这些情况中都出现了差错,而IP协议没有内在的机制,可以通知发送该数据报的主机。
- 。主机有时需要确定一个路由器或另一个主机是否是活跃的,网络管理员有时需要从另一个主机或路由器得到信息。
为了提高IP数据报成功交付的机会、弥补上述两个缺陷,网际层的 Internet Control Message Protocol, ICMP
被设计出来,它是TCP/IP协议族的一个子协议,配合IP协议进行使用,用于。ICMP允许主机或路由器报告差错情况和有关异常情况,其功能主要有:
- 侦测远端主机是否存在
- 建立及维护路由资料
- 重导资料传送路径(ICMP重定向)
- 资料流量控制
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP不是高层协议,而是IP层的协议。。
21.2.1 报文类型
ICMP报文分为两大类: error-reporting message
和 query message
:
- 差错报告报文负责向路由器或主机报告,在处理一个IP数据报时可能碰到的一些问题。
- ,帮助主机或网络管理员从一个路由器或另一个主机得到特定的信息。例如,节点能够发现它们的邻站。此外,主机能够发现和知道「在它们的网络上的一些路由器的情况」,而一些路由器能帮助一个节点改变报文的路由。
21.2.2 报文格式
ICMP报文有一个 和一个。虽然每一种报文类型的头部的格式都是不同的,但是,即类型、代码和检验和——第一个字段( 1 1 1 字节)是ICMP的类型,它定义。代码字段( 1 1 1 字节)指定了,最后一个共同的字段( 2 2 2 字节)是校验和字段,。如图21.8所示。
在差错报文的数据部分所携带的信息,可找出引起差错的原始分组。在查询报文的数据部分,则携带了基于查询类型的额外信息。
21.2.3 差错报告
ICMP的主要责任之一就是差错报告。虽然现代技术已经制造出很可靠的传输介质,但差错还是存在的,因此必须进行处理。如在第20章中讨论的,IP是不可靠、无连接、尽力传递的协议,即IP不考虑差错校验、报告和差错控制,ICMP就是为弥补这一缺点而诞生的。然而,ICMP不能纠正差错,它只是报告差错,。
,因为在数据报中关于路由唯一可用的信息,就是源IP地址和目的IP地址。ICMP使用源IP地址,将差错报文发送给数据报的源端(发送方)。
ICMP差错报告报文共有 5 5 5 种:目的端不可达、源端抑制、时间超过、参数问题、改变路由(重定向)。 关于ICMP差错报文有下列要点:
- 对于携带ICMP差错报文的数据报,不再产生ICMP差错报文;
- 对于分段的数据报文,如果不是第一个分段则不产生ICMP差错报文;
- 对于多播地址的数据报文,不产生差错报文;
- 具有特殊地址,如 127.0.0.0 127.0.0.0 127.0.0.0 或 0.0.0.0 0.0.0.0 0.0.0.0 ,不产生ICMP差错报文。
注意,所有差错报文都包括一个,这个数据部分包括+——加上原始数据报中的头部,可以给出原始的源端地址,它接收差错报文,这就是关于数据报本身的信息;加上 8 8 8 个字节,是因为这 8 8 8 个字节提供了关于端口号(UDP和TCP)和序列号(TCP)的信息,这些将在23章中学到,有了这些信息,源端就可以将差错情况通知给协议(TCP或UDP)。ICMP形成差错分组,然后再封装成IP数据报(见图21.10)。
1. 目的端不可达
当路由器不能够给数据报找到路由,或主机不能传递数据报时,就丢弃这个数据报。然后,这个路由器或主机就发回 destination-unreachable message
给发出该数据报的源主机。注意,目的端不可达报文或者由路由器,或者由目的主机创建。
2. 源端抑制
IP协议是一个无连接协议。在产生数据报的源端,转发数据报的路由器以及处理数据报的目的主机之间,并没有通信关系。这种由于缺乏通信,引起的一个问题就是。IP在协议中没有嵌入流量控制机制。在运行IP时,缺乏流量控制会产生的一个主要问题。源主机从来不知道某些路由器或目的主机,是否已经被过多的数据报造成超载;源主机从来不知道它产生的数据报是否太快,以至于路由器来不及转发或目的主机来不及处理。
缺乏流量控制,可能会在路由器或目的主机中产生拥塞。路由器或主机中的队列长度(缓存)是有限的,这种队列是为到来的数据报等待转发(对于路由器)或等待处理(对于主机)而设置的。,这时路由器或主机别无选择,只能将某些数据报丢弃。
ICMP的 source-quench message
就是而设计的。当路由器或主机因拥塞而丢弃数据报时,它就向数据报的发送方发送源端抑制报文,这一报文有两个目的——第一,;第二,。
3. 时间超时
time-exceeded message
是在两种情况下产生的:
- 其一,如22章中看到的,路由器使用路由表,以找出必须接收此分组的下一跳(下一个路由器),如果一个或多个路由表中出现差错,那么一个分组就可能在一个回路或循环中,从一个路由器到下一个路由器,或无休止地通过一系列的路由器。20章中看到的,每个数据报都有生存时间的字段控制这种情况,当数据报通过路由器时,这个字段的值减一。收到数据报的路由器在发现这个字段的值为 0 0 0 时,就丢弃这个数据报。但是,当丢弃这样数据报时,就要由路由器向源端发送一个时间超时报文。
- 其二,当组成一个报文的所有分段,未能在某一时限内到达主机时,也要产生时间超时报文。
4. 参数问题
当数据报在因特网上传输时,在其头部中出现的任何二义性,都可能产生严重的问题。如果路由器或目的主机发现了这种二义性问题,或在数据报的某个字段中缺少某个值,它就丢弃这个数据报,并向源端发送 parameter-problem message
。
5. 重定向
当路由器要将分组转发到另一个网络时,它必须知道下一个适当的路由器的IP地址。如果发送方是主机,情况也是这样的。路由器和主机都必须有一个路由表,以便找出下一个路由器的地址。而在22章中将看到,路由器还要参与(动态的)路由选择更新过程,并且其更新被认为是瞬时完成的。
但是,为了提高效率,,因为在因特网上的主机数量比路由器要多出很多,动态地更新主机的路由表会产生不可接受的通信量。
主机通常使用静态路由选择——当主机开始联网工作时,其路由表中项目的个数是很有限的,它通常只知道默认路由器这一个路由器的IP地址。因此,当主机向另一个网络发送数据报时,就将此数据报发给了这个错误的路由器。在这种情况下,收到此数据报的路由器,会将该数据报转发给正确的路由器。但是,,重定向的概念如图21.11所示。主机 A A A 想要向主机 B B B 发送数据报。路由器R2显然是最有效的路由选择,但是主机 A A A 没有选择路由器R2,数据报发送到路由器R1而不是R2。R1在查找路由表后,发现分组应当走R2,它把分组发送到R2,并同时向主机发送重定向报文,这时主机 A A A 的路由表就被更新了:
21.2.4 查询
除了差错报告外,ICMP还能对某些网络问题进行诊断,这是通过使用由组成的查询报文来完成的——回送请求和回答报文、时间戳请求和回答报文、掩码地址请求和回答报文、路由器询问和通告报文。如图21.12所示,