Tanenbaum 计算机网络 5e 习题及解答
本文最后更新于 2025年8月14日 星期四 16:49
Tanenbaum AS, Wetherall DJ. 计算机网络(第 5 版). 清华大学出版社, 2012.
第 1 章:引言
1.3. 客户机-服务器系统的性能受到两个网络因素的严重影响:网络的带宽(即,网络每秒可以传输多少位数据)和延迟(即,将第一个数据位从客户端传送到服务器端需要多少时间)。请给出一个网络例子,它具有高带宽,但也有高延迟。然后再给出另一个网络例子,它具有低带宽和低延迟。
(1)一条跨洲际的光纤链路可能有很高的 Gbps 带宽,但由于光在数千公里的传播距离上的速度,延迟也会很高。
(2)一个拨号速度为 56 kbps 的调制解调器呼叫同一建筑内的计算机具有低带宽和低延迟。
1.4. 除了带宽和延迟以外,网络若要为下列流量提供很好的服务质量,试问还需要哪个参数?(1)数字语音流量;(2)视频流量;(3)金融业务流量。
(1)语音和(2)视频都需要统一的传输时间,因此网络中的抖动量很重要,即传输时间的标准偏差。要保证清晰度,对于使用语音或视频来进行交流的用户,提供对应的流量服务应该注意画面和视频的清晰流畅。短延迟但可变性大,实际上比稍长的延迟和低可变性更糟糕。
(3)对于金融交易流量,可靠性和安全性非常重要。
1.5. 在存储-转发数据包交换系统中,衡量延迟的一个因素是数据包在交换机上存储和转发需要多长时间。假设在一个客户机-服务器系统中,客户机在纽约而服务器在加州,如果交换时间为 10 微秒,试问交换时间是否会成为影响延迟的一个主要因素?假设信号在铜线和光纤中的传播速度是真空光速的 2/3。
不对。传播速度是 200000 km/s,即 0.2 km/μs。在 10 μs 内,信号可以传播 2 km。因此,每个交换机会增加相当于 2 km 的额外电缆长度。如果客户端和服务器相隔 5000 km,即使穿过 50 个交换机,总路径只增加 100 km,仅占总距离的 2%。因此,在这种情况下,交换延迟并不是主要因素。
1.10. 试问使用层次协议的两个理由是什么?使用层次协议的一个可能缺点是什么?
理由:
① 将设计问题分解为更小、更易管理的部分。
② 可以更改协议而不影响更高或更低层的协议。
缺点:
分层系统的性能可能会比单体系统的性能差,尽管实现和管理单体系统非常困难。
1.11. Specialty Paint 公司的总裁打算与一个本地的啤酒酿造商合作生产一种无形啤酒罐(作为防止乱扔垃圾的一种措施)。总裁告诉她的法律部门调研此事,后者又请工程部帮忙。结果总工程师打电话给啤酒酿造公司讨论该项目的技术问题。然后两位工程师又各自向他们的法律部门作了汇报。然后,法律部门通过电话安排了有关的法律方面的事宜。最后,两位公司总裁讨论了这次合作在经济方面的问题。试问这个通信机制违反了 OSI 模型意义上的哪个多层协议原则?
在 OSI 模型中,物理通信只发生在最低层,而不是每一层。
1.12. 两个网络都可以提供可靠的面向连接的服务。其中一个提供可靠的字节流,另一个提供可靠的报文流。试问这两者是否相同?如果你认为相同,为什么要有这样的区别?如果不相同,请给出一个例子说明它们如何不同。
消息流和字节流是不同的。在消息流中,网络会跟踪消息的边界,而在字节流中不会。举个例子,假设一个进程向连接写入了 1024 字节,然后稍后又写入了另外 1024 字节。接收方随后进行了一个读取操作,读取了 2048 字节。在消息流中,接收方将得到两个消息,每个消息为 1024 字节。而在字节流中,消息边界并不重要,接收方将会将整个 2048 字节作为一个单独的单元接收。原先存在的两个不同消息的事实将会丢失。
1.14. 图 1-19 显示了一个服务。试问该图是否还隐含着其他的服务?如果有的话,在哪里?如果没有的话,说明为什么没有。

