计算机网络(第8版,谢希仁)第四章习题解答

以下的习题解答均来自于图1,这里仅仅是为了加强对相关内容的理解,没有其它目的。
 
图1.

4-01 网络层向上提供的服务有哪两种?试比较其优缺点。

网络层向上面的运输层提供的服务有两种,即面向连接服务(或虚电路服务)和无连接服务(或数据报服务)。这两种服务的主要区别见下表:

对比的方面 虚电路服务 数据报服务
思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
连接的建立 必须 不需要
终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
节点出故障时 所有通过出故障的节点的虑电路均不能工作 出故障的节点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达终点 到达终点时不一定按发送顺序
端到端的差错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责

4-02 网络互连有何实际意义?进行网络互连时,有哪些共同的问题需要解决?

我们知道,不可能让所有的用户都使用相同的网络。虽然这样做可使网络互连变得比较简单,但实际上是不可行的。这是因为用户的需求是多种多样的,没有一种单一的网络能够满足所有用户的需求。另外,网络技术是不断发展的,网络的制造厂家也要经常推出新的网络,在竞争中求生存。因此,在市场上总有很多种不同性能、不同网络协议的网络,供不同的用户选用。因此我们面临的现实就是:在客观上,世界上有很多特性各异的网络,但这些网络又希望能够相互通信,于是网络互连的意义非常重大。网络互连会遇到许多问题需要解决,如:

  • 不同的寻址方案;
  • 不同的最大分组长度;
  • 不同的网络接入机制;
  • 不同的超时控制;
  • 不同的差错恢复方法;
  • 不同的状态报告方法;
  • 不同的路由选择技术;
  • 不同的用户接入控制;
  • 不同的服务(面向连接服务和无连接服务);
  • 不同的管理与控制方式;等等。

4-03 作为中间设备,转发器、网桥、路由器和网关有何区别?

将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,有以下四种不同的中间设备:

(1) 物理层使用的中间设备叫作转发器。

(2) 数据链路层使用的中间设备叫作网桥或交换机。

(3) 网络层使用的中间设备叫作路由器。

(4) 在网络层以上使用的中间设备叫作网关。用网关连接两个不兼容的系统需要在高层进行协议的转换。但应注意,在许多旧的文献中,不少路由器也被称为网关。现在,大家一般都用"路由器"代替"网关"这一名词。

4-04 试简单说明下列协议的作用:IPIPIP, ARPARPARP和ICMPICMPICMP。

网际协议 IP :使用协议 IP 可以把互连以后的计算机网络看成是一个虚拟互连网络。所谓虚拟互连网络,就是逻辑互连网络,称为互联网。我们知道,各种物理网络的异构性本来是客观存在的,但是我们利用协议 IP 就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用协议 IP 的虚拟互连网络可简称为 IP 网。使用 IP 网的好处是:当IP 网上的主机进行通信时,就好像在单个网络上通信一样,它们看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议,等等)。地址解析协议 ARP: 用来把一个机器(主机或路由器)的 IP 地址转换为相应的 MAC址(或硬件地址)。网际控制报文协议 ICMP: 用来使主机或路由器报告差错情况和提供有关异常情况的报告,这样就可以更有效地转发 IP 数据报和提高交付成功的概率。

4-05 IP 地址如何表示?

IP 地址 (32 位)可记为:IP 地址::= {<网络号>,<主机号>}。

分类的 IP 地址共分为五类。

  • A类地址:网络号字段为1字节,最前面的1位是0
  • B类地址:网络号字段为2字节,最前面的2位是 10
  • C类地址:网络号字段为3字节,最前面的3位是 110
  • D类地址:用于多播,最前面的4位是 1110
  • E类地址:保留今后使用,最前面的4位是 1111

无分类地址又称为 CIDR 。由"网络前缀 "(network-prefix) (简称为"前缀")和主机号组成。主机号字段称为后缀(suffix) CIDR 的记法是:IP 地址::={<网络前缀>,<主机号>}。但网络前缀的位数不固定,并且没有 A类、B 类或C类的划分。图2是两种地址的比较。
 
图2.

4-06 IP 地址的主要特点是什么?

