本章最重要的内容是:
网络层使用的是 IP 地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。但 IP 地址和下面的网络的硬件地址之间由于格式不同而不存在简单的映射关系。ARP 解决这个问题的方法是在主机 ARP 高速缓存中存放一个从 IP 地址到硬件地址的映射表,并且这个映射表还经常动态更新。
每一台主机都设有一个 ARP 高速缓存 (ARP cache),里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。主机怎样知道这些地址呢?
ARP 对保存在高速缓存中的每一个映射地址项目都设置生存时间 (如 10 ~ 20 分钟)。凡超过生存时间的项目就从高速缓存中删除掉。
注意:ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络中的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地把这个 IP 地址解析为链路层所需要的硬件地址。
既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么还要使用抽象的 IP 地址,而不直接使用硬件地址进行通信?
协议名 | ICMP | IGMP | IP | TCP | EGP | IGP | UDP | IPv6 | ESP | OSPF |
---|---|---|---|---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 4 | 6 | 8 | 9 | 17 | 41 | 50 | 89 |
在互联网上转发分组时,是从一个路由器转发到下一个路由器。
路由器是怎样转发分组的?
路由表指出到某个网络应如何转发,每个路由器中的路由表中的每一行对应于一个网络。
在路由表中,对每一条路由最主要的是两个信息:
(目的网络地址,下一跳地址)
互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下允许有特例,即对特定的目的主机指明一个路由。这种路由叫做特定主机路由。
路由器还可采用默认路由 (default route) 以减小路由表所占用的空间何搜索路由表所用的时间。
在 IP 数据报的首部写上的 IP 地址是源 IP 地址何目的 IP 地址,没有中间经过的路由器的 IP 地址。那么待转发的数据报怎样能够找到下一跳路由器呢?
当路由器收到一个待转发的数据报,在从路由表得出下一跳路由器的 IP 地址后,把这个地址送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的 IP 地址转换成硬件地址 (使用 ARP),将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。
分组转发算法:
4-01 网络层向上提供的服务有哪两种?试比较其优缺点。
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点的时间不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
4-02 网络互连有何实际意义?进行网络互连时,有哪些共同的问题需要解决?
由于参加互连的计算机网络都使用相同的网际协议 IP,因此可以把互连以后的计算机网络看成一个虚拟互连网络。
所谓虚拟互连网络也就是逻辑互连网络,它的意思是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用 IP 协议的虚拟互连网络可简称为 IP 网 (IP 网是虚拟的)。
使用 IP 网的好处是:当 IP 网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节 (如具体的编址方案、路由选择协议等)。
如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。互联网可以由多种异构网络互连组成。
有关 IP 最重要的文档是互联网的正式标准 RFC 791。
4-03 作为中间设备,转发器、网桥、路由器和网关有何区别?
当中间设备是转发器或网桥时,这仅仅是把一个网络扩大了,而从网络层的角度看,这仍然是一个网络,一般并不称之为网络互连。
网关由于比较复杂,目前使用得较少。
现在讨论网络互连时,都是指用路由器进行网络互连和路由选择。路由器其实就是一台专用计算机,用来在互联网中进行路由选择。
4-04 试简单说明下列协议的作用:IP,ARP,RARP 何 ICMP。
4-05 IP 地址分为几类?各如何表示?IP 地址的主要特点是什么?
整个的互联网就是一个单一的、抽象的网络。IP 地址是给互联网上的每一台主机 (或路由器) 的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符。
IP 地址现在由互联网名字和数字分配机构 ICANN 进行分配。
IP 地址的编制方法:
“分类的 IP 地址”是将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个字段是网络号 (net-id),它标志主机 (或路由器) 所连接到的网络。第二个字段是主机号 (host-id),它标志该主机 (或路由器)。一个 IP 地址在整个互联网范围内是唯一的。
IP 地址 ::= { <网络号>, <主机号>}
A 类、B 类和 C 类地址都是单播地址 (一对一通信),是最常用的。
由于近年来已经广泛使用无分类 IP 地址进行路由选择,A 类、B 类和 C 类地址的区分已成为历史。
为了便于书写,可使用点分十进制记法 (dotted decimal notaion) 表示 IP 地址。
IP 地址具有一些重要特点:
当两个路由器直接相连时 (例如通过一条租用线路),在连线两端的接口处,可以分配也可以不分配 IP 地址。如分配了 IP 地址,则这一段连线就构成了一种只包含一段线路的特殊“网络”。但为了节省 IP 地址资源,对于这种特殊“网络”,现在也常常不分配 IP 地址。通常把这样的特殊网络叫做无编号网络 (unnumbered network) 或无名网络 (anonymous network)。
4-06 试根据 IP 地址的规定,计算出表 4-2 中的各项数据。
表 4-2 IP 地址的指派范围
网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中的最大主机数 |
---|---|---|---|---|
A | 126 ( 2 7 − 2 ) (2^7-2) (27−2) | 1 | 126 | 16777214 ( 2 24 − 2 2^{24}-2 224−2) |
B | 16383 ( 2 14 − 1 ) (2^{14}-1) (214−1) | 128.1 | 191.255 | 65534 ( 2 14 − 1 2^{14}-1 214−1) |
C | 2097151 ( 2 21 − 1 ) (2^{21}-1) (221−1) | 192.0.1 | 223.255.255 | 254 ( 2 8 − 2 2^8-2 28−2) |
表 4-3 一般不使用的特殊 IP 地址
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | √ | × | 在本网络上的本主机 |
0 | host-id | √ | × | 在本网络上的某台主机 host-id |
全 1 | 全 1 | × | √ | 只在本网络上进行广播 (各路由器均不转发) |
net-id | 全 1 | × | √ | 对 net-id 上的所有主机进行广播 |
127 (即 01111111) | 非全 0 或全 1 的任何数 | √ | √ | 用于本地软件环回测试 (loopback test) |
4-07 试说明 IP 地址与硬件地址的区别。为什么要使用这两种不同的地址?
从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP 地址是网络层和以上各层使用的地址,是一种逻辑地址 (称 IP 地址为逻辑地址是因为 IP 地址是用软件实现的)。
IP 地址放在 IP 数据报的首部,硬件地址放在 MAC 帧的首部。
尽管互连在一起的网络的硬件地址体系各不相同,但IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或路由器之间的通信。
4-08 IP 地址方案与我国的电话号码体制的主要不同点是什么?
IP 地址分为网络号和主机号,它不反映有关主机地理位置的信息。而电话号码反映有关电话的地理位置的信息。
我国电话号码体制是按照行政区域划分的层次结构,同一地域的电话号码有相同的若干位前缀。
4-09 (1) 子网掩码为 255.255.255.0 代表什么意思?
(2) 一个网络的现在掩码为 255.255.255.248,问该网络能够连接多少台主机?
(3) 一个 A 类网络何一个 B 类网络的子网号 subnet-id 分别为 16 个 1 和 8 个 1,问这两个网络的子网掩码有何不同?
(4) 一个 B 类地址的子网掩码是 255.255.240.0。试问在其中每一个子网上的主机数最多是多少?
(5) 一个 A 类网络的子网掩码 255.255.0.255,它是否为有效的子网掩码?
(6) 某个 IP 地址到达十六进制表示是 C2.2F.14.81,试将其转换为点十进制的形式。这个地址是哪一类 IP 地址?
(7) C 类网络使用子网掩码有无实际意义?为什么?
解:(1) C 类地址对应的子网掩码默认值。也可以是 A 类或 B 类地址的掩码,即主机号由最后 8 位决定,而路由器寻找网络由前 24 位决定。
(2) 248 的二进制为 1111 1000。主机号由最后 3 位决定。
连接主机台数为 2 3 − 2 = 6 2^3-2 = 6 23−2=6 台。
(3) 子网掩码一样,但子网数目不同。子网掩码均为 255.255.255.0。
子网数目分别为 2 16 − 2 = 65534 2^{16}-2 = 65534 216−2=65534 个, 2 8 − 2 = 254 2^8-2 = 254 28−2=254 个。除去全 1 和全 0 两种情况。
(4) 240 的二进制为 1111 0000。主机号由最后 12 位决定。
每个子网的主机数最多是 2 12 − 2 = 4094 2^{12}-2 = 4094 212−2=4094 个。
(5) 有效,但不推荐这样使用。
(6) 点十进制形式:194.47.20.129。这是 C 类 IP 地址。
(7) 有。对于小网络这样做还可进一步简化路由表。
4-10 试辨认以下 IP 地址的网络类别:
(1) 128.36.199.3
(2) 21.12.240.17
(3) 183.194.76.253
(4) 192.12.69.248
(5) 89.3.0.1
(6) 200.3.6.2
解:(2) 和 (5) 是 A 类地址。(1) 和 (3) 是 B 类地址。(4) 和 (6) 是 C 类地址。
IP 地址类型 | 范围 |
---|---|
A | 0.0.0.0 ~ 127.255.255.255 |
B | 128.0.0.0 ~ 191.255.255.255 |
C | 192.0.0.0 ~ 223.255.255.255 |
D | 224.0.0.0 ~ 239.255.255.255 |
E | 240.0.0.0 ~ 247.255.255.255 |
4-11 IP 数据报中的首部检验何并不检验数据报中数据。这样做的最大好处是什么?坏处是什么?
好处:转发分组更快。
缺点:数据部分出现差错时不能及早发现。
4-12 当某个路由器发现一 IP 数据报的检验和有差错时,为什么采取丢弃的办法而不是要求源站重传此数据报?计算首部检验和为什么不采用 CRC 检验码?
IP 首部中的源地址也可能变成错误的,请错误的源地址重传数据报是没有意义的。
不使用 CRC 可减少路由器进行检验的时间。
4-13 设 IP 数据报使用固定首部,其各字段的具体数值如图 4-65 所示 (除 IP 地址外,均为十进制表示)。试用二进制运算方法计算应当写入到首部检验和字段中的数值 (用二进制表示)。
01000101 00000000
00000000 00011100
00000000 00000001
00000000 00000000
00000100 00010001
00001010 00001100 # 10.12
00001110 00000101 # 14.5
00001100 00000110 # 12.6
00000111 00001001 # 7.9
——————————————————————
01110100 01001110 # 反码运算求和
——————————————————————
10001011 10110001 # 取反码
写入到首部检验和字段中的数值为 10001011 10110001
4-14 重新计算上题,但使用十六进制运算方法 (每 16 位二进制数字转换为 4 个十六进制数字,再按十六进制加法规则计算)。比较这两种方法。
45 00
00 1C
00 01
00 00
04 11
0A 0C # 10.12
0E 05 # 14.5
0C 06 # 12.6
07 09 # 7.9
——————————————————————
74 4E # 反码运算求和
01110100 01001110 # 转换为二进制
——————————————————————
10001011 10110001 # 取反码
8B B1 # 转换为十六进制
4-15 什么是最大传送单元 MTU?它和 IP 数据报首部中的哪个字段有关系?
在 IP 层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元 MTU (Maximum Transfer Unit)。例如,最常用的以太网就规定其 MTU 值是 1500 字节。
当一个 IP 数据报封装成链路层的帧时,此数据报的总长度一定不能超过下面的数据链路层所规定的 MTU 值。
若传送的数据报长度超过数据链路层的 MTU 值,就必须把过长的数据报进行分片处理。
在进行分片时 (见“片偏移”字段),数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
4-16 在互联网中将 IP 数据报分片传送的数据报在最后的目的主机进行组装。还可以有另一种做法,即数据报片通过一个网络就进行一次组装。试比较这两种方法的优劣。
在目的站而不是在中间的路由器进行组装是由于:
4-17 一个 3200 位长的 TCP 报文传到 IP 层,加上 160 位的首部后成为数据报。下面的互联网由两个局域网通过路由器连接起来,但第二个局域网所能传送的最长数据帧中的数据部分只有 1200 位,因此数据报在路由器必须进行分片。试问第二个局域网向其上层要传送多少比特的数据 (这里的“数据”当然指的是局域网看见的数据)?
解:IP 数据报片的数据部分的长度最长为 1040 位,故要分成 4 个数据报片,即要加上 4 个首部。
所以第二个局域网向其上层传送的数据是 3200 + 160 × 4 = 3840 比特。
4-18 (1) 有人认为:“ARP 协议向网络层提供了转换地址的服务,因此 ARP 应当属于数据链路层。”这种说法为什么是错误的?
(2) 试解释为什么 ARP 高速缓存每存入一个项目就要设置 10 ~ 20 分钟的超时计时器。这个时间设置得太大或太小会出现什么问题?
(3) 举出至少两种不需要发送 ARP 请求分组的情况 (即不需要请求将某个目的 IP 地址解析为相应的硬件地址)。
解:(1) 不能说“ARP 向网络层提供了服务”,因为 ARP 本身是网络层的一部分 (但 IP 使用 ARP)。数据链路层使用硬件地址而不使用 IP 地址,因此 ARP 不在数据链路层。
(2) 当网络中某个 IP 地址和硬件地址的映射发生变化时,ARP 高速缓存中的相应的项目就要改变。例如,更换以太网网卡就会发生这样的事件。10 ~ 20 分钟更换一块网卡是合理的。超时时间太短会使 ARP 请求和响应分组的通信量太频繁,而超时时间太长会使更换网卡后的主机迟迟无法和网络上的其他主机通信。
(3) 在源主机的 ARP 高速缓存中已经有了该目的 IP 地址的项目;源主机发送的是广播分组;源主机和目的主机使用点对点链路。
4-19 主机 A 发送 IP 数据报给主机 B,途中经过了 5 个路由器。试问在 IP 数据报的发送过程中总共使用了几次 ARP?
解:6 次。主机用一次,每一个路由器各使用一次。
4-20 设某路由器建立了如下路由表:
目的网络 | 子网掩码 | 下一跳 |
---|---|---|
128.96.39.0 | 255.255.255.128 | 接口 m0 |
128.96.39.128 | 255.255.255.128 | 接口 m1 |
128.96.40.0 | 255.255.255.128 | R 2 R_2 R2 |
192.4.153.0 | 255.255.255.192 | R 3 R_3 R3 |
* (默认) | – | R 4 R_4 R4 |
现共收到 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) 128.96.39.10 AND 255.255.255.128 = 128.96.39.0,与第一行的目的网络一致,故下一跳是接口 m0。
(2) 128.96.40.12 AND 255.255.255.128 = 128.96.40.0,与第三行目的网络一致,故下一跳是 R 2 R_2 R2。
(3) 将目的地址与路由表中每一行的子网掩码相“与”,得出的网络与路由表中的目的网络都不相等,故下一跳是 R 4 R_4 R4。
(4) 192.4.153.17 AND 255.255.255.192 = 192.4.153.0,与第四行目的网络一致,故下一跳是 R 3 R_3 R3。
(5) 将目的地址与路由表中每一行的子网掩码相“与”,得出的网络与路由表中的目的网络都不相等,故下一跳是 R 4 R_4 R4。
4-21 某单位分配到一个 B 类 IP 地址,其 net-id 为 129.250.0.0。该单位有 4000 台机器,平均分布在 16 个不同的地点。如选用子网掩码为 255.255.255.0,试给每一个地点分配一个子网号码,并算出每个地点主机号码的最小值和最大值。
解:4000 / 16 = 250,即每个地点平均有 250 台机器。
最多子网个数为 2 8 − 2 = 254 ≥ 16 2^8-2 = 254 \ge 16 28−2=254≥16,每个子网的主机数最多为 2 8 − 2 = 254 ≥ 250 2^8-2 = 254 \ge 250 28−2=254≥250,能满足实际需求。
地点 | 子网号码 | 主机号码的最小值 | 主机号码的最大值 |
---|---|---|---|
1 | 129.250.1.0 | 129.250.1.1 | 129.250.1.254 |
2 | 129.250.2.0 | 129.250.2.1 | 129.250.2.254 |
3 | 129.250.3.0 | 129.250.3.1 | 129.250.3.254 |
4 | 129.250.4.0 | 129.250.4.1 | 129.250.4.254 |
5 | 129.250.5.0 | 129.250.5.1 | 129.250.5.254 |
6 | 129.250.6.0 | 129.250.6.1 | 129.250.6.254 |
7 | 129.250.7.0 | 129.250.7.1 | 129.250.7.254 |
8 | 129.250.8.0 | 129.250.8.1 | 129.250.8.254 |
9 | 129.250.9.0 | 129.250.9.1 | 129.250.9.254 |
10 | 129.250.10.0 | 129.250.10.1 | 129.250.10.254 |
11 | 129.250.11.0 | 129.250.11.1 | 129.250.11.254 |
12 | 129.250.12.0 | 129.250.12.1 | 129.250.12.254 |
13 | 129.250.13.0 | 129.250.13.1 | 129.250.13.254 |
14 | 129.250.14.0 | 129.250.14.1 | 129.250.14.254 |
15 | 129.250.15.0 | 129.250.15.1 | 129.250.15.254 |
16 | 129.250.16.0 | 129.250.16.1 | 129.250.16.254 |
4-22 一个数据报长度为 4000 字节 (固定首部长度)。现在经过一个网络传送,但此网络能够传送的最大数据长度为 1500 字节。试问应当划分为几个短些的数据报片?各数据报片的数据字段长度、片偏移字段和 MF 标志应为何数值?
解:固定首部长度为 20 字节,故数据部分长度为 3980 字节,每个数据报片的数据部分长度不超过 1480 字节。应当划分为 3 个数据报片。
总长度 (字节) | 数据字段长度 (字节) | MF | 片偏移 | |
---|---|---|---|---|
原始数据报 | 4000 | 3980 | 0 | 0 |
数据报片 1 | 1500 | 1480 | 1 | 0 |
数据报片 2 | 1500 | 1480 | 1 | 185 (2480/8) |
数据报片 3 | 1040 | 1020 | 0 | 370 (2960/8) |
4-46 试把下列 IPv4 地址从二进制记法转换为点分十进制记法。
(1) 10000001 00001011 00001011 11101111
(2) 11000001 10000011 00011011 11111111
(3) 11100111 11011011 10001011 01101111
(4) 11111001 10011011 11111011 00001111
解:(1) 129.11.11.239
(2) 193.131.27.255
(3) 231.219.139.111
(4) 249.155.251.15
4-47 下列 IPv4 地址是否有错误?如有,请指出。
(1) 111.56.045.78
(2) 221.34.7.8.20
(3) 75.45.301.14
(4) 11100010.23.14.67
解:(1) 在点分十进制记法中不应当有以 0 开头的数 (045)。
(2) IPv4 地址不能超过 4 个字节。
(3) 每个字节必须小于或等于 255,而 301 超过了这个范围。
(4) 二进制记法和点分十进制记法混合使用是不允许的。
4-48 假设一段地址的首地址为 146.102.29.0,末地址为 146.102.32.255,求这个地址段的地址数。
解:146.102.29.0 ~ 146.102.29.0 范围内有 256 个地址。
这个地址段的地址数为 4 × 256 = 1024 4 \times 256 = 1024 4×256=1024 个。
4-49 求下列每个地址的类别。
(1) 00000001 00001011 00001011 11101111
(2) 11000001 10000011 00011011 11111111
(3) 10100111 11011011 10001011 01101111
(4) 11110011 10011011 11111011 00001111
解:(1) A 类 (2) C 类 (3) B 类 (4) E 类
4-50 求下列每个地址的类别。
(1) 227.12.14.87
(2) 193.14.56.22
(3) 14.23.120.8
(4) 252.5.15.111
解:(1) D 类 (2) C 类 (3) A 类 (4) E 类
【计算机网络 (谢希仁) 习题题解】目录