所示的服务是第 \(k\) 层向第 \(k+1\) 层提供的服务。还必须存在另一个服务,即在第 \(k\) 层下方,即底层第 \(k-1\) 层向第 \(k\) 层提供的服务。
1.16. 一个系统具有 \(n\) 层协议。应用层产生长度为 \(M\) 字节的报文,在每一层加上长度为 \(h\) 字节的报文头。试问报文头所占的网络带宽比例是多少?
在具有 \(n\) 层和每层添加 \(h\) 字节的情况下,每个消息的总头字节数为 \(nh\),因此报文头占用的空间为 \(nh\)。总消息大小为 \(M+nh\),因此报文头占用的带宽比例为 \(\frac{nh}{M + nh}\)。
1.17. 试问 TCP 和 UDP 的主要不同是什么?
TCP 是面向连接的,而 UDP 是无连接的服务。
1.20. 当在两台计算机之间传输一个文件时,可以采用两种不同的确认策略。在第一种策略中,该文件被分解成许多个数据包,接收方独立地确认每一个数据包,但没有对整个文件进行确认。在第二种策略中,这些数据包并没有被单独地确认,但是当整个文件到达接收方时会被确认。请讨论这两种方案。
如果网络倾向于丢失数据包,最好是单独确认每个数据包,这样可以重新传输丢失的数据包。另一方面,如果网络非常可靠,在整个传输过程最后发送一个确认可以在正常情况下节省带宽(但如果有任何一个数据包丢失,需要重新传输整个文件)。
1.23. 一幅图像的分辨率为 \(1024\times 768\) 像素,每个像素用 3 字节表示。假设该图像没有被压缩。试问,通过 56 kbps 的调制解调器传输这幅图像需要多长时间?通过 1 Mbps 的线缆调制解调器呢?通过 10 Mbps 的以太网呢?通过 100 Mbps 的以太网呢?
该图像的大小为 \(1024\times 768\times 3 = 2359296\) 字节 = 18874368 比特。以 56 kbps 的速度传输,大约需要 337.042 秒。以 1 Mbps 的速度传输,大约需要 18.874 秒。以 10 Mbps 的速度传输,大约需要 1.887 秒。以每秒 100 Mbps 位的速度传输,大约需要 0.189 秒。
1.25. 请分别列出网络协议国际标准化后的两个优点和缺点。
优点:
① 如果每个人都使用相同的标准,每个人都可以互相通信。
② 广泛使用任何标准都会带来规模经济效益,就像应用于 VLSI 芯片一样。
缺点:
① 为了实现标准化,需要进行政治妥协,这往往会导致低质量的标准。
② 一旦一个标准被广泛采用,即使发现了新的更好的技术或方法,也很难改变。而且,等到标准被接受的时候,它可能已经过时了。
1.27. 假设实现第 \(k\) 层操作的算法发生了变化。试问这会影响到第 \(k-1\) 和第 \(k+1\) 层的操作吗?
这对第 \(k-1\) 层或第 \(k+1\) 层的操作没有影响。
1.28. 假设由第 \(k\) 层提供的服务(一组操作)发生了变化。试问这会影响第 \(k-1\) 层和第 \(k+1\) 层的服务吗?
在第 \(k-1\) 层没有影响,但是第 \(k+1\) 层的操作必须重新实现。
1.补 1. 请解释封装及过程。
封装是指在发送方发生的自上而下的过程。封装在每一层为应用数据添加上特定的头部尾部信息(PDU)。其过程如下:
Application(应用程序)→ segment(数据段)→ packet(数据包)→ frame(数据帧)→ bit(比特流)。
按 OSI 七层模型,具体可分为五个步骤:
a、创建数据。(应用层、表示层、会话层)
b、数据分段,加上 TCP 或 UDP 包头。(传输层)
c、分段后的数据打包,加上 IP 包头。(网络层)
d、成帧。打包后的数据加上帧头和帧尾——就是在包前加上本地 MAC 地址,在包后加上 CRC。(数据链路层)
e、帧被转换为 BIT,以便于物理介质上传输。(物理层)
1.补 2. 请解释对等通信(虚拟通信)。
对等通信即虚拟通信。其基本思想是:一段(或块)专门的软件(或者硬件)向用户提供一种服务,但是将内部状态和算法的细节隐藏起来。
一台机器上的第 \(N\) 层与另一台机器上的第 \(N\) 层进行对话,要使用第 \(N\) 层协议。实际上数据并不是从一台机器的第 \(N\) 层直接传到另一台机器的第 \(N\) 层,而是每一层都将数据和控制信息传递给它的下一层,这样一直传递到最底下的层。最底层的下面是物理介质,通过它进行实际通信。这就是虚拟通信和实际通信的关系。
利用对等进程的思想,在设计完整个网络时,可以把难以管理的任务划分成几个较小的、易于处理的设计问题,以降低网络设计的复杂性。
第 2 章:物理层
2.2. 每 1 毫秒对一条无噪声 4 kHz 信道采样一次。试问最大数据传输率是多少?如果信道上有噪声,且信噪比是 30 dB,试问最大数据速率该如何变化?
无噪声信道:对于 \(B=4\) kHz = 4000 Hz 的无噪声信道,每秒采样 \(2\times 4000=8000\) 次。
如果每个采样点是 16 位,那么该信道最大数据传输率 16 b \(\times\) 8000/s = 128 kbps。
如果每个采样点是 1024 位,那么该信道最大数据传输率 1024 b \(\times\) 8000/s = 8.192 Mbps。
如果信道上有噪声:若信噪比为 30 dB,则 \(S/N=1000\)。因此,由香农定理得最大数据速率 \(=B\log_2(1+S/N) = 4\log_2 1001 = 39.8689\) kbps.
2.3. 电视信道宽 6 MHz。如果使用 4 级数字信号,试问每秒可以发送多少个比特?假设电视信道为无噪声的。
由题得,\(B\) = 6 MHz,\(V\) = 4,则奈奎斯特定律最大传输速率 \(= 2B\log_2 V = 2\times 6\times\log_2 4=24\) Mbps。
2.4. 如果在一条 3 kHz 的信道发送一个二进制信号,该信道的信噪比为 20 dB,试问可达到的最大数据率为多少?
信噪比为 20 dB,则 \(S/N=100\)。香农定理最大速率 \(= B\log_2(1+S/N) = 3\log_2 101 = 19.975\) kbps。奈奎斯特定律的限制是 \(2B = 2\times 3\) kbps = 6 kbps,所以实际可达到的最大数据率为 6 kbps。
2.5. 试问在 50 kHz 的线路上使用 T1 载波需要多大的信噪比?
发射 T1 载波,我们需要满足 \(B\log_2(1 + S/N) = 50000\log_2(1+S/N)=1.544\times 10^6\) bps,计算得出 \(S/N = 1976087932\),则 \(\log_{10}(S/N)=\log_{10}1976087932\approx 9.2958\),约为 93 dB。
2.6. 试问光纤作为传输介质,相比铜线有什么优势?是否存在不足?
光纤相对于铜线有许多优势。它可以处理比铜线高得多的带宽。光纤不受电力浪涌、电磁干扰、电力故障或空气中的腐蚀性化学物质的影响。它不会泄漏光,而且非常难以窃听。最后,它又薄又轻,因此安装成本大大降低。
但是,使用光纤相对于铜线也存在一些缺点。首先,光纤容易因过度弯曲而受损。其次,光通信是单向的,因此需要两根光纤或一根光纤上的两个频段进行双向通信。最后,光纤接口的成本高于电接口。
2.18. 一个简单的电话系统包括端局和一个长途局,每个端局通过一条 1 MHz 的全双工中继线连接到长途局。在每 8 个小时的工作日中,平均每部电话发出 4 次呼叫,每次呼叫平均持续 6 分钟,并且 10% 的呼叫是长途(即通过长途局)。试问端局最多能支持多少部电话(假设每条电路为 4 kHz)?请解释为什么电话公司决定支持的电话数要少于端局的最大电话数?
每部电话每小时拨打 0.5 通电话,每通电话通话时长为 6 分钟。因此,一部电话每小时占用电路 3 分钟。20 部电话可以共享一条线路,尽管负载接近 100%(在排队术语中,\(\rho = 1\))意味着非常长的等待时间。由于 10% 的电话是长途电话,需要 200 部电话全天占用长途局。室内互联干线上有 250 个线路多路复用。每条线路支持 200 部电话,一个端局可以最大支持 \(200\times 250 = 50000\) 部电话。
支持最大电话数可能会导致相当长的等待时间。例如,如果有 5000 名用户(50000 的 10%)决定同时打长途电话,每通电话持续 3 分钟,最坏情况下的等待时间将达到 57 分钟。所以,电话公司决定支持的电话数要少于端局的最大电话数。
2.22. 某个调制解调器星座图有以下几个数据点:(1,1)、(1,-1)、(-1,1) 和 (-1,-1)。试问一个具备这些参数的调制解调器以 1200 符号/秒的速率能获得多少 bps?
每波特有四个合法数值,因此比特率是波特率的两倍。以 1200 符号/秒为例,比特率为 \(1200\times 2=2400\) bps。
2.23. 如果波特率是 1200 并且不需要差错检测,试问 V.32 标准调剂解调器能达到的最大比特率是多少?
由于有 32 个符号,可以编码 5 位。在 1200 波特下,这提供了 \(5\times 1200 = 6000\) bps 的最大比特率。
2.25. 有 10 个信号,每个需要 4000 Hz 带宽,现在用 FDM 将它们复用在一条信道上。试问对于被复用的信道,需要的最小带宽是多少?假设保护带为 400 Hz 宽。
有 10 个 4000 Hz 信号。我们需要 9 个保护带来避免任何干扰。所需的最小带宽为 \(4000\times 10 + 400 \times 9 = 43600\) Hz。
2.26. 试问为什么 PCM 采样时间被设置为 125 微秒?
一个采样时间为 125 微秒对应于每秒 8000 次采样。根据奈奎斯特定理,这是捕捉 4 kHz 信道中的所有信息所需的采样频率,例如电话信道。实际上,名义带宽略小一些,但截止频率不是很明显的。
2.27. 试问 T1 载波的百分比开销是多少?也就是说,1.544 Mbps 中有百分之多少没有给端用户使用?OC-1 或 OC-768 线路的百分比开销又是多少?
T1 载波的百分比开销为 \(\frac{24+1}{193} = 13\%\)。OC-1 中的百分比开销为 \(\frac{51.84 - 49.536}{51.84} = 4.44\%\);OC-768 中的百分比开销为 \(\frac{39813.12 - 38043.648}{39813.12} = 4.44\%\)。
2.28. 若将无噪声的 4 kHz 信道用于下面的用途,请比较它们的最大数据传输率:
(a)每个样值 2 比特的模拟编码(比如 QPSK)
(b)T1 PCM 系统
根据奈奎斯特定律,无噪声的 4 kHz 信道可以实现每秒 8000 次采样。使用每个样值 2 比特的模拟编码,每个采样点发送 2 比特,最大数据传输率为 \(8\times 2=16\) kbps。使用 T1,每个周期发送 7 位,最大数据传输率为 \(8\times 7=56\) kbps。
2.30. 试问调制解调器的解调部分与编码解码器的编码部分有没有区别?如果有的话,区别是什么?(毕竟两者都将模拟信号转换成数字信号)
编码器接受任意的模拟信号并从中生成数字信号。解调器只接受调制后的正弦波并生成数字信号。
2.34. OC-3 用户的数据传输率规定为 148.608 Mbps。试问该数值是如何从 SONET OC-3 的参数得出的。对 OC-3072 线路来说,SPE 和用户数据率是多少?
在 OC-1 中,有 90 个列,其中 86 个列可用于用户数据。因此,用户容量为 \(86\times 9 = 774\) 字节/帧。每字节 8 位,每秒 8000 帧,三个 OC-1 载波多路复用在一起,总用户容量为 \(3 \times 774 \times 8 \times 8000\),即 148.608 Mbps。对于 OC-3072 线路:
总数据速率 \(= 51.84 \times 3072 = 159252.48\) Mbps。
SPE 数据速率 \(= 50.112 \times 3072 = 153944.064\) Mbps。
用户数据速率 \(= 49.536 \times 3072 = 152174.592\) Mbps。
2.36. 试问一个 OC-12c 连接的用户可用带宽是多少?
对于 OC-12c,帧由 \(12 \times 90 = 1080\) 列和 9 行组成。其中 有 \(12 \times 3 = 36\) 列被用于线路和段开销。这留下了 1044 列用于 SPE 数据。每个 SPE 列中有 1 列用于路径开销,因此有 1043 列用于用户数据。每列可容纳 8 位的 9 字节数据,因此 OC-12c 帧容纳 75096 位的用户数据。每秒有 8000 帧,因此用户数据速率为 600.768 Mbps。
2.38. 比较在一个电路交换网络和一个(负载较轻)包交换网络中,沿着 \(k\) 跳路径发送一个 \(x\) 位长度消息的延迟。假设电路建立时间为 \(s\) 秒,每一跳的传播延迟为 \(d\) 秒,数据包的大小为 \(p\) 位,数据传输率为 \(b\) bps。试问在什么条件下数据包网络的延迟比较短?
在电路交换中,在 \(t = s\) 时建立电路,在 \(t = s + x / b\) 时发送最后一个比特,在 \(t = s + x / b + kd\) 时消息到达。而在分组交换中,最后一个比特在 \(t = x / b\) 时发送。为了到达最终目的地,最后一个数据包必须在中间路由器处被重传 \(k - 1\) 次,每次重传需要 \(p / b\) 秒,因此总延迟是 \(x / b + (k - 1)p / b + kd\)。在条件 \(s (k - 1)p / b\) 下,分组交换更快。除了在这些条件下更快的传输之外,当希望在交换机故障的情况下实现容错传输时,分组交换更可取。
2.39. 假定在一个包交换网络中用户数据长度为 \(x\) 位,将以一系列数据包的形式沿着一条 \(k\) 跳路径传输,每个数据包包含 \(p\) 位数据和 \(h\) 位头,这里 \(xp+h\)。线路的比特率为 \(b\) bps,传播延迟忽略不计。试问什么样的 \(p\) 值使得总延迟最小?
总共需要的数据包数量是 \(x/p\),因此总数据 + 标头流量是 \((p + h)x/p\) 位。源需要 \((p+h)x/pb\) 秒来传输这些比特。中间路由器对最后一个数据包的重传总共需要 \((k-1)(p+h)/b\) 秒。将源发送所有比特的时间和路由器将最后一个数据包传送到目的地以清除流水线的时间相加,我们得到总时间为 \((p+h)x/pb+(p+h)(k-1)/b\) 秒。对于 \(p\) 最小化这个量,我们找到 \(p=\sqrt{hx/(k-1)}\)。
2.44. 假设在一个 CDMA 系统中,A、B 和 C 同时传输比特 0,它们的码片序列分别是(-1 -1 -1 +1 +1 -1 +1 +1)、(-1 -1 +1 -1 +1 +1 +1 -1)、(-1 +1 -1 +1 +1 +1 -1 -1)。试问结果码片是什么?
这个结果可以通过首先对 A、B 和 C 中的每个进行取反,然后将这三个芯片序列相加来获得。或者,也可以将这三个序列相加,然后再取反。结果是 (+3 +1 +1 -1 -3 -1 -1 +1)。
2.46. 一个 CDMA 接收器得到了下面的码片:(-1 +1 -3 +1 -1 -3 +1 +1)。假设码片序列如 2.44 题所定义(增加 D 站,码片序列是 (−1 +1 −1 −1 −1 −1 +1 −1)),试问哪些移动站传输了数据?每个站发送了什么比特?
只需计算四个归一化内积:
\[ \frac{(-1 +1 -3 +1 -1 -3 +1 +1) \cdot (-1 -1 -1 +1 +1 -1 +1 +1)}{8} = 1 \\ \frac{(-1 +1 -3 +1 -1 -3 +1 +1) \cdot (-1 -1 +1 -1 +1 +1 +1 -1)}{8} = -1 \\ \frac{(-1 +1 -3 +1 -1 -3 +1 +1) \cdot (-1 +1 -1 +1 +1 +1 -1 -1)}{8} = 0 \\ \frac{(-1 +1 -3 +1 -1 -3 +1 +1) \cdot (-1 +1 -1 -1 -1 -1 +1 -1)}{8} = 1 \]
结果是 A 和 D 发送了 1 位,B 发送了 0 位,C 没有发送任何位。
2.补 1. 请解释中继器和集线器,并说明它们的功能?
中继器是连接网络线路的一种装置,常用于两个网络节点之间物理信号的双向转发工作。中继器是最简单的网络互联设备,主要完成物理层的功能,负责在两个节点的物理层上按位传递信息,完成信号的复制、调整和放大功能,以此来延长网络的长度。由于存在损耗,在线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,因此会导致接收错误。中继器就是为解决这一问题而设计的。它完成物理线路的连接,对衰减的信号进行放大,保持与原数据相同。集线器的英文称为“Hub”。主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于 OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。集线器和中继器都是物理层设备,它们是成本低廉的增加网络覆盖范围的手段,但是它们拓展了冲突域,降低了网络性能。
2.补 2. 比较光纤和非屏蔽双绞线(UTP)两种传输介质?
光纤的优点是:能够处理更高的带宽,非常适用于高端网络;具有相对低的衰减,节约了网络成本;不受电源震荡,电池干扰以及电源故障的影响;不受空气中化学物质侵蚀的影响,能适应恶劣的工业环境;重量轻而且细小,可腾出管道空间;不漏光;难以被窃听,具有高安全性。
光纤的缺点是:要求较高的操作技能;当光纤被过分弯曲时,容易损坏;光纤的本质是单向的, 在双向通信的时候要求两根光纤,或在一根光纤上划分两个频段;光纤成本较高,只能传输数字信号。
双绞线的优点是容易安装,成本低,一般不易损坏,双向传输,能传输模拟和数字信号。
双绞线的缺点是传输率较光纤低,延迟性能差。
第 3 章:数据链路层
3.2. 数据链路层协议使用了下面的字符编码: A:01000111 B:11100011 FLAG:01111110 ESC:11100000。 为了传输一个包含 4 个字符的帧:A B ESC FLAG,试问使用下面哪种成帧方法时所发送的比特序列(二进制表示)是什么? (a)字节计数。 (b)字节填充的标志字节。 (c)比特填充的首尾标志字节。
字节计数法在帧的开头加上帧的长度信息,4 个字符,用二进制表示是 00000100。所以发送的比特序列是 00000100 01000111 11100011 11100000 01111110
FLAG 是起始、结束标志。所以发送序列为:FLAG A B ESC ESC ESC FLAG FLAG,即 01111110 01000111 11100011 11100000 11100000 11100000 01111110 01111110
数据中若遇到连续 5 个 1 则在其后添加 0,即 01111110 01000111 110100011 111000000 011111010 01111110
3.3. 一个数据流中出现了这样的数据段:A B ESC C ESC FLAG FLAG D,假设采用本章介绍的字节填充法,试问经过填充之后的输出是什么?
填充后,我们得到 A B ESC ESC C ESC ESC ESC FLAG ESC FLAG D。
3.4. 试问字节填充法的最大开销是多少?
当有效负载仅包含 ESC 和 FLAG 字节时,会出现最大开销。在这种情况下,将会产生 100% 的开销。
3.6. 需要在数据链路层上被发送一个比特串:01111011111001111110。试问,经过比特填充之后实际被发送出去的是什么?
011110111110011111010
3.8. 为了提供比单个奇偶位的可靠性,一种检错编码方案如下:用一个奇偶位来检查所有奇数序号的位,用另一个奇偶位来检查所有偶数序号的位。试问这种编码方案的海明距离是多少?
由于奇偶校验位的性质,对任何有效字符进行一次更改都无法生成另一个有效字符。对偶数位进行两次更改或对奇数位进行两次更改将给出另一个有效字符,因此海明距离为 2。
3.9. 假设使用海明码来传输 16 位的报文。试问,需要多少个校检位才能确保接收方能同时检测并纠正单个比特错误?对于报文 1101001100110101,试给出传输的比特模式。假设在海明码中使用了偶校检。
位置 1、2、4、8 和 16 需要奇偶校验位,因此不超出 31 位(包括奇偶校验位)的消息适合。因此,5 个奇偶校验位就足够了。传输的比特模式为 011010110011001110101。
3.10. 接收方收到一个 12 位的海明码,其 16 进制值为 0xE4F。试问该码的原始值是多少?假设至多发生了一位错误。
将 16 进制值为 0xE4F 写成 2 进制:111001001111。第 2 位(奇偶校验位)不正确,更正为 101001001111。传输的 12 位值(海明编码后)为 0xA4F。去除校验位,原始 8 位数据值(10101111)为 0xAF。
3.15. 假设使用 Internet 校检和(4 位字)来发送一个消息 1001 1100 1010 0011,试问校检码的值是什么?
为了获得校验和,我们需要计算字的补码和,求和并将高位的溢出添加回低位:
0011 + 1010 = 1101
1101 + 1100 = 1001 + 1 = 1010
1010 + 1001 = 0011 + 1 = 0100
取反后是 1011,所以校检码是 1011。
3.16. 在 CRC 算法中,\(x^7+x^5+1\) 被生成多项式 \(x^3+1\) 除,试问所得余数是多少?
余数为 \(x^2 + x + 1\)。
3.17. 使用本章介绍的标准 CRC 方法传输比特流 10011101。生成的多项式为 \(x^3+1\),试问实际传输的位串是什么?假设左边开始的第三个比特在传输过程中变反了。请说明这个错误可以在接收方被检测出来。给出一个该比特传输错误的实例,使得接收方无法检测出该错误。
帧是 10011101。生成器是 1001。附加三个零后的消息是 10011101000。10011101000 除以 1001 的余数是 100。所以,实际传输的比特串是 10011101100。左起第三位变反的比特流是 10111101100。将其除以 1001 得到余数 100,不为 0,因此接收器检测到错误并可以请求重传。如果将传输的比特流转换为 1001 的任意倍数,则不会检测到错误。一个简单的比特传输错误的实例是:比特流中的所有 1 都反转为零。
3.20. 考虑一个具有 4 kbps 速率和 20 毫秒传输延迟的信道。试问帧的大小在什么范围内,停-等式协议才能获得至少 50% 的效率。
带宽-延迟积 BD = 4 kbps \(\times\) 40 ms = 80 bit,80 bit \(\times\) 2 = 160 bit,帧大小要大于 160 位,停-等式协议才能获得至少 50% 的效率。
3.22. 使用协议 5 在一条 3000 千米长的 T1 中继线上传输 64 字节的帧。如果信号的传播速度为 6 微秒/千米,试问序号应该有多少位?
为了高效运行,序列空间(实际上是发送方的窗口大小)必须足够大,以允许发送方继续发送,直到收到第一个确认。传播时间为 3000 km \(\times\) 6 μs/km = 18 ms。在 T1 速度下,即 1.536 Mbps(不包括 1 个标头位),一个 64 字节帧需要 \(64\times 8 / 1536000\) s = 0.3 ms。因此,第一帧在其传输开始后 18.3 ms 完全到达。确认还需要 18 ms 才能返回,再加上确认完全到达的一小部分(可忽略不计)时间。总之,该时间为 36.3 ms,因此发射机必须有足够的窗口空间来持续 36.3 ms。一帧需要 0.3 ms,因此需要 121 帧才能填充管道。需要 7 位序列号。
3.32. 利用地球同步卫星在一个 1 Mbps 的信道上发送长度为 1000 位的帧,该信道的传播延迟为 270 毫秒。确认总是被捎带在数据帧中。帧头非常短,序号使用了 3 位。试问,在下面的协议中,可获得的最大信道利用率是多少? (1)停-等式? (2)协议 5? (3)协议 6?
设 \(t = 0\) 表示传输开始。在 \(t = 1\) ms 时,第 1 帧已完全传输。在 \(t = 271\) ms 时,第 1 帧已完全到达。在 \(t = 272\) ms 时,第 1 帧的确认帧已完全发送。在 \(t = 271\times 2\) ms = 542 ms 时,确认帧已完全到达。因此,周期为 542 ms。总共 k 个帧在 542 ms 内发送,效率为 \(k/542\)。因此,对于
\(k = 1\),效率 \(= 1/542 = 0.18\%\)。
\(k = 7\),效率 \(= 7/542 = 1.29\%\)。
\(k = 4\),效率 \(= 4/542 = 0.74\%\)。
3.34. 考虑在一个无错的 64 kbps 卫星信道上单向发送 512 字节长的数据帧,来自另一个方向反馈的确认帧非常短。对于窗口大小为 1、7、15 和 127 的情形,试问最大吞吐量分别是多少?从地球到卫星的传播时间为 270 毫秒。
传输从 \(t = 0\) 开始。在 \(t = 512\times 8/64000\) s = 64 ms 时,发送最后一位。在 \(t = 270 + 64\) ms = 334 ms 时,最后一位到达卫星并发送非常短的 ACK。在 \(t = 270\times 2 + 64\) ms = 604 ms 时,ACK 到达地球。这里的数据速率是 4096 b / 604 ms \(\approx\) 6781 bps。
当窗口大小为 7 帧时,整个窗口的传输时间为 7 \(\times\) 64 ms = 448 ms,此时发送方必须停止。在 604 ms,第一个 ACK 到达,循环可以再次开始。这里 604 ms 内有 \(7\times 512\times 8 = 28672\) bit。数据速率为 28672 b / 604 ms = 47470.2 bps。仅当第一个 ACK 在 \(t = 604\) ms 返回时发送器仍在发送时,才会发生连续传输。换句话说,如果窗口大小大于 604 ms 的传输时间,则它可以全速运行。
对于 10 或更大的窗口大小,满足此条件,因此对于 10 或更大的任何窗口大小(15 和 127),数据速率为 64 kbps。
3.36. PPP 使用字节填充而不是比特填充,这样做的目的是防止有效载荷字段偶尔出现的标志字节造成的混乱。试至少给出一个理由说明 PPP 为什么这么做。
PPP 显然被设计为在软件中实现,而不是像 HDLC 等位填充协议那样在硬件中实现。通过软件实现,完全使用字节比使用单个位简单得多。另外,PPP 被设计为与调制解调器一起使用,而调制解调器以 1 字节为单位而不是 1 位来接受和传输数据。
3.37. 试问,使用 PPP 发送一个 IP 数据包的最低开销是多少?如果只计算 PPP 自身引入的开销,而不计 IP 头开销,试问最大开销又是多少?
最小时,每个帧有 2 个标志字节、1 个协议字节和 2 个校验和字节,每帧总共有 5 个开销字节。对于最大开销,2 个标志字节,地址和控制各 1 个字节,2 个字节用于协议,4 个字节用于校验和。这总共有 10 个开销字节。
第 4 章:介质访问控制子层
4.2. \(N\) 个站共享一个 56 kbps 的纯 ALOHA 信道。每个站平均每 100 秒输出一个 1000 位长的帧,即使前面的帧还没有被发出去(比如,站可以将出境帧缓存)。试问 \(N\) 的最大值是多少?
纯 ALOHA 带宽最高利用率为 0.184。使用纯 ALOHA 时,可用带宽为 \(0.184\times 56\) kbps = 10.3 kbps。每个站点需要 1000 bit / 100 s = 10 bps,因此 \(N = 10300 / 10 = 1030\) 个站点。
4.3. 考虑在低负载情况下纯 ALOHA 和分槽 ALOHA 的延迟。试问哪个延迟更小?请说明你的答案。
在纯 ALOHA 中,传输可以立即开始。在低负载情况下,不太可能发生碰撞,因此传输成功可能性大,基本上没有延迟。而在分槽 ALOHA 中,必须等待下一个时隙(槽)。这产生了半个时隙时间的延迟。所以,在低负载的情况下,纯 ALOHA 的延迟更小。
4.4. 一大群 ALOHA 用户每秒产生 50 个请求,包括原始的请求和重传的请求。时间槽单位为 40 毫秒。 (a)试问:第一次发送成功的机会是多少? (b)试问:恰好 \(k\) 次冲突之后成功的概率是多少? (c)试问:所需传输次数的期望值是多少?
(a)每个时间槽产生的请求数是 \(G = 40\) ms \(\times\) 50/s = 2 个,Poisson 分布定律给出概率 \(P_k=\mathrm{e}^{-G}(1-\mathrm{e}^{-G})^{k-1}\),\(P_1=\mathrm{e}^{-2} = 0.135\)。
(b)第 \(k+1\) 次成功的概率 \(P_k=\mathrm{e}^{-G}(1-\mathrm{e}^{-G})^{k-1}=\mathrm{e}^{-2}(1-\mathrm{e}^{-2})^k = 0.135\times 0.865^k\)。
(c) 期望的传输次数为 \(\mathrm{e}^G = 7.4\)。
4.6. 试问在下列两种情况下 CSMA/CD 的竞争时间槽长度是多少? (a)一个 2 千米长的双导电缆(twin-lead cable)(信号的传播速度是信号在真空中传播速度的 82%)? (b)40 千米长的多模光纤(信号的传播速度是信号在真空中传播速度的 65%)?
(a)双线传输中的信号传播速度为 \(0.82\times 3\times 10^8\) m/s = \(2.46\times 10^8\) m/s,2 千米的信号传播时间为 2 km \(/ 2.46\times 10^8\) m/s = 8.13 μs。因此,竞争时间槽长度为 8.13 μs \(\times\) 2 = 16.26 μs。
(b)多模光纤中的信号传播速度为 \(0.65\times 3\times 10^8\) m/s = \(1.95\times 10^8\) m/s,40 千米的信号传播时间为 40 km \(/ 1.95\times 10^8\) m/s = 205.13 μs。因此,竞争时间槽长度为 205.13 μs \(\times\) 2 = 410.26 μs。
4.7. 在一个使用基本位图协议的局域网中,最坏的情况下一个站(比如 s)要等多久才可以传输它的帧?
最坏的情况是所有站点都想发送且 s 是最低编号的站点。等待时间为 \(N\) 比特争用期 \(+ (N - 1)\times d\) 比特,用于传输帧。总计为 \(N+(N - 1)d\) 比特时。
4.8. 在二进制倒计数协议中,试问为什么一个编号较低的站有可能得不到发送数据包的机会。
在这种情况下,如果一个编号较高的站点和一个编号较低的站点在同一时刻有数据包要发送,那么编号较高的站点将始终获胜。因此,如果有不断有准备发送数据包的编号较高的站点,编号较低的站点将被拒之门外,无法发送其数据包,导致其陷入发送数据的饥饿状态。
4.9. 编号为 1~16 的 16 个站使用自适应树遍历协议来竞争一个共享信道。如果所有站的地址预先设定,并且突然一次就绪,试问解决竞争需要多少个比特槽?
编号为 2、3、5、7、11、13 的站想要发送数据,就需要 11 个比特槽。
槽 1 是 2、3、5、7、11、13 竞争,左子节点成功; 槽 2 由编号 1~8 的站竞争,所以 2、3、5、7 竞争,左子节点成功; 槽 3 由编号 1~4 的站竞争,所以 2、3 竞争,左子节点成功; 槽 4 由编号 1~2 的时间槽竞争,所以 2 站成功发送; 槽 5 跳至右子节点,即 3 站发送成功; 槽 6 跳到右子节点,5~7 竞争; 槽 7:5; 槽 8:7; 槽 9:11、13; 槽 10:11; 槽 11:13。
4.13. 试问经典 10 Mbps 以太网的波特率是多少?
以太网使用曼彻斯特编码,这意味着每个发送的比特有 2 个信号周期。标准以太网的数据传输速率为 10 Mbps,因此波特率是其两倍,即 20 兆波特。
4.14. 假设经典以太网使用曼切斯特编码,请画出比特流 0001110101 的编码输出。
信号是一个具有两个值的方波,分别为高(H)和低(L)。该模式是 LHLHLHHLHLHLLHHLLHHL。
4.15. 一个一千米长、10 Mbps 的 CSMA/CD LAN(不是 802.3),其传播速度是 200 米/微秒。这个系统不允许使用中继器。数据帧的长度是 256 位,其中包括 32 位的头、校检和以及其他开销。在一次成功传输后的第一个比特槽被预留给接收方,以便它抓住信道发送 32 位的确认帧。假定没有冲突,试问除去开销之后的有效数据是多少?
一个完整的传输包括六个阶段:
- 发送器占用电缆(2 × 1000 m / (200 m/μs) = 10 μs)
- 传输数据(256 bit / 10 Mbps = 25.6 μs)
- 最后一位到达末端的延迟(1000 m / (200 m/μs) = 5.0 μs)
- 接收器占用电缆(10 μs)
- 发送确认 ACK(3.2 μs)
- 最后一位到达末端的延迟(5.0 μs) 这些阶段的总和是 58.8 μs。在这段时间内,发送了 (256-32) = 224 个数据位,有效数据传输速率约为 (256-32) / 58.8 μs = 3.8 Mbps。
4.16. 两个 CSMA/CD 站都企图传送大文件(多个帧)。每发出一帧,它们就使用二进制指数后退算法竞争信道。试问在第 k 轮结束竞争的概率是多少?每个竞争周期的平均次数是多少?
将获取尝试编号从 1 开始。第 \(i\) 次尝试分布在 \(2^{i-1}\) 个时隙中。因此,第 \(i\) 次尝试发生碰撞的概率是 \(2^{-(i-1)}\)。第 \(k\) 轮中前 \(k-1\) 次尝试失败,然后在第 \(k\) 轮成功的概率是 \(P_k = (1 - 2^{1-k}) \prod_{i=1}^{k-1} 2^{1-i}\),可简化为 \(P_k = (1 - 2^{1-k})\times 2^{-(k-1)(k-2)/2}\)。然后,期望的轮数就是 \(\sum kP_k\)。
4.18. 以太网帧必须至少 64 字节长,才能确保当线缆另一端发生冲突时,发送方仍处于发送过程中。快速以太网也有同样的 64 字节最小帧长度限制,但是它可以快 10 倍的速度发送数据,试问它如何有可能维持同样的最小帧长度限制?
快速以太网的最大线缆延迟是以太网的 1/10。
4.19. 有些书将以太网帧的最大长度说成是 1522 字节而不是 1500 字节。它们错了吗?请说明你的回答。
负载为 1500 字节,但当考虑目标地址、源地址、类型/长度和校验字段,以及 VLAN 标头时,总字节数确实为 1522。在引入 VLAN 之前,总字节数为 1518。
4.27. 为什么有些网络用纠错码而不用检错和重传机制?请给出两个理由。
(1)一个原因是需要实时的服务质量。如果发现错误,就没有时间进行重传。节目必须继续。在这里可以使用前向纠错。
(2)另一个原因是在非常低质量的线路上(例如,无线信道),误码率可能非常高,以至于几乎所有帧都必须重新传输,并且重新传输可能也会受到损害。为了避免这种情况,使用前向纠错来增加正确到达的帧的比例。
4.36. 一个专门为快速以太网设计的交换机有一个传输速率为 10 Gbps 的背板,试问在最差情况下它可以多大的帧/秒来处理帧?
最糟糕的情况是无休止地传输 64 字节(512 位)的帧。如果背板能够处理 \(10^9\) bps,那么它可以处理 \(10^9\) Gbps / 512 bit = 1953125 frame/s。
4.37. 请简单描述储存-转发型交换机和直通型交换机的区别。
储存-转发型交换机存储完整的每个传入帧,然后检查并转发它。直通型交换机在传入帧完全到达之前开始转发。一旦目标地址确定,就可以开始转发。
4.38. 考虑图 4-41(b)用网桥 B1 和 B2 连接的扩展局域网,假设两个网桥的哈希表是空的,对于下面的数据传输序列,请列出转发数据包所用的全部端口: (a)A 发送一个数据包给 C。 (b)E 发送一个数据包给 F。 (c)F 发送一个数据包给 E。 (d)G 发送一个数据包给 E。 (e)D 发送一个数据包给 A。 (f)B 发送一个数据包给 F。