IP 地址具有以下一些重要特点:

  • (1) 每一个 IP 地址都由网络前缀和主机号两部分组成。从这个意义上说, IP 地址是一种分等级的地址结构。
  • (2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。换言之, IP 地址并不仅仅指明一个主机,同时还指明了主机所连接到的网络。
  • (3) 按照互联网的观点,一个网络是指具有相同网络前缀的主机的集合,因此,用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络前缀。具有不同网络前缀的局域网必须使用路由器进行互连。
  • (4) IP 地址中,所有分配到网络前缀的网络(不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网)都是平等的。

4-07 试说明 IP 地址与 MAC 地址的区别。为什么要使用这两种不同的地址?

从层次的角度看, MAC 地址是数据链路层和物理层使用的地址,而 IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。由于全世界存在着各式各样的网络,它们使用不同的 MAC 地址。要使这些异构网络能够互相通信就必须进行非常复杂的 MAC 地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事 但统一的 IP 地址把这个复杂问题解决了。连接到互联网的主机只需拥有统一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便。当需要把 IP 地址转换为MAC 地址时,调用 ARP 的复杂过程都由计算机软件自动进行,而用户是看不见这种调用过程的。因此,在虚拟的 IP 网络上用 IP 地址进行通信给广大的计算机用户带来很大的方便。

4-08 IP 地址方案与我国电话号码体制的主要不同点是什么?

最主要有两个不同点。

首先, IP 地址是定长的,因此在互联网上的 IP 地址总数是一定的。如果 IPv4 的地址用完了,那么就要过渡到具有更大地址空间的 IPv6 。对于 IPv4 来说,每 IP 地址是固定的 32位二进制数字。但我国的固定电话号码是不定长度的,全国电话号码的总容量并没有上限。区号如果不够,就可以增加区号。一个区内的电话局不够了,可以增加电话局的数目。区号的位数可以不一致。

我国规定大城市区号是两位的,如北京的区号是 10 (请注意,北京的区号不是 010 。用固定电

话拨打北京的电话时,最前面的0是必须加入的,但这个数字0是国内长途电话接入码,后面的10 才是北京的区号)。但有的省各城市的区号都是三位的,没有两位的。而各城市电话号码的位数也是不固定的。根据城市人口的增长情况,电话号码的位数可以逐渐增多。可以从五位增长到六位,再增长到七位或八位。

其次, IP 地址与主机所在的地理位置无关。 IP 地址中并未规定哪几位分配给哪个地理位置(但我们应注意到,在 CIDR 体制中,可以按地址块分配给某个地点的某个机构)。在我国的固定电话号码体制中,前面的区号(两位或三位)表示地理位置(按行政划分的城市范围),后面号码中的前三位是电话交换机的编号,也具有固定的地理位置,最后几位则是分配给连接到这个交换机的各电话机的编号。因此,一个固定电话号码= (区号)+(交换机编号)+(电话机编号)。

4-09 IP 数据报中的首部检验和并不检验数据报中的数据。这样做的最大好处是什么?坏处是什么?

好处是,不检验数据部分可以加快检验的过程,使转发分组更快。坏处是,数据部分出现差错时不能及早发现。即使到达终点,目的主机中的 IP 也仍然不检查数据部分是否正确。当 IP 数据报的数据部分送交上面的运输层时,运输层的 TCP 才检查收到的数据有无差错。

4-10 当某个路由器发现一个 IP 数据报的首部检验和有差错时,为什么采取丢弃的办法而不是要求源站重传此数据报?计算首部检验和为什么不采用 CRC 检验码?

IP 首部中的源地址也可能变成错误的,要求错误的源地址重传数据报是没有意义的。不使用 CRC 可减少路由器进行检验的时间。

4-11 设IP 数据报使用固定首部,其各字段的具体数值如图 3所示(除 IP 地址外,均为十进制形式表示)。试用二进制运算方法计算应当写入到首部检验和字段中的数值(用二进制形式表示)。

把以下的数据写成二进制数字,按每 16 位对齐,然后计算反码运算的和:
 
图3.

4,5和0 ----> 01000101 00000000
28 ----> 00000000 00011100
1 ----> 00000000 00000001
0和0 ----> 00000000 00000000
4和17 ----> 00000100 00010001
0 ----> 00000000 00000000
10.12 ----> 00001010 00001100
14.15 ----> 00001110 0000 1111
12.6 ----> 00001100 00000110
7.9 ----> 00000111 00001001
----> 01110100 01001110
校验和 ----> 10001011 10110001

4-12 重新计算上题,但使用十六进制运算方法(每 16 位二进制数字转换为2个十六进制数字,再按十六进制加法规则计算)。比较这两种方法。

我们看到, 8B16=10001011.B116=101100018B_{16} = 10001011. B1_{16} = 101100018B16=10001011.B116=10110001 。这两种方法得出的结果是一样的。

4,5和0 ----> 4 5 0 0
28 ----> 0 0 1 C
1 ----> 0 0 0 1
0和0 ----> 0 0 0 0
4和17 ----> 0 4 1 1
0 ----> 0 0 0 0
10.12 ----> 0 A 0 C
14.15 ----> 0 E 0 5
12.6 ----> 0 C 0 6
7.9 ----> 0 7 0 9
----> 7 4 4 E
校验和 ----> 8 B B 1

4-13 什么是最大传送单元 MTU? 它和 IP 数据报首部中的哪个字段有关系?

我们知道,在 IP 层下面的数据链路层规定了一个帧所能传送的数据的最大值。这个数值称为 (IP 层下面的数据链路层所能够传送的)最大传送单元 MTU 。当 IP 数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU 值。显然, MTU 就是 IP 数据报首部中的"总长度字段"的上限值。需要注意的是,这个总长度字段是 16 位,因此这个字段可以表示的最大数值是65535 字节。但实际上,下面的数据链路层往往限制了 IP 数据报的总长度,使其远远小于这个数值。总之, IP 数据报的总长度既不能超过 65535 字节,也不能超过数据链路层容许的 MTU 值,

用公式表示为:IP 数据报的总长度≤\leq≤min{MTU, 65535}。

图表明 IP 数据报的总长度就是数据链路层的 MAC 帧的数据部分。但 MTU 在这个图中并未表示出来,因为 MTU是MAC 帧的数据部分的上限值。
 
图4.

4-14 在互联网中将 IP 数据报分片传送的数据报在最后的目的主机进行组装。还可以有另一种做法,即数据报片通过一个网络就进行一次组装。试比较这两种方法的优劣。

在目的主机而不是在中间的路由器进行组装是由于:

  • (1) 在中间的路由器不进行数据报的组装,可使路由器处理数据报更简单些;
  • (2) 并非所有的数据报片都经过同样的路由器,因此在每一个中间的路由器进行组装可能总会缺少几个数据报片;
  • (3) 也许分组后面还要经过一个网络,它还要将这些数据报片划分成更小的片,如果在中间的路由器进行组装就可能会组装多次。

4-15 一个 3200 bit 长的 TCP 报文传到 IP 层,加上 160bit 的首部后成为数据报。下面的互连网由两个局域网通过路由器连接起来,但第二个局域网所能传送的最长数据帧中的数据部分只有 1200 bit, 因此数据报在路由器中必须进行分片。试问第二个局域网向其上层要传送多少 bit 的数据(这里的"数据"当然指的是局域网看见的数据) ?

第二个局域网所能传送的最长数据帧中的数据部分只有 1200 bit, 可见每一个 IP据报的最大长度是 1200 bit, 故其数据部分(即从 TCP 传下来的数据)最多为:IP 数据报的总长度- IP 数据报的首部= 1200 - 160 = 1040 bit。

可以这样划分: TCP 交给 IP 的数据共 3200 bit= 1024 + 1024 + 1024 + 128, 因此 3200 bit的数据必须划分为4个数据报,如图5 所示。
 
图5.

图中的 H1, H2, H3, H4 分别是这4个数据报的首部,其长度都是 160 bit (但里面的内容并不相同),而 TCP_1, TCP_2, TCP_3, TCP_4 分别是这四个数据报片的数据部分,其长度分别为 1024 bit, 1024 bit, 1024 bit和128 bit 。这4个数据报的总长度(首部加上数据部分)分别为 1184bit, 1184bit, 1184bit和288 bit。上面这些就是第二个局域网向其上层要传送的数据。因此,第二个局域网向上传送 1184 + 1184 + 1184 + 288 = 3840 bit。

4-16 (1) 试解释为什么 ARP 高速缓存每存入一个项目就要设置10~20 分钟的超时计时器。这个时间设置得太长或太短会出现什么问题?

(2) 至少举出两种不需要发送 ARP 请求分组的情况(即不需要请求将某个目的IP 地址解析为相应的 MAC 地址)。

(1)当网络中某个 IP 地址和 MAC 地址的映射发生变化时, ARP 高速缓存中相应的项目就要改变。例如,更换以太网网卡就会发生这样的事件。 10-20 分钟更换一块网卡是合理的。超时时间设置得太短会使 ARP 请求和响应分组的通信太频繁,而超时时间设置得太长会使更换网卡后的主机迟迟无法和网络上的其他主机通信。

(2) 源主机的 ARP 高速缓存中已经有了该目的 IP 地址的项目;源主机发送的是广播分组;源主机和目的主机使用点对点链路。

4-17 主机A发送 IP 数据报给主机 B, 途中经过了5个路由器。试问在 IP 数据报的发送过程中总共使用了几次 ARP?

6 次。主机发送 IP 数据报时用一次 ARP, 每一个路由器在转发 IP 数据报时各使用一次。

4-18 设某路由器建立了如下转发表:

前缀匹配 下一跳
192.4.153.0/26 R3R_3R3
128.96.39.0/25 接口m0
128.96.39.128/25 接口m1
128.96.40.0 /25 R2R_2R2
*(默认) R4R_4R4

现共收到5个分组,其目的地址分别为:

(1) 128.96.39.10

(2) 128.96.40.12

(3) 128.96.40.151

(4) 192.4.153.17

(5) 192.4.153.90

试分别计算其下一跳。

下面我们只给出每一小题中的1次匹配检查过程。目的是学会方法。

  • (1) 路由器收到的分组的目的地址为128.96.39.10 。检查转发表的第2行,所得结果匹配,故选择下一跳为接口m0。
128 96 39 10
目的主机IP地址 10000000 01100000 00100111 00001010
第二行的子网掩码 11111111 11111111 11111111 10000000
按位与运算 10000000 01100000 00100111 00000000
得出结果 128 96 39 0
  • (2) 路由器收到的分组的目的地址为128.96.40.12 。检查转发表的第4行,所得结果匹配,故选择下一跳为接口R2R_2R2。
128 96 40 12
目的主机IP地址 10000000 01100000 00101000 00001100
第二行的子网掩码 11111111 11111111 11111111 10000000
按位与运算 10000000 01100000 00101000 00000000
得出结果 128 96 40 0
  • (3) 路由器收到的分组的目的地址为128.96.40.151 。检查转发表的第4行,所得结果不匹配,再试其他行,都不匹配。因此选择下一跳为默认接口R4R_4R4。
128 96 40 151
目的主机IP地址 10000000 01100000 00101000 10010111
第二行的子网掩码 11111111 11111111 11111111 10000000
按位与运算 10000000 01100000 00101000 10000000
得出结果 128 96 40 128
  • (4) 路由器收到的分组的目的地址为192.4.153.17 。检查转发表的第1行,所得结果匹配,故选择下一跳为接口R3R_3R3。
192 4 153 17
目的主机IP地址 11000000 00000100 10011001 00010001
第二行的子网掩码 11111111 11111111 11111111 11000000
按位与运算 11000000 00000100 10011001 00000000
得出结果 192 4 153 0
  • (5) 路由器收到的分组的目的地址为192.4.153.90 。检查转发表的第1行,所得结果不匹配,再试其他行,都不匹配。因此选择下一跳为默认接口R4R_4R4。
192 4 153 90
目的主机IP地址 11000000 00000100 10011001 01011010
第二行的子网掩码 11111111 11111111 11111111 11000000
按位与运算 11000000 00000100 10011001 01000000
得出结果 192 4 153 64

4-19 某单位分配到一个地址块 129.250/16 。该单位有 4000 台计算机, 均分布在 16个不同的地点。试给每一个地址分配一个地址块,并算出每个地址块中 IP 地址的最小值和最大值。

4000 台计算机平均分布在 16 个不同的地点,每个地点有 250 台计算机。因此,主机号有8位就够了。这样,网络前缀可以选用24位。 16 个不同地点需要有 16 个地址块。每个地点分到一个/24 地址块就够用了。结果如下:

  • 129.250.1/24, IP 地址范围: 129 250.1.0 ~ 129.250.1.255
  • 129.250.2/24, IP 地址范围: 129.250.2.0 ~ 129.250.2.255
  • ...
  • 129.250.16/24, IP 地址范围: 129.250.16 ~ 129.250.16.255

4-20 一个数据报长度为 4000 字节(固定首部长度)。现在经过一个网络传送,但此网络能够传送的最大数据长度为 1500 字节。试问应当划分为几个短些的数据报片?各数据报片的数据字段长度、片偏移字段和 MF 标志应为何数值?

数据报的总长度减去首部长度,得出IP数据报的数据部分长度为4000 - 20 = 3980 BYTE。划分出一 个数据报片(要考虑首部有 20 字节长): 3980-1480 = 2500 BYTE, 剩下的的数据长度大于MTU。再划分出1个数据报片: 2500- 1480 = 1020 BYTE, 剩下的数据长度小于MTU。故划分为3个数据报片,其数据字段长度分别为 1480, 1480和1020 字节。

片偏移字段的值分别为 0, 1480/8=185 和2×1480/8=3702\times 1480 / 8 = 3702×1480/8=370。MF 字段的值分别为 1,1,0。

4-21 写出互联网的 IP 层查找路由的算法

IP 层查找路由的算法如下(假定转发表按照网络前缀的长短排列,把网络前缀长的放在前面):

  • (1) 从收到的分组的首部提取目的主机的 IP 地址 (即目的地址)
  • (2) 若查找到有特定主机路由(目的地址为 D) ,就按照这条路由的下一跳转发分组;否则从转发表中下一行,也就是前缀最长的一行)开始检查,执行(3)
  • (3) 把这一行的子网掩码与目的地址按位进行 AND 运算。若运算结果与本行的前缀匹配,则查找结束,按照"下一跳"所指出的进行处理(或直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。否则,若转发表还有下一行,则对下一行进行检查,重新执行(3)。否则,执行(4)
    (4) 若转发表中有一个默认路由,则按照指明的接口把分组传送到指明的默认路由器;否则,报告转发分组出错。

4-22 有如下的4个 /24 地址块,试进行最大可能的聚合。

  • 212.56. 132.0/24
  • 212.56. 133.0/24
  • 212.56.134.0/24
  • 212.56.135.0/24
    这几个地址块的前面两个字节都一样,因此,只需要比较第三个字节。
  • 212.56.132.0/24的第三个字节的二进制表示是10000100;
  • 212.56.133.0/24的第三个字节的二进制表示是10000101;
  • 212.56.134.0/24的第三个字节的二进制表示是10000110;
  • 212.56.135.0/24的第三个字节的二进制表示是10000111;

可以看出,第三个字节仅最后2位不一样,而前面6位都是相同的。这4个地址块的共同前缀是 22 位: 11010100 00111000 100001。最大可能的聚合的 CIDR 地址块是: 212.56.132.0/22。

4-23 有两个 CIDR 地址块 208.128/11和208.130.28/22 。是否有哪一个地址块包含了另一个地址块?如果有,请指出,并说明理由。

写出这两个地址块的二进制表示就可看出。实际上,只要把第一个地址块的前两个

字节和第二个地址块的前三个字节写成二进制形式即可。

-208.128/11 的网络前缀是: 11010000 100;

-208.130.28/22 的网络前缀是: 11010000 10000010 000111

可见,前一个地址块包含了后一个地址块。

4-24 已知路由器 R1 的转发表如下表所示。试画出各网络和必要的路由器的连接拓扑,标注出必要的 IP 地址和接口。对不

能确定的情况应当指明。

前缀匹配 下一跳地址 路由器接口
140.5.12.64/26 180.15.2.5 m2
130.5.8/24 190.16.6.2 m1
110.71/16 ----- m0
180.15/16 ----- m2
190.16/16 _____ m1
默认 110.71.4.5 m0

从上表可看出,路由器有三个接口: m0,m1和 m2, 如图 6所示。有三个网络直接和其相连,有两个网络间接和其相连,这是因为在"下一跳地址"中没有写任何地址。这就表明到了路由器R1后,不需要再转发(没有下一跳),而是直接交付主机。可见这三个网络是直接和路由器R1相连的。还应当有三个路由器。这从下一跳地址可看出,因为既然给出了下一跳的 IP 地址,那么这个 IP 地址一定是一个路由器。只要看它的 IP 地址就知道是和哪一个网络相连接的。默认路由器一定是和互联网相连的。例如,下一跳地址是 190.16.6.2, 具有这个地址的路由器一定是与网络 190.16.0.0 相连接的。但网络 130.5.8.0 是怎样和路由器 190.16.6.2 连接的,它们之间还要经过多少个路由器,现在都是不知道的。因此,网络 130.5.8.0 和路由器190.16.6.2 之间用虚线表示。
 
图6.

4-25 一个自治系统分配到的 IP 地址块为 30.138.118/23, 包括5个局域网,其连接图如图 7所示,每个局域网上的主机数标注在图7上。试给出每一个局域网的地址块(包括前缀)。
 
图7.

分配网络前缀时应先分配地址数较多的前缀。题目没有说 LAN1上有几个主机,但至少需要3个地址给3个路由器用。本题的解答有很多种,下面给出两组不同的答案(如下表所示)。

第一组答案 第二组答案
LAN1 30.138.119.192/29 30.138.118.192/27
LAN2 30.138.119.0/25 30.138.118.0/25
LAN3 30.138.118.0/24 30.138.119.0/24
LAN4 30.138.119.200/29 30.138.118.224/27
LAN5 30.138.119.128/26 30.138.118.128/27

第一组和第二组答案分别用图8和图9表示,这样可看得清楚些。图中注明有 LAN 的三角形表示在三角形顶点下面所有的 IP 地址都包含在此局域网的网络前缀中。在图中,我们把地址中与分配网络前缀有关的字节用二进制表示,写在括弧中的前两个字节仍用点分十进制表示。这样做是为了说明现在不必观察地址中的前两个字节,而应当把注意力集中

在地址中的后面两个字节。
 
图8.
 
图9.

我们还可以从另一种角度来看这个问题(如图10所示)。
 
图10.

我们这个自治系统有地址块 A, 即共有 512个IP 地址,其网络前缀 n= 23。32 位地址中23 位是网络前缀,剩下9位是主机号,因此共有512个 IP 地址。把总地址块分为两大块,每一块的地址数是 256 个,其网络前缀增加了一位(请注意:网络前缀每增加一位,地址数就减半),即 n=24 。这就是图中的B和C两大块。把地址块B分配给 LAN3, 而把地址块C继续分下去。地址块C的一半是 D, 地址数减半,是 128, 网络前缀增加了一位, n= 25。 LAN2 得到了地址块D。地址块C的另一半的一半是地址块 F, 地址数是 64, 网络前缀 n= 26 。地址块F分配给LAN5。在其余的 64 个地址中,给J和K各分配8个地址,其网络前缀 n=29。最后剩下 48 个地址留到以后再分配。图11是和第二组答案对应的图解方法。这个分配方案也是先把总地址块分成B和C两大块,把地址块C分配给 LAN3 。然后把地址块B继续分下去。把地址块B的一半D分配给 LAN2, 共有 128 个地址,其网络前缀 n=25; 把地址块B的另一半分成四等分,每一块有 32 个地址,网络前缀n=27。把这四块地址中的三块(图中的 E,F和 G) 分配给 LAN5, LAN1和 LAN4。
 
图11.

4-26 一个大公司有一个总部和三个下属部门。公司分配到的网络前缀是 192.77.33/24。公司的网络布局如图12所示。总部共有5个局域网,其中的 LAN1 ~ LAN4都连接到路由器 R1 上, R1再通过 LAN5 与路由器R2相连。R2和远地的三个部门的局域网 LAN6 ~ LAN8 通过广域网相连。每一个局域网旁边标明的数字是局域网上的主机数。试给每一个局域网分配一个合适的网络前缀。

50 个主机的 LAN1需要前缀/26 (主机号6位, 62 个主机号,R1的接口占用一个号

码), 28 个主机的 LAN3 需要前缀/27 (主机号5位, 30 个主机号,R1的接口占用一个号码),10 个主机的 LAN2和 LAN4 各需要一个前缀/28 (主机号4位, 14 个主机号,R1的接口占用一个号码)。

LAN6~ LAN8 (加上路由器)各需要一个前缀/27 (主机号5位, 30 个主机号, R3−>R5R_3->R_5R3−>R5的接口各占用一个号码)。3个 WAN 各有两个端点,各需要一个前缀/30 (主机号2位,2个主机号)。 LAN5 需要前缀/30 (主机号2位,用2个号码分配给路由器R1和R2的一个接口),考虑到以太网上可能还要再接几个主机,故留有余地,可分配一个前缀/29 (主机号3位,6个主机号)。

本题的解答有很多种,下面给出其中的一种答案:

  • LAN1: 192.77.33.0/26
  • LAN3: 192.77.33.64/27
  • LAN6: 192.77.33.96/27
  • LAN7: 192.77.33.128/27
  • LAN8: 192.77.33.160/27
  • LAN2: 192.77.33.192/28
  • LAN4: 192.77.33.208/28
  • LAN5: 192.77.33.224/29 (考虑到以太网上可能还要再接几个主机,故留有余地。)
  • WAN1: 192.77.33.232/30
  • WAN2: 192.77.33.236/30
  • WAN3: 192.77.33.240/30


图12.

4-27 以下地址中的哪一个和 86.32/12 匹配?请说明理由。

  • (1) 86.33.224.123;
  • (2) 86.79.65.216;
  • (3) 86.58.119.74;
  • (4) 86.68.206.154
    观察地址 86.32/12 的第二个字节 0x32 = 00100000, 前缀 12 位,说明第二个字节的0010 在前缀中。
    把给出的 个地址的第二个字节转换成二进制,看哪一个前4位是 0010:
  • (1) 0x33 = 00100001, 前4位是: 0010;
  • (2) 0x79 = 01001111, 前4位是: 0100;
  • (3) 0x58 = 00111010, 前4位是: 0011;
  • (4) 0x68 = 01000100, 前4位是: 0100
    因此,只有(1) 的地址 86.33.224.123 86.32/12 匹配。

4-28 以下地址前缀中的哪一个地址与 2.52.90.140 匹配?请说明理由。

(1) 0/4; (2) 32/4; (3) 4/6; (4) 80/4

给出的4个地址的前缀有4位和6位两种,因此我们就观察地址 2.52.90.140 的第

一个字节。2.52.90.140/4 的第一个字节的二进制表示是00000010。

  • (1) 0/4 的前缀是 0000;
  • (2) 32/4 的前缀是 0010;
  • (3) 4/6 的前缀是 000001;
  • (4) 80/4 的前缀是 0101

因此,只有前缀(1) 和地址 2.52.90.140 匹配。

4-29 下面前缀中哪一个和地址 152.7.77.159及152.31.47.252 都匹配?请说明理由。

  • (1) 152.40/13;
  • (2) 153.40/9;
  • (3)152.64/12;
  • (4) 152.0/11
    给出的四个地址的前缀是9位到 12 位,因此我们就观察题目给出的两个地址的第二字节,把第二字节写成二进制。题目给出的两个地址的前两个字节二进制表示是:
    10011000 00000111和10011000 00011111
  • (1) 的前缀是 13 位: 与这两个地址不匹配。
  • (2) 的前缀是9位: 与这两个地址不匹配。
  • (3) 的前缀是 12 位:与这两个地址不匹配。
  • (4) 的前缀是 11 位:与这两个地址都匹配。

4-30 与下列掩码相对应的网络前缀各有多少位?

  • (1) 192.0.0.0;
  • (2) 240.0.0.0;
  • (3) 255.224.0.0;
  • (4) 255.255 255.252
  • (1) 192.0.0.0 =11(后面还有30个0) ,网络前缀:2位。
  • (2) 240.0.0.0 =1111(后面还有 28个0) ,网络前缀: 4位。
  • (3) 255.224.0.0 =11111111111(后面还有21个0) ,网络前缀: 11 位。
  • (4) 255.255.255.252 = 11111111111111111111111111111100, 网络前缀: 30 位。

4-31 已知地址块中的一个地址是 140.120.84.24/20 。试求这个地址块中的最小地址和最大地址。地址掩码是什么?地址块总共有多少个地址?相当于多少个C类地址?

  • 最小地址是 140.120.01010000.00000000= 140.120.80.0/20;
  • 最大地址是 140.120.01011111.11111111= 140.120.95.255/20;
  • 地址掩码是 11111111,11111111,11110000,00000000
  • 地址数是212=40962^{12}=4096212=4096, 相当于 16个C 类地址。

4-32 已知地址块中的一个地址是 190.87.140.202/29 。重新计算上题。

  • 最小地址是 190.87.140.11001000= 190.87.140.200/29;
  • 最大地址是190.87.140.11001111= 190.87.140.207/29;
  • 地址掩码是 11111111,11111111,11111111,11111000
  • 地址数是8, 相当于132\frac{1}{32}321个C 类地址。

4-33 某单位分配到一个地址块 136.23.12.64/26 。现在需要进一步划分为4个一样大的子网。试问:

  • (1) 每个子网的网络前缀有多长?

  • (2) 每一个子网中有多少个地址?

  • (3) 每一个子网的地址块是什么?

  • (4) 每一个子网可分配给主机使用的最小地址和最大地址是什么?

  • (1) 原来网络前缀是 26 位,需要再增加2位,才能划分为4个一样大的子网。因此,每个子网前缀是 28 位。

  • (2) 每个子网的地址中有4位留给主机用,因此共有 16 个地址(可用的 14 个)。

  • (3)4 个子网的地址块分别是:136.23.12.64/28, 136.23.12.80/28, 136.23.12.96/28, 136.23.12.112/28

  • (4) 地址中的前三个字节分别记为 B1, B2 B3

    • 第一个地址块 136.23.12.64/28 可分配给主机使用的最小地址是 136.23.12.65, 最大地址是136.23.12.78
    • 第二个地址块 136.23.12.80/28 可分配给主机使用的最小地址是 136.23.12.81, 最大地址是136.23.12.94
    • 第三个地址块 136.23.12.96/28 可分配给主机使用的最小地址是 136.23.12.97, 最大地址是136.23.12.110
    • 第四个地址块 136.23.12.112/28 可分配给主机使用的最小地址是 136.23.12.113, 最大地址136.23.12.126

4-34 IGP和EGP 这两类协议的主要区别是什么?

IGP 是内部网关协议,即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如 RIP和OSPF 协议。EGP 是外部网关协议。若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP 。目前使用最多的外部网关协议是 BGP 的版本 (BGP-4)。

4-35 试简述 RIP, OSPF和BGP 路由选择协议的主要特点。

RIP 是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,最大优点就是简单。 RIP 协议的特点是:

  • (1) 仅和相邻路由器交换信息。如果两个路由器之间的通信不需要经过另一个路由器,那
    么这两个路由器就是相邻的。 RIP 协议规定,不相邻的路由器不交换信息。
  • (2) 路由器交换的信息是当前本路由器所知道的全部信息,即自己的路由表。也就是说,
    交换的信息是:"我到本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器"。
  • (3) 按固定的时间间隔交换路由信息,例如每隔 30 秒。然后,路由器根据收到的路由信息更新路由表。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。

OSPF 最主要的特征就是使用分布式的链路状态协议。OSPF 协议的特点是:

  • (1) 向本自治系统中的所有路由器发送信息。这里使用的方法是洪泛法,即路由器通过所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这一信息的一个副本。
  • (2) 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的
    部分信息。所谓"链路状态",就是说明本路由器都和哪些路由器相邻,以及该链路的"度量"。OSPF 将这个"度量"用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便,称这个度量为"代价"。
  • (3) 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
    BGP 是不同自治系统的路由器之间交换路由信息的协议,它采用路径向量路由选择协议。BGP 协议的主要特点是:
  • (1) BGP 在自治系统之间交换"可达性"信息(即"可到达"或"不可到达")。例如,告
    诉相邻路由器:"到达目的网络 可经过 ASx"
  • (2) 自治系统之间的路由选择必须考虑有关策略。
  • (3) BGP 只能力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。

4-36 RIP 使用 UDP, OSPF 使用 IP, BGP 使用 TCP 。这样做有何优点?为什么 RIP

周期性地和邻站交换路由信息而 BGP 却不这样做?

RIP 只和邻站交换信息, UDP 虽不保证可靠交付,但开销小,可以满足 RIP 的要求。OSPF 使用可靠的洪泛法,并直接使用 IP, 好处是灵活性好、开销更小。BGP 需要交换整个路由表(在开始时)和更新信息, TCP 提供可靠交付以减少带宽的消耗。RIP 使用不保证可靠交付的 UDP, 因此必须不断地(周期性地)和邻站交换信息,才能使路由信息及时得到更新。但 BGP 使用保证可靠交付的 TCP, 因此不需要这样做。

4-37 假定网络中的路由器B的路由表有如下的项目(这三列分别表示"目的网络""距离"和"下一跳路由器"):

N1N_1N1 7 A
N2N_2N2 2 C
N6N_6N6 8 F
N8N_8N8 4 E
N9N_9N9 4 F

现在B收到从C发来的路由信息(这两列分别表示"目的网络"和"距离"):

N2N_2N2 4
N3N_3N3 8
N6N_6N6 4
N8N_8N8 3
N9N_9N9 5

试求出路由器B更新后的路由表(详细说明每一个步骤)。

先把收到的路由信息中的"距离"加 1:

N2N_2N2 5
N3N_3N3 9
N6N_6N6 5
N8N_8N8 4
N9N_9N9 6

路由器 更新后的路由表如下:

N1N_1N1 7 A 无新信息,因此不改变
N2N_2N2 5 C C到N2N_2N2的距离增大了,因此必须更新
N3N_3N3 9 F 新的项目,应添加进来
N6N_6N6 5 F 选择 C为下一跳距离更短(与F相比),更新
N8N_8N8 4 E 下一跳是E或C, 距离一样,因此不改变,下一跳仍为E
N9N_9N9 4 F 如下一跳是 C, 则距离更大,因此不改变,下一跳仍为F

4-38 网络如图13所示。假定 AS1和AS4 运行协议 RIP, AS2和AS3 运行协议OSPF。AS 之间运行协议 eBGP和iBGP 。目前先假定在 AS2和AS4 之间没有物理连接(图中的虚线表示这个假定)。

  • (1) 路由器 R3cR_{3c}R3c 使用哪一个协议知道前缀 X(在 AS4 中)?
  • (2) 路由器 R3aR_{3a}R3a 使用哪一个协议知道前缀 X?
  • (3) 路由器 R1cR_{1c}R1c 使用哪一个协议知道前缀 X?
  • (4) 路由器 R1dR_{1d}R1d 使用哪一个协议知道前缀 X?
  • (1) 路由器 R3cR_{3c}R3c使用协议 eBGP从AS4 的 R4cR_{4c}R4c 知道前缀X。
  • (2) 路由器R3aR_{3a}R3a 使用协议 iBGP 从本自治系统的 R3cR_{3c}R3c知道前缀X。
  • (3) 路由器 R1cR_{1c}R1c 使用协议 eBGP从AS3 的 R3cR_{3c}R3c 知道前缀X。
  • (4) 路由器 R1dR_{1d}R1d 使用协议 iBGP 从本自治系统的 R1cR_{1c}R1c知道前缀X。


图13.

4-39 网络同上题。路由器R1dR_{1d}R1d知道前缀 X, 并将前缀X写入转发表。

  • (1) 试问路由器R1dR_{1d}R1d 应当从接口1还是接口2转发分组呢?请简述理由。

  • (2) 现假定 AS2和AS4 之间有物理连接,即图中的虚线变成了实线。假定路由器R1dR_{1d}R1d知道到达前缀X可以经过 AS2, 但也可以经过 AS3 。试问路由器 R1dR_{1d}R1d应当从接口1还是接口2转发分组呢?请简述理由。

  • (3) 现假定有另一个 AS5 处在 AS2和AS4 之间(图中的虚线之间未画出 AS5) 。假定路由器 R1dR_{1d}R1d知道到达前缀X可以经过路由 [AS2,AS5,AS4] ,但也可以经过路由 [AS3 ,AS4]。试问路由器R1dR_{1d}R1d应当从接口1还是接口2转发分组呢?请简述理由。

  • (1) 在AS1 中,从路由器 R1dR_{1d}R1d到网关路由器 R1cR_{1c}R1c。如果 AS1 使用协议 RIP, 则应选择最短路径到 R1dR_{1d}R1d 。若从接口1转发,要经过两跳。但若经过接口2转发,则要经过3跳。因此应当从接口1转发分组。如果 AS1 使用协议 OSPF, 则应选择代价最小的路径。从 R1dR_{1d}R1d到 R1cR_{1c}R1c有两条路径,一条是 R1d−>R1a−>R1cR_{1d}->R_{1a}->R_{1c}R1d−>R1a−>R1c,另一条是R1d−>R1b−>R1a−>R1cR_{1d}->R_{1b}->R_{1a}->R_{1c}R1d−>R1b−>R1a−>R1c ,不过根据已知条件无法知道哪一条路径的代价更高。

  • (2) 现在 AS2和AS4 之间有物理连接。假定路由器R1dR_{1d}R1d 知道到达前缀X可以经过AS2AS4,但也可以经过 AS3 AS4, 都是经过2跳。但在 AS1 中,从路由器R1dR_{1d}R1d 通过接口1到网关路由器R1cR_{1c}R1c 需要经过2跳,从路由器R1dR_{1d}R1d 到网关路由器R1bR_{1b}R1b 仅需要经过1跳。因此,应当从接口2转发分组。

  • (3) 现在 AS2和AS4 之间有物理连接,并且中间还插入了 AS5 。现在应当经过接口1转发分组,因为经过的 AS 数量少 (AS3 AS4) 。但若从接口2转发分组,则经过的 AS 数量较多 (AS2AS5AS4)

4-40 IGMP 协议的要点是什么?隧道技术在多播中是怎样使用的?

IGMP 是网际组管理协议,它不是一个单独的协议,而是整个网际协议 IP 的一个组成部分。 IGMP 并非是在互联网范围内对所有多播组成员进行管理的协议。 IGMP 不知道 IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上,等等。 IGMP 协议让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。

显然,仅有 IGMP 协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。

从概念上讲, IGMP 的工作可分为两个阶段。

  • 第一阶段:当某个主机加入新的多播组时,该主机应向多播组的多播地址发送一个 IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器。
  • 第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一个主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一个主机响应,多播路由器就认为本网络上的主机已经都离开了这个组,因此也就不再把这个组的成员关系转发给其他多播路由器。

隧道技术适用于多播组的位置在地理上很分散的情况。例如在图14中,网1和网2都支持多播。现在网1中的主机向网2中的一些主机进行多播。但路由器R1R_1R1和R2R_2R2之间的网络并不支持多播,因而R1R_1R1和R2R_2R2不能按多播地址转发数据报。为此,路由器R1R_1R1就对多播数据报进行再次封装,即再加上普通数据报首部,使之成为向单一目的站发送的单播数据报,然后通过"隧道"从R1R_1R1发送到R2R_2R2。单播数据报到达路由器R2R_2R2后,再由路由器R2R_2R2剥去其首部,又恢复成原来的多播数据报,继续向多个目的站转发。
 
图14.

4-41 什么是 VPN? VPN 有什么特点和优缺点? VPN 有几种类别?

VPN 就是虚拟专用网。 VPN 的特点就是采用 TCP/IP 技术和利用公用的互联网作为通信载体,使一个机构中分布在不同场所的主机能够像使用一个本机构的专用网那样进行通信。之所以称为"专用网",是因为这种网络是本机构的各主机用于和机构内部的其他主机通信的,而不是用于和网络外非本机构的主机通信的。如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。"虚拟"表示"好像是,但实际上并不是",因为现在并没有使用真正的专用网(这需要使用专线连接),而是通过公用的互联网来连接分散在各场所的本地网络。VPN 只是在效果上起到真正专用网的作用。一个机构要构建自己的 VPN, 就必须为其每一个场所购买专门的硬件和软件并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。VPN 的优点是在价格上比建造专用网便宜,但缺点是需要比较复杂的技术。当需要进行保密通信时,就需要有更加完善的加密措施。经过公用的互联网通信,不管采用什么样的加密措施,总会令人担心安全性。

常用的 VPN 有以下三种:

  • (1) 内联网(intranet) 或内联网 VPN: 由本机构内部网络构成的 VPN
  • (2) 外联网(extranet) 或外联网 VPN: 有某些外部机构(通常就是合作伙伴)参加而构成的VPN
  • (3) 远程接入 VPN: 能够使在外地工作的员工通过拨号接入互联网,并和本公司保待联系或开电话会议。

4-42 什么是 NAT? 什么是 NAPT? NAT 的优点和缺点有哪些? NAPT 有哪些特点?

NAT 就是网络地址转换。 NAPT 是网络地址与端口号转换,是使用端口号的 NAT。

NAT 的优点就是可以通过使用 NAT 路由器使专用网内部的用户和互联网连接。专用网内部的用户使用的是专用地址(也叫本地地址,如果不使用 NAT 路由器,那么这种地址是不能和互联网相连的),但当 IP 数据报传送到 NAT 路由器后就转换成为全球 IP 地址 (NAT 路由器至少要有一个这样的全球 IP 地址)了。于是专用网的用户也就可以和互联网连接了。 NAT的一个缺点是通过 NAT 路由器的通信必须由专用网内的主机发起。设想互联网上的主机要发起通信,当 IP 数据报到达 NAT 路由器时, NAT 路由器就不知道应当把目的 IP 地址转换成专用网内的哪一个本地 IP 地址。 NAT 的另一个缺点就是当 NAT 路由器只有一个全球 IP 地址时,专用网内最多只有一个主机可以接入互联网。如果 NAT 路由器有多个全球 IP 地址,那么就可以同时有多个主机和互联网相连(每一个主机占用一个全球 IP 地址)。

由于 NAPT 还使用了运输层的端口号,因此在 NAPT 上的一个全球 IP 地址可以供专用网中的多个主机使用(每一个主机使用不同的端口号)。当 NAPT 路由器收到从互联网发来的应答时,就可以从 IP 数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从NAPT 转换表中找到正确的目的主机。从层次的角度看, NAPT 的机制有些特殊。普通路由器在转发 IP 数据报时,源 IP 地址或目的 IP 地址都是不改变的。但 NAT 路由器在转发 IP 数据报时,一定要更换其 IP 地址(转换源IP 地址或目的 IP 地址)。其次,普通路由器在转发分组时,工作在网络层。但 NAPT 路由器还要查看和转换运输层的端口号,而这本来应当属于运输层的范畴。也正因为这样, NAPT曾遭受了一些人的批评,他们认为 NAPT 的操作没有严格按照层次的关系进行。但不管怎样,NAT (包括 NAPT) 已成为互联网的一个重要构件。

4-43 试把下列IPv4 地址从二进制记法转换为点分十进制记法。

  • (1) 10000001 00001011 00001011 11101111
  • (2) 11000001 10000011 00011011 11111111
  • (3) 11100111 11011011 10001011 01101111
  • (4) 11111001 10011011 11111011 00001111
    把每8位一组转换成等值的十进制数,并增加分隔的点,得到:
  • (1) 129.11.11.239
  • (2) 193.131.27.255
  • (3) 231.219.139.111
  • (4) 249.155.251.15

4-44 假设一段地址的首地址为 146.102.29.0, 末地址为 146.102.32 255, 求这个地址段的地址数。

从末地址减去首地址,得出的结果是 0.0.3.255, 因此地址的数目=4×256=10244\times 256 = 10244×256=1024。实际上,这段给出的地址块包含了以下4个地址块,即:146.102.29/24, 146.102.30/24, 146.102.31/24, 146.102.32/24, 每个地址块包含 256 个地址。

4-45 知一个/27 网络中有一个地址是 167.199.170.82, 问这个网络的网络掩码、网络前缀长度和网络后缀长度是多少?网络前缀是多少?

网络掩码是 27个1和5个0, 即255.255.255.224 。这个网络的网络前缀长度是 27,网络后缀长度是5。网络前缀是 167.199.170.64/27。

4-46 已知条件同上题,试求这个地址块的地址数、首地址以及末地址各是多少?

如下表所示:从首地址和末地址的数值不难看出,该地址块的地址数为 32个。

点分十进制表示的地址 167 199 170 82
二进制表示的地址 10100111 11000111 10101010 01010010
网络掩码 (27个 1) 11111111 11111111 11111111 11100000
地址块的首地址 10100111 11000111 10101010 01000000
地址块的末地址 10100111 11000111 10101010 01011111

4-47 某单位分配到一个地址块 14.24.74.0/24 。该单位需要用到三个子网,它们对三个子地址块的具体要求是:子网 N1 需要 120 个地址,子网 N2 需要60 个地址,子网 N3 需要 10 个地址。请给出地址块的分配方案。

这个单位的地址块的网络前缀是 24 位,因此主机号有8位,即一共有 256 个地址。可以拿总地址的一半 (128 个)分配给子网 N1 (实际上可以使用的地址数是 126 。这个地址块的网络前缀是 25位。再将剩下地址的一半 (64 个)分配给子网 N2 (实际上可以使用的地址数是 62 个)。这个地址块的网络前缀是 26位。还剩下 64 个地址,可以拿出 1/4 (即 16 个地址)分配给子网 N3 (实际上可以使用的地址数是 14 个)。这个地址块的网络前缀是 28位。

最后剩下 48 个地址留给以后再用。

这样,分配给子网 N1 (/25)的首地址 14.24 74 .0, 末地址是 14.24 74.127。

分配给子网 N2( /26 的首地址是 14 24.74.128, 末地址是 14.24.74.191

分配给子网 N3 (/28) 的首地址是 14 24.74.192, 末地址是 14 24 74.207

图15显示了上述分配方案。
 
图15.

4-48 如图16所示,网络 145.13.0.0/16 划分为四个子网 N1,N2, N3, N4 。这四个子网与路由器R连接的接口分别是 m0,m1,m2, m3 。路由器R的第五个接口m4 连接到互联网。

(I) 试给出路由器R的路由表。

(2) 路由器R收到一个分组,其目的地址是 145.13.160.78 。试解释这个分组是怎样被转发的。

路由器R的路由表如下表所示:表中前四行的子网掩码都是 18 个连1 ,接着后面是 14 个连0。只要到达的分组的目的地址不在表中给出的前四个地址中,就统统送交默认路由器(通过路由器的接口 m4) 。请注意,最后一行的网络前缀是 0.0.0.0/0 。这样的网络前缀和任何一个 IP地址进行按位 AND 运算,其结果都必定是 0, 即一定是匹配的。这时就通过接口 m4 交给默认路由器来处理。

网络前缀 下一跳
145.13.0.0/18 直接交付,接口 m0
145.13.64.0/18 直接交付,接口 m1
145. 13.128.0/18 直接交付,接口 m2
145.13.192.0/18 直接交付,接口 m3
0.0.0.0/0 默认路由器,接口 m4

路由器R收到一个分组,其目的主机的 IP 地址是 145.13.160.78。路由表前四行的子网掩码都是 18 个1。现在用目的主机 IP 地址与路由表第1行的子网掩码按位进行 AND 运算,如图17所示,得出的结果是 145.13.128.0/18。结果和上表 第一行的目的网络地址不匹配。往下不必再运算了,因为路由表中每一行的子网掩码都是一样的,所以就用此结果和每一行的网络前缀相比较即可。很容易看出,上面的结果与第3行的网络前缀匹配。因此,收到的分组应从路由器的接口 m2 转发,实际上就是直接交付连接在网络 N3 上的目的主机。
 
图16.
 
图17.

4-49 收到一个分组,其目的地址 = 11.1.2.5 要查找的路由表中有这样3项:

  • 路由1到达网络 11.0.0.0/8
  • 路由2到达网络 11.1.0.0/16
  • 路由3到达网络 11.1.2 0/24
    试问在转发这个分组时应当选择哪一个路由?

把收到的分组的目的地址以及路由1->3的目的网络都表示为二进制数字,网络前缀使用粗体斜体字(见下表) 。这里没有把最长前缀放在最前面。当查找路由1时,目的网络的掩码是 8个1和 24个0, 即255.0.0.0 。和D进行按位 AND操作时,得到 11.0.0.0, 结果是匹配的。当查找路由2时,目的网络的掩码是 16个1和 16个0,即 255.255.0.0 。和D进行按位AND 操作时,得到 11.1.0.0, 结果也是匹配的。当查找路由3时,目的网络的掩码是 24个1和 8个0,即 255.255.255.0 。和D进行按位AND 操作时,得到 11.1.2.0, 结果也是匹配的。那么应当选择哪一个路由呢?根据最长前缀匹配准则,应当选择路由 3, 因为路由3的目的网络前缀为 24, 是三个都匹配的结果中前缀最长的一个。

目的地址D 11.1.2.5 00001011 00000001 00000010 00000101
路由1的目的网络 11.0.0.0 00001011 00000000 00000000 00000000
路由2的目的网络 11.1.0.0 00001011 00000001 00000000 00000000
路由3的目的网络 11.1.2.0 00001011 00000001 00000010 00000000

4-50 同上题。假定路由1的目的网络 11.0.0.0/8 中有一台主机 H, IP 地址是11.1.2.3 。当我们发送一个分组给主机H时,根据最长前缀匹配准则,上面的这个路由表却把这个分组转发到路由3的目的网络 11.1.2.0/24 。是最长前缀匹配准则有时会出错吗?

最长前缀匹配准则是没有问题的,问题出在主机H的 IP 地址上。请注意,网络 11.1.2.0/24 是网络 11.0.0.0/8 的一个子网,而 IP 地址 11.1.2.3 正是子网11 1.2.0/24 中的一个合法 IP 地址。网络 11.0.0.0/8 在分配本网络的主机号时,不允许重复使用子网 11.1.2.0/24 中的任何一个地址。因此,网络 11.0.0.0/8 给它的一台主机分配 IP 地址 11.1.2.3是不被允许的。这样做就和网络 11.1.2.0/24 中的 IP 地址 11.1.2.3 重复了,因而引起了地址上的混乱。

4-51 已知一个 CIDR 地址块为 200.56.168.0/21 。

  • (1) 试用二进制形式表示这个地址块 。

  • (2) 这个 CIDR 地址块包括多少个C类地址块?

  • (1) 200 56.168.0/21=11001000 00111000 10101000 00000000(粗体数字表示网络前缀)。

  • (2)C 类地址块的网络号是 24 位,比上面的 CIDR 地址块多3位。因此这个 CIDR 地址块包含8个类地址块。

4-52 建议的 IPv6 协议没有首部检验和。这样做的优缺点是什么?

这样做的优点是对首部的处理更简单。数据链路层已经将有差错的帧丢弃了,因此网络层可省去这一步骤。但其缺点是可能遇到数据链路层检测不出来的差错(此概率极小)。

4-53 在IPv4 首部中有一个"协议"字段,但在IPv6 的固定首部中却没有。这是为什么?

在 IP 数据报传送的路径上所有路由器都不需要这一字段的信息。只有目的主机才需要协议字段。IPv6 中使用"下一个首部"字段完成 IPv4 中的"协议"字段的功能。

4-54 当使用 IPv6 时,协议 ARP 是否需要改变?如果需要改变,那么应当进行概念性的改变还是技术性的改变?

IPv6 已经没有 ARP 协议了,但IPv6 中的 ICMPv6 包括了IPv4中的ARP 的功能。也就是说,从概念上讲, ARP 的功能在IPv6 中仍然是不可缺少的,但在技术上却进行了很多改进。也就是说,IPv4 中的 ARP 协议所完成的功能,在IPv6 中已由新的邻居发现协议 ND 来完成了。

4-55 IPv6 只允许在源点进行分片。这样做有什么好处?

分片与重装是非常耗时的操作。 IPv6 把这一功能从路由器中删除,并移到网络边缘的主机中,大大加快了网络中 IP 数据报的转发速度。

4-56 相关概念比较简单,看看书就好。

4-57 试把以下的IPv6 地址用零压缩方法写成简洁形式:

  • (1) 0000:0000:0F53 :6382:AB00:67DB:BB27:7332

  • (2) 0000:0000:0000:0000:0000:0000:004D:ABCD

  • (3) 0000:0000:0000:AF36:7328:0000:87AA:0398

  • (4) 2819:00AF:0000:0000:0000:0035 :0CB2:B271

    分片与重

  • (1) 0000:0000:0‾F53:6382:AB00:67DB:BB27:7332\underline{0000:0000:0}F53 :6382:AB00:67DB:BB27:73320000:0000:0F53:6382:AB00:67DB:BB27:7332 中有下画线的一串 可以用两个冒号表示,即::F53:6382:AB00:67DB:BB27:7332。

  • (2) 0000:0000:0000:0000:0000:0000:00‾4D:ABCD\underline{0000:0000:0000:0000:0000:0000:00}4D:ABCD0000:0000:0000:0000:0000:0000:004D:ABCD中有下画线的一串0可以用两个冒号表示,即::4D:ABCD。

  • (3)0000:0000:0000‾:AF36:7328:0000:87AA:0398\underline{0000:0000:0000}:AF36:7328:0000:87AA:03980000:0000:0000:AF36:7328:0000:87AA:0398中有下画线的一串 可以用两个冒号表示,即::AF36:7328:0:87AA:398。

  • (4)2819:00AF:0000:0000:0000:00‾35:0CB2:B2712819:00AF\underline{:0000:0000:0000:00}35 :0CB2:B2712819:00AF:0000:0000:0000:0035:0CB2:B271 中有下画线的一串 可以用两个冒号表示,即2819:AF::35:CB2:B271。以上地址中的00AF 可简化为 AF, 而0CB2 可简化为 CB2。

4-58 试把以下零压缩的IPv6 地址写成原来的形式:

  • (1) 0::0

  • (2) 0:AA::0

  • (3) 0🔢:3

  • (4) 123::1:2

    被恢复的零压缩用加下画线的0表示。

  • (1) 0000:0000:0000:0000:0000:0000:0000:000‾00\underline{000:0000:0000:0000:0000:0000:0000:000}00000:0000:0000:0000:0000:0000:0000:0000

  • (2) 0000:00AA:0000:0000:0000:0000:0000:000‾00000:00AA\underline{:0000:0000:0000:0000:0000:000}00000:00AA:0000:0000:0000:0000:0000:0000,最前面的 0000 原来是用一个0表示的,而00AA 原来被简写为 AA。

  • (3) 0000:1234:0000:0000:0000:0000:0000:000‾30000:1234:\underline{0000:0000:0000:0000:0000:000}30000:1234:0000:0000:0000:0000:0000:0003,最前面的 0000 原来是用一个0表示的。

  • (4) 0123:0000:0000:0000:0000:0000:000‾1:00020123:\underline{0000:0000:0000:0000:0000:000}1:00020123:0000:0000:0000:0000:0000:0001:0002,最前面的 0123 原来简写为 123, 而最后的0002 原来简写为2。

4-59 IPv4 过渡到 IPv6 的方法有哪些?

由于现在整个互联网上使用IPv4 的路由器数量太大,因此,"规定一个日期,从这一天起所有的路由器一律都改用 IPv6", 显然是不可行的。这样,向 IPv6 过渡只能采用逐步演进的办法,同时,还必须使新安装的IPv6 系统能够向后兼容。这就是说, IPv6 系统必须能够接收和转发IPv4 分组,并且能够为 IPv4 分组选择路由。

下面介绍两种向IPv6 过渡的策略,即使用双协议栈和隧道技术。

  • (1) 双协议栈:双协议栈(dual stack) 是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈: IPv4 和IPv6 。因此双协议栈主机(或路由器)既能够和 IPv6 的系统通信,又能够和IPv4 的系统通信。双协议栈的主机(或路由器)记为IPv6/IPv4, 表明它具有两种 IP 地址:一个IPv6 地址,一个 IPv4 地址。双协议栈主机在和 IPv6 主机通信时采用 IPv6 地址,而和 IPv4 主机通信时则采用 IPv4地址。但双协议栈主机如何知道目的主机是采用哪一种地址的呢?它是使用域名系统 DNS 来查询的。若 DNS 返回的是IPv4 地址,双协议栈的源主机就使用IPv4 地址;若 DNS 返回的是 IPv6地址,源主机就使用IPv6 地址。
  • (2) 隧道技术:IPv6 过渡的另一种方法是隧道技术(tunneling) 。这种方法的要点就是在 IPv6 数据报要进入IPv4 网络时,把IPv6 数据报封装成为IPv4 数据报(整个 IPv6 数据报变成了 IPv4 数据报的数据部分)。然后,IPv6 数据报就在 IPv4 网络的隧道中传输。当IPv4 数据报离开IPv4 网络中的隧道时再把数据部分(即原来的IPv6 数据报)交给主机的IPv6 协议栈。要使双协议栈的主机知道 IPv4 数据报里面封装的数据是一个IPv6 数据报,就必须把 IPv4首部的协议字段的值设置为 41 (41 表示数据报的数据部分是 IPv6 数据报)。

4-60 多协议标签交换 MPLS 的工作原理是怎样的?它有哪些主要的功能?

在传统的 IP 网络中,分组每到达一个路由器,都必须查找转发表,并按照"最长前缀匹配"的原则找到下一跳的 IP 地址(请注意,前缀的长度是不确定的)。当网络很大时,查找含有大量项目的转发表要花费很长的时间。在出现突发性的通信量时,往往还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降。MPLS 的一个重要特点就是不用长度可变的 IP 地址前缀来查找转发表中的匹配项目,而是给每一个 IP 数据报打上固定长度"标签",然后对打上标签的 IP 数据报用硬件进行转发,这就使得 IP 数据报转发的过程省去了每到达一个路由器都要上升到第三层用软件查找转发表的过程,因而 IP 数据报的转发速度就大大加快了。采用硬件技术对打上标签的 IP 数据报进行转发就称为标签交换。"交换"也表示在转发时

不再上升到第三层查找转发表,而是根据标签在第二层用硬件进行转发。 MPLS 可使用多种链路层协议,如 PPP 、以太网、 ATM 以及帧中继等。

MPLS 的主要功能可以归纳如下:

  • (1) 属于一种面向连接的连网技术。
  • (2) MPLS 域中的各标签交换路由器 LSR, 使用专门的标签分配协议 LDP 交换报文,并找出和特定标签相对应的路径。当 IP 数据报进入 MPLS 域时就被打上标签,然后在 MPLS域的核心部分标签交换路由器 LSR 利用硬件进行转发,这样就加快了 IP 数据报的转发速度。
  • (3) MPLS 的上面可以采用多种协议,但最常用的是 IP 协议。
  • (4) 具有转发等价类 FEC 的功能。入口节点并不是给每一个 IP 数据报指派一个不同的标签,而是给属于同样 FEC的IP 数据报都指派同样的标签,因而都按照同样的方式转发。
  • (5) MPLS 可以将 FEC 用于负载平衡。网络管理员采用自定义的 FEC 就可以更好地管理网络的资源。这种均衡网络负载的做法也称为流量工程。

4-61 SDN 的广义转发与传统的基于终点的转发有何区别?

如下表所示:

传统的基于终点的转发 SDN 的广义转发
使用路由器进行转发 使用分组交换机进行广义转发
基于分组首部的目的地址 基于流表中的项目,不限于目的地址
转发表:匹配+转发 流表:匹配+动作(不限于转发)
每个路由器根据路由选择软件算法得出转发表 逻辑上集中控制的远程控制器为每 一个流表制定 "匹配+动作"的规则

4-62 试举出 IP 数据报首部中能够在 OpenFlow 1.0 中匹配的三个字段。试举出在OpenFlow 中不能匹配的三个 IP 数据报首部。

能够在 OpenFlow 1.0 中匹配的三个 IP 数据报首部字段是:源地址、目的地址和协议字段。不能够在 OpenFlow 1.0 中匹配的三个 IP 数据报首部字段是:版本、生存时间和总长度字段。

4-63 网络如图18所示。

  • (1) 假定路由器 R1 把所有发往网络前缀 123.1.2.16/29 的分组都从接口4转发出去。
  • (2) 假定路由器 R1 要把H1H_1H1发往 123.1.2.16/29 的分组从接口4转发出去,而把H2H_2H2发往123.1.2 16/29 的分组从接口3转发出去。
    试问,在上述两种情况下,你都能够给出路由器 R1的转发表吗?转发表只需要给出发往123 1.2.16/29 的分组应当从哪一个接口转发出去。
  • (1) 路由器 R1的转发下表所示。
前缀匹配 转发接口
123.1.2 16/29 4
  • (2) 对于传统路由器的转发表,到同一个目的地址的分组不能有两个不同的路由。因此路由器R1无法实现给出的条件。


图18.

4-64 已知一个具有4个接口的路由器R1的转发表如下表所示,转发表的每一行给出了目的地址的范围,以及对应的转发接口。

目的地址范围 转发接口
最小地址 11100000 00000001 000000000 0000000 最大 地址 11100000 00000001 11111111 11111111 0
最小地址 11100000 00000000 00000000 00000000 最大地址 11100000 00000000 11111111 11111111 1
最小地址 11100000 00000010 00000000 00000000 最大地址 11100001 11111111 11111111 11111111 2
其他 3
  • (1) 试把以上转发表改换为另一形式,其中的目的地址范围改为前缀匹配,而转发表由4行增加为5行。
  • (2) 若路由器收到一个分组,其目的地址是:
    • (a) 11100000 10000001 01010001 01010101
    • (b) 11100000 00000000 11010111 01111100
    • ( c) 11100001 10010000 00010001 01110111
      试给出每一种情况下分组应当通过的转发接口。
      按照最长前缀匹配的方式,得出转发表如下表所示。
前缀匹配 转发接口 注释
224.0.0.0/16 1 前缀最长的在最前面
224.0.0.0/15 0
224.0.0.0/7 2
224.0.0.0/5 3 本行第1 列的数据不是唯一的
其他 3

(2) (a) 接口 2;(b) 接口 1; (c ) 接口3.

4-65 一个路由器连接到三个子网,这三个子网共同的前缀是 225.2.17/24 。假定子网N1N_1N1要有 62 台主机,子网N2N_2N2要有 105 台主机,而子网 N3N_3N3要有 12 台主机。试分配这三个子网的前缀。

先分配最大的子网 N2N_2N2。105 台主机需要的主机号的位数是7位,因此N2N_2N2的前缀是:

225.2.17.0/25, 其地址范围是 225.2.17.0~225.2.17.127。其次是子网N1N_1N1。 62 台主机需要的主机号的位数是6位,因此N1N_1N1的前缀是:225.2.17.128/26, 其地址范围是 225.2.17 128~225.2.17.191。最小子网是 N3N_3N3 。12 台主机需要的主机号的位数是4位,因此N3N_3N3的前缀是:225.2.17.192/28, 其地址范围是 225.2.17.192~225.2. 17.207。

4-66 图19是一个 SDN OpenFlow 网络。

假定:

• 任何来自H5或 H6 、到达输入端口1且发往H1或 H2的分组,均应通过端口2转发出去;

• 任何来自H1或 H2 、到达输入端口2且发往 H5 或H6的分组,均应通过端口 转发出去;

• 任何从端口1或2进入且发往H3或 H4 的分组,均应交付指明的主机;

• H3 或H4彼此可以互相发送分组。

试给出交换机 S2 的流表项(即每一行的"匹配+动作")。

在"动作"项目中,"转发"后面括号中的数字是交换机的转发端口号 。交换机 S2的流表项如下表所示。

匹配 动作
入端口=1:IP 源地址=10.3.*.* :IP 目的地址==10.1.*.* 转发 2)
入端口=2:IP 源地址=10.1.*.* :IP 目的地址==10.3.*.* 转发(1)
入端口=*:IP 源地址=10.*.*.* :IP 的地址= 10.2.0.3 转发(3)
入端 口=*:IP 源地址=10.*.*.* :IP 目的地址= 10.2.0.4 转发(4)
入端口= 3:IP 源地址= 10.2.0.3 :IP 目的地址= 10.2 0.4 转发(4)
入端口=4:IP 源地址= 10.2.0.4: IP 目的地址= 10.2.0.3 转发(3)


图19.

4-67 SDN OpenFlow 网络同上题。从主机H3或 H4发出并到达 S2 交换机的分组,应遵循以下规则:

• 任何来自 H3且发往 H1, H2, H5 和H6的分组,均应顺时针转发出去;

• 任何来自 H4且发往 H1, H2, H5 和H6的分组,均应逆时针转发出去;

试给出交换机 S2 的流表项(即每一行的"匹配+动作")。

在"动作"项目中,"转发"后面括号中的数字是交换机的转发端口号 。交换机 S2的流表项如下表所示。

匹配 动作
IP 源地址= 10.2.0.3 :IP 目的地址= 10.1. *. * 转发(2)
IP 源地址= 10.2.0.3: IP 目的地址= 10.3. *. * 转发(2)
IP 源地址= 10.2.0.4 :IP 目的地址= 10.1 *. * 转发(1)
IP 源地址= 10.2.0.4: IP 目的地址= 10.3. *. * 转发(1)

4-68 SDN OpenFlow 网络同上题。在交换机 S1和S3 中有这样的规定:从源地址H3或H4到来的分组将按照分组首部中的目的地址进行转发。试给出交换机 S1和S3的流表项。

在"动作"项目中,"转发"后面括号中的数字是交换机的转发端口号 。交换机 S1的流表项如下表所示。

匹配 动作
IP 源地址= 10.2. *. *:IP 目的地址= 10.1.0. 1 转发(2)
IP 源地址= 10.2. *. *: IP 目的地址= 10.1. 0.2 转发(3)
IP 源地址= 10.2. *. * :IP 目的地址= 10.3 *. * 转发(1)

交换机 S3的流表项如下表所示。

匹配 动作
IP 源地址= 10.2. *. *:IP 目的地址= 10.1.*. * 转发(3)
IP 源地址= 10.2. *. *: IP 目的地址= 10.3. 0.5 转发(2)
IP 源地址= 10.2. *. * :IP 目的地址= 10.3 0. 6 转发(1)

4-69 SDN OpenFlow 网络同上题。假定我们把交换机 S2 作为防火墙。防火墙的行为有以下两种:

  • (1) 对于目的地址为 H3和H4的分组,仅可转发从H2和H6发出的分组,也就是说,从H1和H5发出的分组应当被阻挡。
  • (2) 仅对于目的地址为H3的分组才交付,也就是说,所有发往H4的分组均被阻挡。
    试分别对上述的每一种清况给出交换机 S2 的流表项。对于发往其他路由器的分组可不用管。
    在"动作"项目中,"转发"后面括号中的数字是交换机的转发端口号 。交换机 S2的流表项如下表所示。
匹配 动作
IP 源地址= 10.1.0. 1:IP 目的地址= 10.2. *. * 丢弃
IP 源地址= 10.3. 0. 5: IP 目的地址= 10.2. *. * 丢弃
IP 源地址= 10.2. *. * :IP 目的地址= 10.3 .0. 6 转发(1)
... ...
交换机 S2的流表项如下表所示。
匹配 动作
IP目的地址= 10.2. 0. 3 交付
IP 目的地址= 10.2. 0. 4 丢弃
... ...

4-70 如图 28所示 ,两个 ISP1和 ISP2 各从地区 ISP 分到自己的前缀。 ISP1和 ISP2

的用户分配到的前缀都标注在图上。每个用户都必须让所连接的 ISP 的路由器知道自己的前缀,而ISP1和 ISP2要让地区 ISP 的路由器知道这些用户的前缀,地区 ISP 也要让主干 ISP 知道这些用户的前缀,这样才能正确地进行分组转发。图中在这些连接线旁边标注了需要通报的前缀。实际上, ISP1和ISP2 都会拥有很多用户。这样,在 ISP1和ISP2 连接到地区 ISP 的链路上以及地区 ISP 连接到主干 ISP 的链路上,需要向上通报的前缀数量就会很大。现在各 ISP 均采用路由聚合。请重新画这张图,并标注路由聚合后在每个链路

上需要通报的聚合路由是什么。

图29画出了路由聚合后链路上需要通报的前缀。需要注意的是, ISP1和ISP2 都可以有很多用户分配到一些小块的前缀。不管这样的用户有多少, ISP1和ISP2 向地区 ISP 通报的前缀都是图上所示的那样。这就是路由聚合的好处。
 
图28.
 
图29.

4-71 如图30所示 , ISP1和 ISP2 从地区 ISP 分配到的网络前缀分别是:193.24.0.0/13和193.32.0.0/13 。这两个 ISP 都各自有许多用户。图中给出了从 ISP1 分配到前缀的三个用户 A,B和C 。他们所分配到的前缀和地址范围也都标注在图上。 ISP1 和ISP2还都向地区 ISP 通报了自己的前缀。现在用户B和C决定各增加一条和 ISP2 的连接,这样就可以有两条连接到互联网的路径。 ISP2 要让地区 ISP 知道B和C已经和自已连接了,因此把B和C的前缀聚合起来,另外再向地区 ISP 通报前缀193.24.0.0/18 。请用实际的例子说明通报这样的聚合前缀是错误的。

先检查一下B和C的聚合前缀(有下画线的是前缀)。

  • 用户B的最小地址: 11000001.00011000.0000‾0000.00000000\underline{11000001.00011000.0000}0000.0000000011000001.00011000.00000000.00000000
  • 用户B的最大地址: 11000001.00011000.0000‾1111.11111111\underline{11000001.00011000.0000}1111.1111111111000001.00011000.00001111.11111111
  • 用户C的最小地址:11000001.00011000.00111‾000.00000000\underline{11000001.00011000.00111}000.0000000011000001.00011000.00111000.00000000
  • 用户C的最大地址:11000001.00011000.00111‾111.11111111\underline{11000001.00011000.00111}111.1111111111000001.00011000.00111111.11111111
  • B和C的聚合前缀:11000001.00011000.00∗‾\underline{11000001.00011000.00*}11000001.00011000.00∗或 193.24 0.0/18, 这正是 ISP2向地区 ISP 另外再通报的聚合前缀。

现假定有一个分组进入地区 ISP, 其目的地址是 193.24.17.2。现在要寻找前缀的匹配。我们需要检查 ISP1 的193.24.0.0/13 以及 ISP2 193.32.0.0/13 和193.24.0.0/18。目的地址 193.24.17.2 和ISP2 的 193.32.0.0/13 显然是不匹配的。但是,目的地址 193.24.17.2 和另外两项都是匹配的(见下面的演算)。
 
.

根据最长前缀匹配原则,应当选择转发到 ISP2 的193.24.0.0/18。但是,当分组再从 193.24.0.0/18 进一步找地址为 193.24.17.2 的主机时,却找不到了!这是因为在用户B和C的地址中,根本没有 193.24.17.2 这个地址!用户A的最小地址是: 193.24.16.0, 最大地址是: 193.24.23.255 。显然, 193.24.17 .2在A的地址范围之中。因此,地区 ISP 应当把这个分组转发给 ISP1 而不是 ISP2 。那么,这里为什么会出现路由选择错误的问题呢?答案是:用户B和C虽然增加了一条连接到 ISP2 的链路,但B和C的前缀并不是从 ISP2而是从 ISP1 分配来的,并且这两个前缀聚合后还包含了A的前缀。把并不在 ISP2 中的A的前缀告诉地区 ISP, 说"我这里包含A的前缀",这显然是错误的。

正确的做法是: ISP2 不但要向地区 ISP 通报自己的前缀 193.32.0.0/13, 还必须原封不动地通报B的前缀 193.24.0.0/20 和C的前缀 193.24 56.0/21, 而不应通报B和C的聚合前缀。这就是说, ISP2 向地区 ISP 通报的前缀应当是:

193.32.0.0/13, 193.24.0.0/20 和193.24.56.0/21。

需要注意的是,在图30所示的连接情况下,根据最长前缀匹配原则,凡是要发送到B或C的分组,地区 ISP 都将转发到 ISP2 而不是 ISP1 。可以看出, ISP2 的负担加重了。如果 ISP1也向地区 ISP 再通报B和C的前缀,那么在地区 ISP 的路由表中,就有两条前缀长度相同的转发路径(经过 ISP1或ISP2) 。这时,地区 ISP 可以任选其中的一个,或根据本自治系统中确定的负载平衡策略进行路由选择。
 
图30.

4-72 有三个彼此相互连接的互联网服务提供者 ISP1, ISP2和ISP3, 其网络前缀分别为

C1.0.0.0/8, C2.0.0.0/8和C3 0.0/8。ISP1 有两个用户,其前缀分别如下:

  • U1A 的前 C1.A3.0.0/16,
  • UIB 的前缀为 C1.B0.0.0/12

ISP2 有两个用户,其前缀分别如下:

  • U2A 的前缀为 C2.0A.10 0/20,
  • U2B 的前缀为 C2.0B 0.0/16
  • (1) 试给出 ISP1, ISP2和ISP3 的转发表。
  • (2) 假定 ISP 之间的连接有些改变,即 ISP1和ISP3 不再互相连接了。试给出 ISP1和ISP3 的转发表。
  • (3) 假定 UIA 增加一条连接到 ISP2 的链路, U2A增加一条连接到 ISP1 的链路。此时不再考虑 ISP3。试给出 ISP1和ISP2 的转发表。
    (1) ISP 和用户的连接情况如图 31所示。


图31.

根据各 ISP 的连接图,可得出各 ISP 的转发表如下所示:
ISP1的转发表.

匹配前缀 下一跳
C2.0.0.0/8 ISP2
C3.0.0.0/8 ISP3
C1.A3.0.0/16 U1A
C1 :B0.0.0/12 U1B

ISP2的转发表.

匹配前缀 下一跳
C1.0.0.0/8 ISP1
C3.0.0.0/8 ISP3
C2.0A.0.0/20 U2A
C2 :0B.0.0/16 U2B

ISP3的转发表.

匹配前缀 下一跳
C1.0.0.0/8 ISP1
C2.0.0.0/8 ISP2

(2) 各ISP 和用户的连接情况如图 32所示。这时,与(1) 的结果相比较, ISP2 的转发表不变。 ISP1 的转发表中第2行的下一跳应改为 ISP2

(原来是 ISP3) ,而 ISP3 的转发表中第1行的下一跳应改为 ISP2 (原来是 ISP1)。
 
图32.

(3) 各ISP 和用户的连接情况如图 33所示。
ISP1的转发表.

匹配前缀 下一跳
C2.0.0.0/8 ISP2
C2.0A.10.0/20 U2A
C1.A3.0.0/16 U1A
C1 :B0.0.0/12 U1B

ISP2的转发表.

匹配前缀 下一跳
C1.0.0.0/8 ISP1
C1.A3.0.0/16 U1A
C2.0A.10.0/20 U2A
C2 :0B.0.0/16 U2B


图33.

4-73 把上一题的图改动为如图34 所示,即 U1A 不连接到 ISP1 而连接到 ISP2, U2B 不连接到 ISP2 而连接到 ISP3 。试着重新给出三个 ISP 的转发表。
 
图34. 各ISP的转发表如下所示 ISP1的转发表.

匹配前缀 下一跳
C2.0.0.0/8 ISP2
C3.0.0.0/8 ISP3
C1.A3.0.0/16 ISP2
C1 :B0.0.0/12 U1B
C2 :0B.0.0/16 ISP3

ISP2的转发表.

匹配前缀 下一跳
C1.0.0.0/8 ISP1
C3.0.0.0/8 ISP3
C1.A3.0.0/16 U1A
C2.0A.0.0/20 U2A
C2 :0B.0.0/16 ISP3

ISP3的转发表.

匹配前缀 下一跳
C1.0.0.0/8 ISP1
C2.0.0.0/8 ISP2
C1.A3.0.0/16 ISP2
C2 :0B.0.0/16 U2B

/********************************************************************************************/

下面接下来是习题解答里面额外的习题。
4-01 存在多种异构网络对不同网络之间的通信会造成一些麻烦,但为什么世界上还存在多种异构网络?

世界上之所以存在着多种异构网络,就是因为仅用一种体系结构的网络根本无法满足所有用户的需求。OSI 假定全世界所有的人都在网络层使用 X.25 协议,并希望使用 X.75 协议将全球所有的X.25 网络互连起来,从而实现全球任意计算机之间的通信。然而事实证明,大家并不愿意这样做,结果 OSI 失败了。这里的原因就是 X.25 网络并不能满足所有用户的需求,大量的用户还需要使用其他类型的网络。在计算机网络发展初期,许多厂家都生产了具有自己独特体系结构的计算机网络。这些计算机网络就像一个个孤岛一样,它们是不能互相通信的。如果某公司的雇员需要同时接入三个不同厂商的计算机网络,那么他就需要用三台终端(即观看三个不同的屏幕显示)分别连接到不同的计算机网络。这显然是很不方便的。在客观上存在多种异构计算机网络的现实情况下,普遍服务(universal service) 的概念被提出来了。一个计算机通信系统若能够提供普遍服务,就表明该系统中的任何一对计算机都能够很方便地进行通信。全世界的电话网就是能够提供普遍服务的一个成功例子。在世界上存在大量异构计算机网络(它们的网络硬件和 MAC 地址的编址方法都不一样)的现实情况下,要获得普遍服务,的确是相当困难的事。但 IP 协议成功地解决了这个难题。不管你使用的具体网络采用什么样的硬件结构,但只要你的网络使用 IP 协议并给连接在网络上的主机分配了合法IP 地址,那么连接到这种虚拟的 IP 互联网上的任何一对计算机都可以很方便地进行通信。

4-02 "IP 网关"和 "IP 路由器"是否为同义语?

当初发明 TCP/IP 的研究人员使用 IP Gateway 作为网际互连的设备。我国的网络工作者曾使用过多种译名,如网间连接器、网闸、信关、联网机等,但最后全国自然科学名词审定委员会(这个委员会现在改名为"全国科学技术名词审定委员会")在《计算机科学技术名词》中公布 Gateway 的标准译名为"网关"。但是,在 20 世纪 90 年代初期,美国一家厂商认为,将 IP Gateway 改名为 IP Router 似乎更加有利于设备的销售。后来其他厂家也跟着改变产品的名称。在《计算机科学技术名词》中,Router 的标准译名是"路由器"。现在,大家基本上不再使用"网关"这一名词了。因此,我们可以认为 "IP 网关"和 "IP 路由器"是同义语。

4-03 IP 的英文全称是 Internet Protocol, 其标准译名是"网际协议"。那么 "IP 协议"是否重复使用了"协议",即"IP协议"变成了"网际协议协议"呢?

我们知道, IP 中的 "P" 就代表"协议",因此仅仅说 IP 就已经很清楚了。但为了强调 IP 是一个协议,所以在 IP 的后面还是加上了"协议"二字。如果完全用汉字来表示 "IP协议",那么当然只能用一个"协议",即"网际协议"。

和这个问题类似的还有名词 PC (Personal Computer) ,即个人计算机。但有时为了强调 PC是一个计算机,就常常在 PC 的后面加上一个"机",变成了 "PC 机"。这当然不是表示"个人计算机机",而仍然是"个人计算机"。在英文的教科书或文献中,有时会遇到 current flow 这样的写法。我们知道, current 是"电流",而 flow 是"流"。显然,这里也有些重复,我们不应当把 current flow 译为"电流流"。

4-04 在文献中有时会见到对等连网(peer-to-peer networking) ,这是什么意思?

这有两重意思。

首先,这表示在互联网中,任何两个计算机都可以平等地进行通信。互联网对通信双方计算机的大小是不关心的。连接在互联网上的可能是一个很小的 PC, 而通信的对方可能是一个很大的巨型机。这和早期的网络很不一样。早期的网络以一个很大的主机为中心,和这个主机通信的是外围的许多功能上相对较弱的小终端。但后来计算机网络发展为以网络为中心,所有连接到网络(或互联网)上的计算机都是平等的。"对等"也有"对称"的意思,但这并不是说,通信的两个计算机的大小规模必须是相似的,而是说,各种计算机都可以平等地连接到互联网上。

其次,对等连网有时还用来说明计算机的通信方式。计算机网络原来都采用"客户-服务器"的通信方式。客户是通信服务的请求方,而服务器是通信服务的提供方。这两方在功能上显然是不对等的。客户进程比较简单,而服务器进程就比较复杂,运行服务器程序的机器也比较昂贵。但现在新的通信方式出现了,即相互通信的主机,可以互为客户方或服务器方,因此产生了对等连网这样的名词。

4-05 在互联网中,能否使用一个很大的交换机(switch) 来代替全部的路由器?

不行。交换机和路由器的功能是很不一样的。交换机可在一个单个的网络中和若干个计算机相连,并且可以将一个计算机发送过来的帧转发给另一个计算机。从这一点上看,交换机具有集线器的转发帧的功能。但交换机比集线器的功能强很多。集线器在同一时间只允许一个计算机和其他计算机进行通信,但交换机允许多个计算机同时进行通信。路由器连接两个或几个网络,路由器可在网络之间转发分组(即 IP 数据报)。而且,这些互连的网络可以是异构的。因此,如果是许多相同类型的网络互连在一起,那么用一个很大的交换机(如果能够找得到)代替原来的一些路由器是可以的。但目前的互联网是非常多的异构网络互连起来的,我们不可能找到一种交换机来代替互联网中的全部路由器。因此,必须使用许多路由器来进行网络互连。

4-06 为什么 IP 地址又称为"虚拟地址"?

这是因为 IP 地址是靠软件来维持的,而不是一个 MAC 地址。我们好像构成了一个很大的使用统一 IP 协议的互连网络,但这个 IP 网络是虚拟的网络系统,因为从层次上来看,它的通信系统是建造在网络层上的,是抽象的通信系统。虽然许多大小不同的物理网络相互连接起来了,但这些网络有各自不同的物理层。例如,有的是无线网络,有的是光纤网络,并且数据的传送速率也可能相差很大。这些网络的数据链路层协议也是不相同的。如果我们从网络层来看这个庞大的异构网络,那么就好像是构成了一个很大的、统一的 IP 网络。这种虚拟网络的地址也是虚拟的,因此 IP 地址又称为"虚拟地址"。实在的地址就是各网络和各主机的 MAC 地址。可以打一个比方。例如,我国所有的大学都有具体的、实在的门牌号码。我们通过邮政局给各大学寄信就要使用这样的具体地址。但是,假定教育部为了更加方便地管理这些大学,在一张图上把所有大学都按照一定的规律编上号码,而在这些具有编号的图上大学就构成了一个虚拟的全国大学网络。当教育部发送某个文件时,就可以按照指定的号码发送给一些相关的大学。这就相当于我们在 IP 网络中按 IP 地址进行通信,但是文件的传送还是要按照各大学的具

体门牌号码(相当于MAC 地址)由邮递员来交付。

4-07 有的文献中使用"虚拟分组 "(virtual packet) 这一名词。虚拟分组是什么意思?

虚拟分组就是 IP 数据报。

因为互联网是由大量异构的物理网络互连而成的。这些物理网络的帧格式是各式各样的,它们的地址也可能是互不兼容的。路由器无法将一种格式的帧转发到另一种网络,因为另一种网络无法识别与自己格式不同的帧的地址。路由器也不可能对不同的地址格式进行转换。为了解决这一问题, IP 协议定义了 IP 数据报的格式。所有连接在互联网中的路由器都能识别 IP 数据报的 IP 地址,因此能够对 IP 数据报进行转发(在进行转发时当然要调用 ARP协议,以便获得相应的 MAC 地址)。我们知道, IP 数据报是物理网络的帧的数据部分。各个物理网络在转发帧时,看的是帧首部中的 MAC 地址而不是(实际上也看不见)帧的数据部分。由于所有的物理网络都看不见所传送的帧里面的 IP 数据报,就使 IP 数据报得到了"虚拟分组"这样的名称。

4-08 如图20所示,五个网络用四个路由器(每一个路由器有两个端口)互连起来。能否改变这种连接方法,使用一个具有五个端口的路由器将这五个网络互连起来?

一般说来,不采用图20这样的连接方法。这里有两个原因:

  • (1) 路由器中的 CPU 和存储器是用来对通过该路由器的每一个 IP 数据报进行处理的。假若一个路由器和许多个网络相连接,那么这个路由器的处理器很可能没有足够的能力来处理通过它的所有 IP 数据报。
  • (2) 冗余度可以提高互联网的可靠性。路由器和网络都有可能出现故障。如果将所有的路由选择功能集中在一个路由器上,则一旦该路由器出故障,整个互连网就无法工作。因此,在规划互连网时,互连网的具体拓扑结构取决于物理网络的带宽、期望的通信量、对可靠性的需求以及路由器硬件的价格。


图20.

4-09 当运行 PING 127.0.0.1 时,这个 IP 数据报将发送给谁?

127.0.0.1 是环回地址。主机将测试用的 IP 数据报发送给本主机的 ICMP (而不是

发送到互联网上)以便进行环回测试。

4-10 网络前缀是指网络号字段(net-id) 中前面的几个类别位,还是指整个的网络号字段?

网络前缀是指整个的网络号字段,包括最前面的几个类别位在内(这是最早使用的分类地址中的类别位)。网络前缀常常简称为前缀。请注意,网络前缀不能把前面的类别位除外。

例如一个B类地址 10100000 00000000 00000000 00010000 ,其类别位就是最前面的两位:10, 而网络前缀就是前 16 位: 10100000 00000000 。图21说明了这点。请注意,不能认为网络前缀是 100000 00000000, 也就是说,不能把最前面的两位 "10"(类别位)去掉。类别位是包括在网络号字段之内的。
 
图21.

4-11 有的书将 IP 地址分为前缀和后缀两大部分,它们和网络号字段及主机号字段有什么关系?

前缀(prefix) 就是网络号字段(net-id) ,而后缀(suffix) 就是主机号字段(host-id) 。图22以C类地址为例说明了前缀和后缀是什么。如果网络划分了子网,那么前缀还应包括子网号字段。由于原来分类的 IP 地址已很少使用, CIDR 记法已普遍被接受,因此使用前缀和后缀来描述 IP 地址是现在大量使用的方法。读者应尽快熟悉这种方法。
 
图22.

4-12 IP 地址中的前缀和后缀最大的不同是什么?

不同点有:

  • (1) 前缀是由互联网管理机构进行分配的,而后缀是由分配到前缀的单位自行分配的。
  • (2) IP 数据报的寻址根据前缀来找目的网络,找到目的网络后再根据后缀找到目的主机。

4-13 IP 数据报中数据部分的长度是可变的(即 IP 数据报不是定长的)。这样做有什么好处?

这样做的好处是可以满足各种应用的需要。有时在键盘上键入的一个字符就可以构成一个很短的 IP 数据报。但有的应用程序需要将很长的文件构成一个大的 IP 数据报(最长64KB ,包括首部在内)。当然,大多数 IP 数据报的数据部分长度都远大于首部长度。这样做的好处是可以提高传输效率(首部开销所占的比例就较小)。

4-14 IP 地址中各种类别的地址所拥有的地址数目的比例是怎样的?

IPv4 的各种类别的地址所拥有的地址数目的比例如图23所示。不难看出,A 类地址占 IP 地址总数的一半, B类地址数是A类地址数的一半,即占 IP地址总数的 1/4, C类地址数是B类地址数的一半,即占 IP 地址总数的 1/8, 而D类和E类地址数又是C类地址数的 半,即各占 1P 地址总数的 1/16。需要注意的是:尽管A类地址的总数等于4倍的C类地址数,但分配 IP 地址是分配地址前缀而不是分配单个 32 位的 IP 地址,因此C类地址可供分配的地址前缀数目要比A类地址可供分配的地址前缀数目多一万多倍(建议读者自己计算一下)。
 
图23.

4-15 在IP 地址中,为什么使用最前面的一位或几位来表示地址的类别?

知道了 IP 地址的类别,就可以很快地将 IP 地址的前缀和后缀区分开来,这是路由器寻找下一跳地址时必须做的一件事。但是怎样才能尽快地让计算机完成这一动作呢?我们知道,计算机进行位操作(如左移、右移、布尔运算等)要比进行整数运算快得多。因此, IP 地址的类别划分就用地址中最前面的一位或几位来标识地址的类别。

4-16 全1的IP 地址是否是向整个互联网进行广播的一种地址?

不是。设想一下,如果是向整个互联网进行广播的地址,那么一定会在互联网上产生极大的通信

量,这样会严重地影响互联网的正常工作,甚至还会使互联网瘫痪。因此,在 IP 地址中的全 1地址表示仅在本网络上(就是发送这个 IP 数据报的主机所连接的局域网)进行广播。这种广播叫作受限的广播(limited broadcast)。如果 net-id 是具体的网络号,而 host-id 是全 1, 就叫作定向广播(directed broadcast) ,因为这是对某一个具体的网络(即 net-id 指明的网络)上的所有主机进行广播的一种地址。

4-17 IP 协议有分片的功能,但广域网中的分组则不必分片。这是为什么?

IP 数据报可能要经过许多个网络,而源主机事先并不知道数据报后面要经过的这些网络所能通过的分组的最大长度是多少。等到IP 数据报转发到某个网络时,可能才发现数据报太长了,因此在这时就必须进行分片。但广域网能够通过的分组的最大长度是该广域网中所有主机都事先知道的,源主机不可能发送网络不支持的过长分组,因此广域网就没有必要将已经发送出的分组再进行分片。

4-18 路由表中只给出到目的网络的下一跳路由器的 IP 地址,然后在下一个路由器的路由表中再给出再下一跳路由器的 IP 地址,最后才能到达目的网络进行直接交付。采用这样的方法有什么好处?

这样做的最大好处是使得路由选择成为动态的,十分灵活。当 IP 数据报传送到半途时,若网络的情况发生了变化(如网络拓扑变化或出现了拥塞),由于各路由器中的路由表是经常动态更新的,因此中途的路由器就会适应网络的这种变化,而改变其下一跳路由,从而实现动态路由选择。

4-19 链路层广播和 IP 广播有何区别?

链路层广播是用数据链路层协议(在第二层)在一个以太网上实现的对该局域网上所有主机的 MAC 帧广播。IP 广播则是用 IP 协议(在第三层)通过互联网实现的对一个网络(即目的网络)上所有主机的 IP 数据报广播。

4-20 主机在接收广播帧和多播帧时,其 CPU 所要做的事情有何区别?

在接收广播帧时,主机通过其适配器(即网络接口卡 NIC) 接收每一个广播帧,然后将其传递给操作系统。 CPU 执行协议软件,并界定是否接收和处理该帧。在接收多播帧时, CPU 要对适配器进行配置,而适配器根据特定的多播地址表来接收帧。凡与此多播地址表不匹配的帧都将被 NIC 丢弃。因此在多播的情况下,是适配器 NIC 而不是CPU 决定是否接收一个帧。

4-21 有的路由器在和广域网相连时,在该路由器的广域网接口处并没有 MAC 地址,这怎样解释?

每一个连接到广域网的路由器显然都必须有一个 MAC 地址,否则就无法进行通信,但是具体的细节可能会有相当大的差别。例如,我们的电话机和墙上的电话线路 RJ-11 插孔一连接就可以打电话。这表明电话机一定有一个唯一的电话号码(即 MAC 地址)。但是,这个电话号码并没有存储在电话机的某个地方。有些广域网也采用类似这样的技术。也就是说,每一个连接都有一个唯一的 MAC 地址,但这个地址并不一定存储在路由器的接口上。

4-22 IP 地址和固定电话的电话号码相比,有何异同之处?

下面分别介绍异同之处。

相同之处:

  • (1) 唯一性。每个固定电话机的电话号码(指包括国家码以及区号在内的号码)在电信网上都是唯一的。每个主机的 IP 地址在互联网上也是唯一的。
  • (2) 分等级的结构。
    • 电话号码: [国家号码][区号][局号][电话机号][分机号]。
    • IP 地址: [网络前缀][主机号]。

不同之处:各国的电话号码都是自主设置的,因此号码的位数可以各不相同。请注意,这里的"位"

是十进制位。IP 地址则一律是 32 位的固定长度(这是IPv4 的地址长度。若使用 1Pv6, 则地址长度为128 位)。请注意,这里的"位"是二进制位。

因此,电话号码空间是不受限的。当一个城市的电话号码空间不够用时,就可以增加电话号码的位数(例如6位不够用了就升级为7位,以后又不够用了就再升级为8位)。但 IP 地址空间是受限的,全部的 IP 地址用尽后就必须将 IPv4 升级到IPv6。电话号码中的"国家号码""区号""局号"都能直接反映出具体的地理位置(或范围),IP 地址的"网络前缀"却不能直接反映出具体的地理位置(或范围)。 IP 地址的管理机构在分配 IP 地址时并不是先将整个的地址空间按国家来分配,而是按网络前缀来分配的(不管这个网络在哪个国家)。

但是有的 IP 地址可以反映出一定的地理范围。例如,顶级域名若采用国家域名,则顶级域名是. cn 的应当在中国,但不知道在中国的什么地方;而二级域名若采用省级域名,则采用. js.cn 的应当在中国的江苏省,但不知道在江苏省的什么地方。然而,在采用通用顶级域名时,如采用. com,.net 或. org 时,则无法知道该主机在哪一个国家或地区。

4-23 "尽最大努力交付" (best effort delivery) 都有哪些含义?

  • (1) 不保证源主机发送出来的 IP 数据报一定无差错地交付到目的主机。
  • (2) 不保证源主机发送出来的 IP 数据报都在某一规定的时间内交付到目的主机。
  • (3) 不保证源主机发送出来的 IP 数据报一定按发送时的顺序交付到目的主机。
  • (4) 不保证源主机发送出来的 IP 数据报不会重复交付到目的主机。
  • (5) 不故意丢弃 IP 数据报。丢弃 IP 数据报的情况是:路由器检测出首部检验和有错误;或由于网络中通信量过大,路由器或目的主机中的缓存已无空闲空间(或接近用尽)。

但是要注意, IP 数据报的首部中有一个"首部检验和"。当它检验出 IP 数据报的首部出现了差错时,就将该数据报丢弃。因此,凡交付目的主机的 IP 数据报都是 IP 数据报的首部没有出现差错的或没有检测出来有差错的。这就是说,传输过程中出现差错的 IP 数据报都被丢弃了。例如,源主机一连发送了 10000个IP 数据报,结果有 9999个IP 数据报都出现了差错,因而都被丢弃了。这样,只有一个不出错的 IP 数据报最后交付目的主机。这也完全符合"尽最大努力交付"的原则。甚至当所发送的 10000个IP 数据报都被丢弃时,我们也不能说这不是"尽最大努力交付",只要路由器不是故意地丢弃 IP 数据报就行。现在互联网上绝大多数的通信量都是"尽最大努力交付"的。如果数据必须可靠地交付目的地,那么使用 IP 协议的高层软件就必须负责解决这一问题(例如,使用可靠交付的 TCP协议)。

4-24 假定在一个局域网中计算机A发送 ARP 请求分组,希望找出计算机B的 MAC地址。这时局域网上的所有计算机都能收到这个广播发送的 ARP 请求分组。试问这时由哪一个计算机使用 ARP 响应分组把计算机 MAC 地址告诉计算机 A?

这要区分两种情况。如果计算机B和计算机A都连接在同一个局域网上,那么就是计算机B发送 ARP 响应分组。如果计算机B和计算机A不是连接在同一个局域网上,那么就必须由一个与A连接在同一个局域网上的路由器来转发 ARP 请求分组。这时,该路由器向计算机A发送 ARP 回答分组,给出该路由器的 MAC 地址。

4-25 一个主机要向另一个主机发送 IP 数据报,是否使用 ARP 就可以得到该目的主机的 MAC 地址,然后直接用这个 MAC 地址将 IP 数据报发送给目的主机?

有时是这样,但有时也不是这样。ARP 只能对连接在同一个网络上的主机或路由器进行地址解析。我们看图24的例子。

由于A和B连接在同一个网络上,因此主机A使用 ARP 协议就可得到B的MAC 地址,然后用 MAC 地址,将 IP 数据报组装成帧,发送给B。但当目的主机是F时,情况就不同了。A无法得到F的 MAC 地址,只能先将 IP 数据报发送给本网络上的一个路由器(在本例中就是路由器 R1) 。因此,当A发送 IP 数据报给F时,在地址解析方面要经过以下三个步骤:

  • (1)A 先通过 ARP 解析出路由器 R1的 MAC 地址,将 IP 数据报发送到 R1
  • (2) R1再通过 ARP 解析出 R2的 MAC 地址,将 IP 数据报转发到 R2
  • (3) R2 再通过 ARP 解析出 F的MAC 地址,将 IP 数据报交付F。
    因此, A发送 IP 数据报给F要经过三次 ARP 地址解析。 A只知道F的 IP 地址,但并不F的知道 MAC 地址。


图24.

4-26 在互联网中最常见的分组长度大约是多少字节?

以太网的数据字段最多只允许装入 1500 字节,因此在互联网上传送的分组长度一般都不会超过 1500 字节。电子邮件和万维网都是互联网上常用的应用程序。这两个应用程序都使用 TCP 进行传输,因此经常要用到 TCP 的确认报文段。这种 TCP 确认报文段没有数据,只有 20 字节的首部,再加上 IP 数据报的 20 字节首部,使得 IP 数据报(即分组)的长度只有 40 字节。根据美国 MCI 主干网上传送的分组的统计数据,大约有 40%的分组为 40 字节长(即它们携带的数据都是 TCP 的确认报文段);大约有 15 %的分组为 576 字节左右的长度(即 IP 数据报的默认长度);大约有 10%的分组为 1500 字节长;超过 1500 字节的分组数是很少的。

4-27 IP 数据报的最大长度是多少字节?

最大长度是 64 KB, 因为其首部的总长度字段只有 16 位长。但实际上最多只能表示 65535 字节而不是 65536 字节,因为二进制中的 16 个1表示十进制的(216−12^{16} - 1216−1)。请注意:这里所说的最大长度是指 IP 协议给 IP 数据报长度规定的上限,是不允许超过的。但若 IP 数据报的长度超过了数据链路层的最大传送单元 MTU ,或超过了路由器和主机能够处理的长度限制,那么在传送这种 IP 数据报时就必须进行分片,而分片将导致IP 数据报的传输效率下降,应当尽可能避免。IP 协议规定,所有的主机和路由器能够处理的 IP 数据报长度不得小于 576 字节。这就是说,只要 IP 数据报的长度不超过 576 字节,这样的 IP 数据报通过互联网时就肯定不需要进行分片(数据链路层的 MTU 没有小于 576 字节的,因此不必考虑数据链路层是否能够传送 576字节长的数据)。当IP 数据报的长度超过 576 字节但小于 65535 字节时,肯定是能够通过互联网的,但是否需要进行分片,则取决于:

  • (1) 这个长度是否超过数据链路层的 MTU 值。
  • (2) 这个长度是否超过途经路由器的处理能力。
    顺便指出,上面提到的 576 字节是这样得到的:考虑要传送的数据长度是 512 字节,加上20 字节的固定 IP 首部和最多 40 字节的可变 IP 首部,共 572 字节。再考虑有4字节的富余量,就得出了 576 字节。请注意, 576 字节是IPv4 规定的数值,现在IPv6 已经把这个数值提高到1280 字节。这就是说,只要 IP 数据报的长度不超过 1280 字节,在IPv6
    络中传送时,就肯定不需要进行分片。

4-28 IP 数据报的首部最大长度是多少字节?典型的 IP 数据报首部是多长?

IP 数据报首部中有一个首部长度字段,4位长,可表示的最大十进制数字是 15。因此首部长度的最大值是 15 和4字节长的字,即 60 字节。典型的 IP 数据报不使用首部中的选项,因此典型的 IP 数据报首部长度是 20 字节。

4-29 IP 数据报在传输的过程中,其首部长度是否会发生变化?

不会。但首部中的某些字段(如标志、生存时间、首部检验和等)的数值会发生变化。

4-30 当路由器利用 IP 数据报首部中的"首部检验和"字段检测出在传输过程中出现了差错时,就简单地将其丢弃。为什么不发送一个 ICMP 报文给源主机呢?

IP 协议并不要求源主机重传有差错的 IP 数据报。保证无差错传输是由 TCP 协议完成的。另一方面,首部检验和只能检验出 IP 数据报的首部是否出现差错,但不知道首部中的源地址字段有没有出错。如果源地址出现了差错,那么将这种 IP 数据报传送到错误的地址也是没有任何意义的。

4-31 RIP 协议的好处是简单,缺点是不够稳定。有的书上介绍"触发更新""分割范围"和"毒性逆转"。能否简单介绍一下它们的要点?

现将三者的要点简要介绍如下:

  • (1) 触发更新,若网络中没有变化,则按通常的 30 秒间隔发送更新信息;若有变化,路由器就立即发其新的路由表。这个过程叫作触发更新。触发更新可提高稳定性。每一个路由器在收到有变化的更新信息时就立即发出新的信息,这比平均的 15 秒要少得多。虽然触发更新可大大地改进路由选择,但它不能解决所有的路由选择问题。例如,用这种方法不能处理路由器出故障的问题
  • (2) 分割范围,分割范围(split horizon)是提高稳定性的第二种方法(注:有不少人将 split horizon 译为"水平分割"。实际 ,这里 horizon 的意思是"范围",因此译为"分割范围"较为合适)。它在发送路由选择报文时使用了选择性,路由器必须区分不同的接口 。如果路由器从一个接口已经收到了到某个网络的路由更新信息,那么到这个同样网络的路由更新信息一定不能再通过这个接口回送过去。如果一个接口通过了给某一个路由器更新的信息,那么这个更新信息一定不能再发送回去。因为这是那个路由器已经知道了的信息,因而是不需要的。分割范围可明显地提高稳定性。图25就能说明问题。R1发送[Net1, 1, -]给 R2, 表明"我到 Net1 的距离是 1, 直接交付"。R2从这个 RIP 报文进来的端口不再发送关于到 Net1的信息,而只从另外的端口发送[Net1,2,R1] ,表明"我到 Net1 的距离是 2, 经过R1"。当Net1出故障后,R1发送[Net1 16, -]给 R2, 表明"我到 Net1 的距离是 16, 直接交付"
    (距离是 16 就表示不能到达)。R2从另外的端口发送[Net1, 16, R1] ,表明"我到 Net1 的距离是 16, 经过 R1"。这样就使其他路由器很快都知道 Net1出了故障。
    -(3) 毒性逆转,毒性逆转(poison reverse) 是分割范围的一种变形。使用这种方法时,路由器收到的信息用来更新路由表,然后通过所有的接口发送出去。但是,已经从一个接口来的一个路由表项目在通过同样的接口发送出去时,就要将其度量置为 16。


图25.

4-32 IP 数据报必须考虑最大传送单元 MTU (Maximum Transfer Unit) 。这是指哪一层的最大传送单元?包括不包括首部或尾部等开销在内?

这是指 IP 层下面的数据链路层的最大传送单元,也就是下面的 MAC 帧的数据字段,不包括 MAC 帧的首部和尾部的各字段。因为 IP 数据报是装入到 MAC 帧中的数据字段,因此数据链路层的 MTU 数值就是 IP 数据报所容许的最大长度(是总长度,即首部加上数据字段)。

4-33 如果一个路由器要同时连接在一个以太网和一个 ATM 网络上,需要有什么样的硬件加到路由器上?

需要有两个适配器,即一个以太网适配器(网卡)和一个 ATM 适配器(网卡)。

4-34 "交换(switching)" 的准确含义是什么?

这个名词并没有统一的精确定义。

根据[COME04](Computer Networks and Intenets with Internet Applications, 4ed, 2004)第676 页:

Switching: A general term used to describe the operation of a switch. Because it is associated with hardware, switching is usually higher speed than routing. Also, switching differs from routing because switching uses the hardware address in a frame.

(交换:用来描述交换机的运行的通用名词。由于交换与硬件相关,因此交换比路由选择要快些。此外,交换与路由选择还有一个区别,就是交换使用一个帧中的 MAC 地址。)

Switch:An electronic device that forms the center of a star topology network. A switch uses

the destination address in a frame to determine which computer should receive the frame.(交换机: 形成星形网络中心的一种电子设备。交换机使用一个帧中的目的地址来确定哪一个计算机将接收这个帧。)

英文单词 switch 本来是"开关"的意思。 switch 最初用在电话系统中时,就被译成了"交换机",而表示动作的 switching 被译为"交换"。因此,电话系统使用的交换体制就称为"电路交换"。

Perlman [PERLOO] 一书中的第 531 页也有类似的解释:Switch: Anything that moves data. Somehow the term is applied to imply that the device is fast and cheap. Can be a bridge (layer 2 switch) or router (layer 3 switch), or sometimes used for something that moves ATM cells. 。(交换机: 可移动数据的任何东西。不知是什么原因,这个名词用来暗示这种设备比较快和比较便宜。交换机可以是网桥(第二层交换机)或路由器(第三层交换机),有时也可以是

移动 ATM 信元的 ATM 交换机。)

可以看出, Perlman对switch 的定义比 Comer 的定义更广泛一些,因为 switch 在某些情况下还可以表示一个网桥或路由器,同时也不局限于用在星形网络中。现在需要注意的是 Packet switching 这一名词中的 switching 。大家知道, Packet switching的标准译名是"分组交换"。这里的"交换"完全是为了和电路交换的"交换"相对应的。分组交换的"交换"并没有"使用 MAC 地址"或"比路由选择更快"的含义,而只是一般地表示"可以将数据从一个地方移动到另一个地方"。

4-35 为什么生存时间 TTL (Time To Live)原来用秒作为单位,而现在 TTL 却表示数据报在网络中所能通过的路由器数的最大值?

最初 TTL 用秒作为单位,表示一个数据报在网络中的最长生存时间。 TTL 可用来防止数据报无限期地在网络中兜圈子(这样会浪费网络资源)。例如,把数据报的 TTL 初始值设置为 70 秒就表示:在该数据报进入网络后,只要经过 70 秒就要把它丢弃,哪怕它就快要到达目的站了。但后来发现这样做很不方便(互联网中没有时钟同步关系的路由器都要计算通过它的数据报在网络中的逗留时间),于是就改用另一种方法,即让 TTL 表示数据报在网络中所能够通过的路由器数的最大值。例如,把数据报的 TTL 初始值设置为 60 就表示:若该数据报在经过60 个路由器后还没有到达目的站,则最后到达的那个路由器就立即把这个数据报丢弃,使它不再占用网络资源。每一个路由器在转发数据报时,都应把数据报首部中的 TTL 值减1。若TTL 值减为零,就把它丢弃。因此,现在的 TTL 表示数据报在网络传送过程中的最大跳数。

4-36 有人认为,不使用 CIDR 也行。例如,使用 CIDR 时,给某单位分配了一个地址块/20, 相当于16个C类地址块。如果不使用 CIDR, 而直接给该单位分配 16个C类地址块,那么在效果上不是一样吗?

在效果上是不一样的!如果不采用 CIDR, 而直接给该单位分配 16个C 类地址块,那么就相当于给该单位分配了16个C类网络。这个单位对外界来说,是 16个C类网络。而每一个C类网络都要在本单位外面的路由表中占有一个表项,使得路由表更大了。当本单位内的许多主机相互通信时,由于跨越了不同的网络,因此都必须使用路由器来转发 IP 数据报。 可见由此造成的开销是很大的。因此,一般说来,这个单位不愿意接受 16 个C类地址块,而希望得到一个B类地址块(当然,这很难申请到)。实际上,一个B类地址块太大了。它相当于 256个C类地址块,而这个单位只需要 16个C类地址块,即只用到一个B 类地址块的 1/16 因此,对于只需要 16个C类地址块的单位,不应当给这个单位分配一个B类地址块,而是应当采用 CIDR 给这个单位分配一个地址块/20。

4-37 有一个IPv6的60位长的前缀是 12AB00000000CD3。下面有好几种不同的表示方法,请逐个指出是否正确。如不正确,请说明理由。

  • (a) 12AB:0:0:CD30:0:0:0:0/60
  • (b)12AB::CD30:0:0:0:0/60
  • © 12AB:0:0:CD30:: /60
  • (d) 12AB:0:0:CD30 /60
  • (e) 12AB::CD30 /60
  • (f) 12AB::CD3 /60

( a ),( b ) 和( c ) 都正确

  • (d) 错误。 12AB:0:0:CD30 /60 在斜线左边只给出了 64 位,而不是128 位。
  • (e) 错误。 12AB::CD30 /60 表示 12AB:0:0:0:0:0:CD30/60。
  • (f) 错误。 12AB::CD3 /60 表示 12AB:0:0:0:0:0:0:0CD3/60。

4-38 下面的说法是否正确?请给出简要的理由。

  • (a) 协议 BGP 是自治系统 AS 之间的路由选择协议,因此 AS 内部的路由器不需要使用 BGP。
  • (b) 路由器在收到 BGP 更新报文所通告的 BGP 路由后,必须向其所有的 BGP 连接的对等端转发收到的 BGP 路由。
  • © 路由器在收到 BGP 更新报文所通告的 BGP 路由后,如果按策略的规定进行转发,则应把本路由器所在的 AS 号添加在属性 AS-PATH 的前面。
    在效果上是
  • (a)错误。 BGP 的名称虽然是外部网关协议,但这并不表示在 AS 的内部不需要运行协议 BGP 。即使是 AS 内部每个 iBGP 连接上两端的路由器,都必须运行协议 BGP 。否则,AS 内部的路由器就无法知道要到其他 AS 去应当经过哪些 AS。
  • (b) 这样说是不准确的。路由器在收到 BGP 更新报文通告的 BGP 路由后,应根据已确定的策略,决定转发或删除所收到的 BGP 路由。因此不是"必须 转发。
  • © 这样说是不准确的。只有在 eBGP 连接上把 BGP 更新报文转发到另一个 AS 的路由器时,才把本路由器所在的 AS 号添加在属性 AS-PATH 的前面。

4-39 试简单解释这几个名词的意思: BGP、BGP 连接、 BGP 会话、 BGP 报文、 BGP路由。

BGP 是协议,是外部网关协议,为的是在不同自治系统 AS 之间找到一条较好的路径转发分组。

为了实现协议 BGP ,在路由器之间必须先建立 TCP 连接,以获得可靠的传输,这样的 TCP连接就叫作 BGP 连接。

4-40 为什么我们在讨论协议 BGP 时要使用自治系统 AS, 而不在每一个AS 中画出具体的路由器连接拓扑?

原因就是每一个自治系统 AS 内部的网络连接拓扑可能是非常复杂的, 实际上,一个大的 AS 里面有成千上万个网络前缀都是很常见的。有的 AS 还可能分散在不同的地理位置。在讲解协议 BGP 的工作原理时,因为协议 BGP 就是讨论整条路径要通过哪些 AS, 而不管 AS内部细节如何,所以我们就只从整体上看一个 AS。

4-41 BGP 路由中的 NEXT-HOP 与路由器转发表中的"下一跳"是同样的意思吗?

不是同样的意思。

路由器转发表中的"下一跳",一定是直接和该路由器相连接的一个路由器的 IP 地址,分组要转发到目的网络前缀的下一跳。在所有与内部网关协议有关的文档中,"下一跳"的英文都使用 next hop (小写)。但NEXT-HOP是BGP 的UPDATE (更新)报文的 BGP 路由中的一个属性,在 BGP 路由的有关文档中, NEXT-HOP 都使用大写(或记为 NEXT_HOP, 也有写成 Next Hop 的,但没有使用全部小写的) ,这就说明 BGP 路由中的属性 NEXT-HOP 是一个专用名词,虽然它有"下一跳"的意思,但有时并非通常意义上的"下一跳"。

例如,在图26(a) 中, AS1的R1向 AS2 的R2发送的UPDATE 报文中,属性 NEXT-HOP=138.1.1.1 。这个地址对R2来说,确实是下一跳的地址。但在图 26(b) 中, AS3的R2 向本 AS 的R3发送的 UPDATE 报文中,属性 NEXT-HOP=138.1.1.1, 仍然是R1的 IP 地址。但这个地址对R3来说,显然不是下一跳的地址。R3 如果把这个地址写入自己的转发表中,则无法进行分组的转发,这是因为 AS3 的转发表是根据内部网关协议得出的,而内部网关协议并不知道本 AS 以外的情况。因此,路由器 R3 还必须进行一些递归查找,才能知道到达子网 的下一跳地址。
 
图26.

4-42 IPv6 有链路本地地址,IPv4 有这样的地址吗?与IPv6 的情况完全相似吗?

IPv4 也有链路本地地址(link-local address) ,只是受篇幅限制,在教材中省略了这部分内容。 RFC 6890 规定把地址块 169.154.0.0/16 作为IPv4 的链路本地地址。这就是说,当一个主机无法从 DHCP 获得一个 IP 地址时,仍然可从上面这个地址块中获得一个随机生成的 IP地址 169.154 x.y (x和y 都是 0~255 之间的整数 )。 当然,这样的地址是不能上网的。互联网上所有的路由器都不转发具有这种地址的分组。因此,这种特殊地址只能在本地局域网(工作在链路层)中使用。这就是"链路本地"的意思。再强调一下,只要 DHCP 工作正常,能够给一个主机分配一个 IPv4 地址,这个主机就不会再生成一个链路本地地址。反之,如果某主机有一个 IPv4 链路本地地址,那么说明该主机所在的网络应当处于工作异常状态。

但IPv6 则不然。由于IPv6 的地址空间很大,因此 IPv6 对链路本地地址的处理方法不同。具体来说就是,只要主机一启动,其操作系统就自动生成一个IPv6 链路本地地址。虽然 IPv6的链路本地地址的网络前缀规定为 FE80::/10, 但实际上,这个地址的前 64 位中的后 54 位其实都是 0, 也就是说, IPv6 的链路本地地址的格式 定是下面所示的这样:
 
图27.

因此,IPv6 的链路本地地址的前缀又常常记为 FE80::/64, 也就是只用了标准给出的前缀的很小一部分。不过,后 64 位的生成方法现在并无统一的标准(因为毕竟这个地址仅仅在本地有效,路由器一律不转发这种地址的分组,所以似乎不必为此制订具体生成标准)。现在有两种方法生IPv6 链路本地地址。采用第1种方法的操作系统有 UNIX, Linux, Android和Cisco IOS。 具体的做法就是在48位MAC 地址的中间插入16位(FFFE) ,变为 64 位,这就构成了IPv6 链路本地地址的后一半。然后,对后 64 位中的第7位取反,即把0变成1或把1变成0。例如 MAC 地址是A8-e5-44-22-48-AC, 在其中间插入 FFFE 后变为:

复制代码
                A8-E5-44-FFFE-22-48-AC

在改为 IPv6 的记法,即在每 16 位之间用冒号分隔开,这样就变为:

复制代码
          A8E5:44FF:FE22:48AC

再对第7位取反, A8 (10101000) 就变为了 AA (10101010) 。因此,最后得出的 IPv6链路本地地址是: fe80: :aae5 :44ff:fe22:48ac 。这里使用了小写的英文字母,因为许多操作系统愿意使用小写英文字母来表示 IPv6 链路本地地址。

另一种方法是微软 Windows 操作系统所采用的 Windows 操作系统使用自己的算法来生

IPv6 链路本地地址。例如,某 Windows 10 主机得出的IPv6 链路本地地址是:

复制代码
                   fe80: acba: 15cc: 9a97: ed82
相关推荐
_F_y2 小时前
数据链路层
运维·服务器·网络
byte轻骑兵2 小时前
【安全函数】memmove_s ():C 语言内存安全迁移的守护者与 memmove 深度对比
c语言·开发语言·安全
HarrySunCn2 小时前
大夏龙雀DX-CT511N-B实战之路-第1步
前端·单片机·物联网·iot
怎么没有名字注册了啊2 小时前
VMware 完整版安装 Debian 纯命令行系统(无图形化、超详细全程教程)
linux·服务器·网络·数据库·debian
同聘云2 小时前
阿里云国际站gpu服务器能干什么?阿里云国际站gpu服务器怎么搭建?
服务器·阿里云·云计算
睿思达DBA_WGX2 小时前
Oracle 服务器 ORA-12516 错误的处理过程
服务器·数据库·oracle
colus_SEU2 小时前
【计算机网络笔记】第四章 网络层的数据平面
笔记·计算机网络
Howie Zphile2 小时前
TOMCAT跑死服务器,怎么限制TOMCAT使用资源
服务器·tomcat·firefox
就叫飞六吧2 小时前
常见服务器黑话/术语名称
运维·服务器