(a)B1 使用端口 2 3 4;B2 使用端口 1 2 3; (b)B2 使用端口 1 3 4;B1 使用端口 1 2 3; (c)B2 不会转发数据包; (d)B2 使用端口 2; (e)B2 使用端口 4,B1 使用端口 1; (f)B1 使用端口 1 3 4;B2 使用端口 2。
4.39. 从损坏帧的角度来看,存储-转发型交换机比直通型交换机更有优势。请说明这种优势是什么。
存储-转发型交换机存储完整的帧然后再进行转发。帧进入后,可以验证其校验和。如果帧受损,将立即丢弃。而直通型交换机无法在帧损坏时将其丢弃,因为一旦检测到错误,帧已经被转发了。尝试处理这个问题就像是在马已经跑出去之后才锁马厩的门。
4.补 1. 交换机如何维护内部的 MAC 地址表。
交换机学习和维护内部的 MAC 的地址表的方法与网桥类似。初始时,交换机所有的表都是空的。它利用逆向地址学习的方法来学习和维护内部的 MAC 的地址表。
逆向地址学习的基本思想是利用每个 MAC 帧中的源地址字段。交换机能看见所连接的所有网络上传送的帧。当一个帧到达一个特定的端口时,网络通过查看源地址即可知道在哪个 LAN 上可访问这台机器。若收到的帧的源地址不在表中,则插入到表中,作为以后转发的路径。若已经在表中,则对记录进行刷新。
对于表中没有记录的目的地址,交换机将采用向各个端口广播的方式发送。
4.补 2. 请解释交换机的无分片交换的含义。
它是存储转发和直通式两种方案的折衷。因为帧出错的主要原因是冲突,而以太网的帧至少为 64 字节,故小于 64 字节的帧必然是冲突造成的帧碎片(错误帧)。对于错误帧将作抛弃处理。
交换机在接收了一帧的前 64 字节后,再查表找出目的端口并转发。
这种方式的优点是交换速度较快,并且降低了错误帧转发的概率,缺点是长度大于 64 字节的错误帧仍会转发,转发延时高于直通式。
第 5 章:网络层
5.2. 数据报网络将每个数据包当做独立的单位进行路由,路由过程彼此独立。虚电路网络不必采用这种方式,因为每个数据包都沿着一条预先确定的路由。试问,这是否意味着虚电路网络不需要具备将单个数据包从任意源端路由到任意接收方的能力呢?请解释你的答案。
虚拟电路网络绝对需要这种能力,以便路由连接建立数据包从任意源到任意目的地。
5.3. 请给出 3 个在建立连接时可能需要协商的协议参数例子。
协商过程可以设置窗口大小、最大数据包大小、数据传输速率和定时器值。
5.6. 考虑图 5-12(a)中的网络,使用距离矢量路由算法。路由器 C 刚刚收到下列矢量:来自 B 的(5,0,8,12,6,2);来自 D 的(16,12,6,0,9,10);来自 E 的(7,6,3,9,0,4)。从 C 到 B、D 和 E 的链路成本分别为 6、3、5。请给出 C 的新路由表,包括使用的出境线路和成本。

经过 B 的路径得到的值是 (11, 6, 14, 18, 12, 8)。
经过 D 的路径得到的值是 (19, 15, 9, 3, 12, 13)。
经过 E 的路径得到的值是 (12, 11, 8, 14, 5, 9)。
对每个目标取最小值(除了 C)得到 (11, 6, 0, 3, 5, 8)。
对应的出站线路是 (B, B, –, D, E, B)。
5.11. 参考图 5-6 中的网络。试问若使用以下方法,从 B 发出的一次广播将生产多少个数据包? (a)逆向路径转发 (b)汇集树

逆向路径转发算法需要五轮才能完成。这些轮次上的数据包接收者分别是 AC、DFIJ、DEGHIJKN、GHKN 和 LMO。总共生成了 21 个数据包。
汇聚树需要四轮和 14 个数据包。
5.12. 考虑图 5-15(a)中的网络。想象在 F 和 G 之间加入一条新的路线,但是图 5-15(b)中的汇集树仍然不变。试问对于图 5-15(c)中有什么变化?

节点 F 目前有两个后代,A 和 D。现在它获得了第三个后代 G,但没有用圈圈标出,因为接下来的数据包 IFG 不在汇聚树上。节点 G 获得了第二个后代,除了 D 之外,还有标记为 F 的后代。同样,这也没有用圈圈标出,因为它不是通过汇聚树传输的。
5.17. 针对两个拥塞避免方法 ECN 和 RED,请给出它们的两个主要区别。
首先,ECN 方法通过设置一个比特位明确地向源发送拥塞通知,而 RED 则通过简单地丢弃其中一个数据包来隐式地通知源。其次,ECN 方法仅在没有缓冲空间时丢弃数据包,而 RED 在缓冲区用尽之前就开始丢弃数据包。
5.18. 流量整形采用了令牌桶方案。每 5 微秒一个新的令牌被放入桶中。每个令牌刚好用于一个短数据包,数据包包含 48 个字节数据。试问最大的可持续数据率是多少?
每 5 微秒发送一个令牌,即每秒发送 \(1/5\times 10^6 = 200000\) 个。每个数据包包含 48 字节的数据。因此,净数据速率为 \(200000\times 48\times 8 = 76800000\) bps = 76.8 Mbps。
5.19. 在一个 6 Mbps 网络上有一台主机,其流量通过一个令牌桶整型,令牌桶的填充速率为 1 Mbps。初始时令牌桶被填满到容量 8 MB。试问该计算机能以 6 Mbps 的全速率传输多长时间。
天真的答案认为在 6 Mbps 的速度下,排空一个 8 MB 的桶需要 8/6 = 4/3 s。然而,这个答案是错误的,因为在这个间隔期间,会有更多的令牌到达。正确的答案可以通过使用公式 \(S = C/(M - \rho)\) 获得。代入数值,我们得到 \(S = 8/(6 - 1) = 1.6\) s。
5.23. 假设主机 A 和路由器 R1 连接,R1 又与另一个路由器 R2 连接,R2 与主机 B 连接,假定一个要发给主机 B 的 TCP 消息被传递给主机 A 的 IP 代码,其中包含了 900 个字节的数据包和 20 个字节的 TCP 头。请写出在三条链路上传输的每个数据包中 IP 头部的 Total length、Identification、DF、MF、和 Fragment offset 字段。假定链路 A-R1 链路可以支持的最大帧长为 1024 字节,其中包括 14 字节的帧头;链路 R1-R2 可以支持的最大帧长为 512 字节,其中包括 8 字节的帧头;链路 R2-B 可以支持的最大帧长为 512 字节,其中包括 12 字节的帧头。
初始的 IP 数据报将在 I1 处分割为两个 IP 数据报,之后不会再发生其他分割。
链路 A-R1:
Length = 940; ID = x; DF = 0; MF = 0; Offset = 0
链路 R1-R2:
Length = 500; ID = x; DF = 0; MF = 1; Offset = 0
Length = 460; ID = x; DF = 0; MF = 0; Offset = 60
链路 R2-B:
Length = 500; ID = x; DF = 0; MF = 1; Offset = 0
Length = 460; ID = x; DF = 0; MF = 0; Offset = 60
5.26. 假定最初的 B 类地址的网络部分不是 16 位,而是 20 位。试问将有多少个 B 类网络。
如果使用 2 位前缀,将有 18 位剩余用于指示网络。因此,网络的数量将为 \(2^{18}=262144\) 个。然而,全部为 0 和全部为 1 是特殊情况,因此只有 262142 个可用。
5.27. 一个 IP 地址的十六进制表示为 C22F1582,请将它转换为点分十进制表示法。
二进制为 11000010 00101111 00010101 10000010,该地址是 194.47.21.130。
5.28. Internet 上一个网络的子网掩码为 255.255.240.0。试问它最多能容纳多少主机。
子网掩码长度为 20 位,因此网络部分为 20 位。剩下的 12 位用于主机,因此存在 \(2^{12}-2=4096\) 个主机地址。
5.30. 从 198.16.0.0 开始有大量连续的 IP 地址可以使用。假设 4 个组织 A、B、C、D 按照顺序依次申请 4000、2000、4000、和 8000 个地址。对于每一个申请,请用 w.x.y.z/s 的形式写出所分配的第一个 IP 地址、最后一个 IP 地址以及掩码。
首先,所有请求都被舍入到最接近的二的幂。起始地址、结束地址和子网掩码如下:
A: 198.16.0.0 – 198.16.15.255 表示为 198.16.0.0/20
B: 198.16.16.0 – 198.23.15.255 表示为 198.16.16.0/21
C: 198.16.32.0 – 198.47.15.255 表示为 198.16.32.0/20
D: 198.16.64.0 – 198.95.15.255 表示为 198.16.64.0/19
5.31. 一个路由器刚刚接收到以下新的 IP 地址:57.6.96.0/21,57.6.104.0/21,57.6.112.0/21 和 57.6.120.0./21。如果所有这些地址都使用同一条出境线路,试问它们可以被聚合吗?如果可以,将被聚合到哪个地址上?如果不可以,请问为什么?
它们可以聚合为 57.6.96.0/19。
5.32. 从 29.18.0.0 到 29.18.128.255 的一组 IP 地址已经被聚合到 29.18.0.0/17。然而,这里有一个空闲地址块,即从 29.18.60.0 到 29.18.63.255 之间的 1024 个地址还没有分配。现在这块空闲地址突然要分配给一台使用不同出境线路的主机。试问是否有必要将聚合地址分割成几块,然后把新的地址加入到路由表中,再来看是否可以重新聚合?如果没有必要,请问该怎么办?
只需添加一个新的表项即可:对于新的块,添加 29.18.0.0/22。如果一个传入的数据包同时匹配 29.18.0.0/17 和 29.18.0.0/22,那么最长的匹配规则胜出。这个规则使得可以将一个大块分配给一个输出线路,但对其范围内的一个或多个小块进行例外。
5.33. 一个路由器的路由表中有如下表项:
| 地址/掩码 | 下一跳 |
|---|---|
| 135.46.56.0/22 | Interface 0 |
| 135.46.60.0/22 | Interface 1 |
| 192.53.40.0/23 | Router 1 |
| default | Router 2 |
对于下列 IP 地址,如果到达的数据包带有这些地址,试问路由器如何处理?
(a)135.46.63.10
(b)135.46.57.14
(c)135.46.52.2
(d)192.53.40.7
(e)192.53.56.7
数据包的路由如下:
Interface 1
Interface 0
Router 2
Router 1
Router 2
5.34. 许多公司采取这样的策略:通过两个或多个路由器将公司连接到 Internet。这种冗余度保证了其中一个路由器停机时网络还能用。试问采用 NAT 策略后,仍然能正常工作吗?请解释你的答案。
在安装 NAT 之后,非常重要的是所有属于单个连接的数据包都通过同一个路由器进出公司,因为这是映射保留的地方。如果每个路由器都有自己的 IP 地址,并且属于给定连接的所有流量都可以发送到同一个路由器,那么就可以正确进行映射,NAT 的多宿主功能就能够正常工作。
5.35. 你刚刚向一个朋友解释了 ARP 协议,当你解释完之后他说:“我明白了,ARP 给网络层提供了一项服务,所以它是数据链路层的一部分。”你该如何向他解释呢?
我说“ARP 不提供网络层的服务,它是网络层的一部分,有助于向传输层提供服务。IP 寻址的问题并不发生在数据链路层。数据链路层协议类似于第 3 章中的协议 1 到 6,如 HDLC、PPP 等。它们负责将位从一条线的一端传输到另一端。”
5.37. 大多数 IP 数据报重组算法有一个计时器,以免丢失的段永远占用重组缓冲区。假设一个数据报被分成 4 个段。前 3 段到达目的地,但最后一个延迟了。最终该计时器超时,接收方内存中的 3 个段丢弃。过来一会儿,最后一个段到达,试问应该用它做什么呢?
就接收方而言,这是一个新数据报的一部分,因为没有其他部分是已知的。因此,它将被排队等待其他部分的到来。如果其他部分没有到来,那么这部分也将超时。
5.38. 在 IP 中,校检和仅仅覆盖了头,而没有包括数据部分。你认为这样的设计方案的理由是什么?
头部中的错误比数据中的错误更为严重。例如,一个错误的地址可能导致数据包被传送到错误的主机。许多主机不会检查传递给它们的数据包是否确实是为它们的。它们假设网络永远不会传递给它们针对其他主机的数据包。有时数据没有进行校验和,因为这样做是昂贵的,而且上层通常会执行校验和,使得在这里进行校验和变得多余。
5.40. IPv6 地址使用 16 个字节的地址。如果每隔 1 ps(\(1^{-12}\) 秒,1 皮秒)就分配掉一百万个地址(\(10^6\)),试问整个地址空间可以持续分配多久?
有 16 字节时,有 \(2^{128}\) 或 \(3.4\times 10^{38}\) 个地址。如果我们以每秒 \(10^{18}\) 个的速度分配它们,它们将持续 \(10^{13}\) 年。这个数字是宇宙的年龄的 1000 倍。当然,地址空间不是平坦的,所以它们并不是线性分配的,但这个计算显示,即使采用效率为 1/1000(0.1%)的分配方案,也永远不会用尽。
5.41. IPv4 头中的 Protocol 字段并没有出现在 IPv6 的固定头中,试问为什么?
协议字段告诉目标主机将 IP 数据包交给哪个协议处理程序。中间路由器不需要此信息,因此在主标头中不需要。实际上,这个信息是存在的,只是被掩盖了。最后(扩展)标头的“下一个标头”字段用于这个目的。
第 6 章:传输层
6.6. 评判一个服务器是否全程活跃,或者通过进程服务器来按需启动它的一个标准是它所提供服务的使用频率。试问你能想出作出这一决定的任何其他标准吗?
另一个标准是客户端在使用进程服务器技术时所涉及的额外延迟的影响。为所请求服务的服务器必须被加载,而且可能需要在客户端请求得到服务之前进行初始化。
6.9. 想象用两次握手过程而不是三次握手过程来建立连接。换句话说,第三个消息不再是要求的。试问现在有可能死锁吗?请给出一个例子说明存在死锁,或者证明死锁不存在。
死锁是可能的。例如,一份数据包突然到达 A,A 确认了它。然而,确认消息丢失了,但此时 A 是开放状态,而 B 对所发生的情况一无所知。现在同样的情况发生在 B 身上,两者都处于开放状态,但期待不同的序列号。为了避免死锁,必须引入超时机制。
6.15. 试问,为什么会存在 UDP?用户进程使用原始 IP 数据包还不够吗?
不。IP 数据包包含 IP 地址,指定了目标机器。一旦这样的数据包到达,网络处理程序如何知道将其交给哪个进程呢?UDP 数据包包含目标端口。这个信息是必不可少的,以便将它们传递给正确的进程。
6.22. 试问最小 TCP MTU 的总长度是多少?包括 TCP 和 IP 的开销,但是不包括数据链路层的开销。
默认的分段大小为 536 字节。TCP 添加了 20 字节,而 IP 也是 20 字节,使得默认总共为 576 字节。
6.26. 主机 1 上的一个进程己经被分配了端口 p,主机 2 上的一个进程也己经被分配了端口 q,试问这两个端口之间有可能同时存在两个或者多个 TCP 连接吗?
不是的。连接仅通过其套接字来标识。因此,(1, p) - (2, q) 是这两个端口之间唯一可能的连接。
6.28. TCP 段的最大有效载荷为 65495 字节。试问为什么选择如此奇怪的数值?
整个 TCP 段必须适应 IP 数据包的 65515 字节的有效负载字段。由于 TCP 头部最少为 20 字节,因此只剩下 65495 字节用于 TCP 数据。
6.30. 请考虑在一条往返时间为 10 毫秒的无拥塞线路上使用慢速启动算法的效果。接收窗口为 24 KB,最大段长为 2 KB。试问需要多长时间才能首次发送满窗口的数据?
前几个突发包分别包含 2K、4K、8K 和 16K 字节。接下来的突发包大小为 24 KB,出现在 40 毫秒之后。
6.31. 假设 TCP 的拥塞窗口被设置为 18 KB,并且发生了超时。如果接下来的 4 次突发传输全部成功,试问拥塞窗口将达到多大?假设最大段长为 1 KB。
下一次传输将是 1 个最大段大小。然后是 2、4 和 8。因此,在四次成功之后,它将达到 8 KB。
6.33. 一台 TCP 机器正在通过一条 1 Gbps 的信道发送满窗口的 65535 字节数据,该信道的单向延迟为 10 毫秒。试问可以达到的最大吞吐量是多少?线路的效率是多少?
每 20 毫秒可以发送一个窗口。这意味着每秒可以发送 50 个窗口,最大数据传输速率约为 \(65535\times 8\times 50=26.214\) Mbps。因此,线路效率为 26.214 Mbps / 1000 Mbps = 2.6%。
6.36. 在一个网络中,最大段长为 128 字节,段的最大生存期为 30 秒,序号为 8 位,试问每个连接的最大数据率是多少?
发送方在 30 秒内不得发送超过 \(2^8-1=255\) 个段,因此,数据传输速率不超过 \(255 \times 128 \times 8\) b / 30 s = 8.704 kbps。
6.补 1. 请描述 TCP 连接建立的三次握手过程(必要的话,可配图说明)。
在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送 SYN 包(SYN=\(j\))到服务器,并进入 SYN_SEND 状态,等待服务器确认;
第二次握手:服务器收到 SYN 包,必须确认客户的 SYN(ACK=\(j+1\)),同时自己也发送一个 SYN 包(SYN=\(k\)),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ACK=\(k+1\)),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
6.补 2. 请描述 TCP 拥塞控制的方法。
假定由于分组收到损坏引起的丢失是非常少的,因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了阻塞。有两种分组丢失的指示:发生超时和收到重复的确认。拥塞避免算法需要对每个连接维持两个变量:一个拥塞窗口 cwnd 和一个慢启动门限 ssthresh。 (1) 对一个给定的连接,初始化 cwnd 为 1 个报文段,ssthresh 为 65535 个字节。 (2) TCP 输出例程的输出不能超过 cwnd 和接收方通告窗口的大小。拥塞避免是发送方使用的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。 (3) 当拥塞发生时,ssthresh 被设置为当前窗口大小的一般(cwnd 和接收方通告窗口大小的最小值,但最小为 2 个报文段)。此外,如果是超时引起了拥塞,则 cwnd 被设置为 1 个报文段。 (4) 当新的数据被对方确认时,就增加 cwnd,但增加的方法依赖与是否正在进行慢启动或拥塞避免。如果 cwnd 小于或等于 ssthresh,则正在进行慢启动,否则正在进行拥塞避免。
6.补 3. 如何避免更新窗口的丢失而产生的死锁?
采用定时器方法。
6.补 4. 根据自己的理解,全面比较 UDP 和 TCP。
TCP——传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个 TCP 连接,之后才能传输数据。TCP 提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP——用户数据报协议,是一个简单的面向数据报的运输层协议。UDP 不提供可靠性,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。