计算机网络原理 谢希仁(第8版)第五章习题答案
点击这里,更多计算机网络习题等着你!
5-01 试说明运输层在协议栈中的地位和作用,运输层的通信和网络层的通信有什么重要区别?为什么运输层是必不可少的?
地位:属于面向通信部分的最高层,同时也是用户功能中的最底层。
功能:向应用层提供通信服务。
区别:网络层为主机之间提供提供通信,可以使分组到达目的主机的网络层。但主机间的通信实际上是进程之间的通信,网络层无法给进程之间提供通信,但运输层可以,运输层通过其自身的功能,依靠网络层提供的服务,就可以实现两主机间进程与进程的通信。
运输层是要实现应用进程通信的,所以必不可少。
5-02 网络层提供数据报或虚电路服务对上面的运输层有何影响?
虚电路提供可靠服务,保证了数据报在主机之间的无差错传输,但不能保证运输层的无差错传输。数据报服务是不可靠的。总之,网络层提供数据报服务或虚电路服务对运输层是否可靠没有影响。
5-03 当应用程序使用面向连接的TCP和无连接的IP时,这种连接是面向连接的还是面向无连接的?
这要在不同层次来看,在运输层是面向连接的,在网络层则是无连接的。
5-04 试用画图解释运输层的复用。画图说明许多个运输用户复用到一条运输连接上,而这条运输连接又复用到IP数据报上。
H3和H1、H2同时进行通信。H3和H1中的两个进程HTTP和SMTP通信,H3和H2中的HTTP进程通信,共三个TCP连接。三个tcp连接传输的报文段都需要通过下面的网络层利用IP数据报作为载体进行传输。
5-05 试举例说明有些应用程序愿意采用不可靠的UDP,而不用采用可靠TCP。
对实时性要求高的应用程序愿意采用UDP获得低时延的效果,尽管会丢失部分数据报。
5-06 接收方收到有差错的UDP用户数据报时应如何处理?
简单丢弃即可。
5-07 如果应用程序愿意使用UDP来完成可靠的传输,这可能吗?请说明理由。
可能,但应用程序中必须额外提供与TCP相同的功能。
5-08 为什么说UDP是面向报文的,而TCP是面向字节流的?
UDP发送报文时将应用层传下来的报文添加首部后直接交给IP层,接收UDP报文时去掉首部直接交给应用层。
TCP发送报文时先将报文缓存起来,将其看做字节流,对每个字节都要编号,TCP根据网络拥塞情况与对方接收缓存大小决定一次发送多少字节的数据报。
5-09 端口的作用是什么?为什么端口号要划分为三种类型?
端口是应用层中的应用进程与运输层实体进行层间交互的接口,只具有本地意义。
服务器端使用两类端口号,熟知端口号和登记端口号,熟知端口号是给重要的应用程序使用的,登记端口号给没有熟知端口号的应用程序使用。这两类给服务器端使用,为了让所有用户都知道,便于通信。
客户端使用短暂端口号,这种端口号仅在客户端运行时才动态随机选择,留给客户临时使用。
5-10 试说明运输层中伪首部的作用。
用来计算报文的检验和。
5-11 某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报。既然都是数据报,可否跳过UDP而直接交给IP层?哪些功能UDP提供了但IP没提提供?
不能,UDP数据报中仅指明了通信进程双方的端口号,应用层的数据报直接交付给IP层后,虽然IP层能将数据报运送至目的主机,但不能确定通信进程双方的端口号,无法将数据交付给目的进程,不能完成通信。
没有复用和分用功能,不能实现进程间通信,没有数据部分的差错检验。
5-12 一个应用程序用UDP,到IP层把数据报在划分为4个数据报片发送出去,结果前两个数据报片丢失,后两个到达目的站。过了一段时间应用程序重传UDP,而IP层仍然划分为4个数据报片来传送。结果这次前两个到达目的站而后两个丢失。试问:在目的站能否将这两次传输的4个数据报片组装成完整的数据报?假定目的站第一次收到的后两个数据报片仍然保存在目的站的缓存中。
不行。重传的IP数据报的标识字段会有不同的标识符。仅当标识符相同的IP数据报片才能组装成一个IP数据报。前两个IP数据报片的标识符与后两个IP数据报片的标识符不同,因此不能组装成一个IP数据报。
5-13 一个UDP用户数据的数据字段为8192字节。在数据链路层要使用以太网来传送。试问应当划分为几个IP数据报片?说明每一个IP数据报片的数据字段长度和片偏移字段的值。
UDP用户数据报的长度:8192+8 = 8200字节
以太网数据字段最大长度1500字节,假设IP数据报首部长度20字节,则数据部分长度为1480字节。
8200 = 1480x5 + 800 所以需划分为6个数据报片。
前五个数据报片数据字段长度1480字节,最后一个800字节。
片偏移字节依次为:0,1480,2960,4440,5920,7400字节。
片偏移字段依次为:0,185,370,555,740,925
5-14 UDP用户数据报的首部十六进制表示是:06 32 00 45 00 1C E2 17.试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器还是服务器发送给客户?使用UDP的这个服务器程序是什么?
源端口:0000 0110 0011 0010,十进制为1586。
目的端口:0000 0000 0100 0101,十进制为69。
长度:0000 0000 0001 1100,十进制为28。
数据部分长度:28-8=20。
目的端口小于1023,是服务器端口,程序时TFTP。
5-15 使用TCP对实时话音数据的传输会有什么问题?使用UDP在传送数据文件时会有什么问题?
TCP虽然保证可靠传输,但它的延迟大,因为一旦有分组丢失就要重传,增加时延。
UDP是不可靠的传输协议,UDP传输数据文件如果出现差错,UDP就会丢弃这个数据报,不会重传,所以数据文件有可能是错误的。
5-16 在停止等待协议中如果不使用编号是否可行?为什么?
不行,如果报文段M1的确认报文在网络中延迟了,发送主机重新发送M1后收到延迟的M1确认报文,然后发送M2,收到重传M1的确认报文,就开始发送M3,此时M2有可能在传输过程丢失,而目的主机收到了两个M1。所以不使用编号是不行的。
5-17 在停止等待协议中,如果收到重复的报文段时不予理睬(即悄悄地丢弃它而其他什么也没做)是否可行?试举出具体的例子说明理由。
放发送方没有收到确认报文就会重传,接收方就会收到重复报文,停止等待协议对于重复报文要重传确认。让发送方知道自己接收到了报文,让其继续发送下一个。
如果不予理睬,发送发就以为对方没有收到报文,就会继续发送,进而陷入死循环。
5-18 假定在运输层使用停止等待协议。发送发在发送报文段M0后在设定的时间内未收到确认,于是重传M0,但M0又迟迟不能到达接收方。不久,发送方收到了迟到的对M0的确认,于是发送下一个报文段M1,不久就收到了对M1的确认。接着发送方发送新的报文段M0,但这个新的M0在传送过程中丢失了。正巧,一开始就滞留在网络中的M0现在到达接收方。接收方无法分辨M0是旧的。于是收下M0,并发送确认。显然,接收方后来收到的M0是重复的,协议失败了。试画出类似于图5-9所示的双方交换报文段的过程。
5-19 试证明:当用 n 比特进行分组的编号时,若接收到窗口等于 1(即只能按序接收分组),当仅在发送窗口不超过2n-1时,连接 ARQ 协议才能正确运行。窗口单位是分组。
- 假定用三比特编号,共有八个序号。假定接收窗口WR,如图阴影部分,发送窗口WT。
- 发送窗口 WT的位置不可能比2的位置更靠前。因为接收窗口的位置表明接收方正在等待接收 7 号分组,而这时的发送方不可能已经收到了对 7 号分组的确认。因此发送窗口必须包括 7 号分组,也就是不可能比2的位置更靠前即右方。
- 发送窗口 WT的位置不可能比 3 的位置更靠后。因为接收窗口的位置表明接收方已经对 6 号分组(以及以前的分组)发送了确认。但如果发送窗口 WT的位置再靠后一个分组,即在 6 号分组的左边,那就表明还没有发送 6 号分组。但接收方的位置表明接收方已经发送了对 6 号分组的确认。这显然是不可能的。
- 发送窗口 WT的位置可能在某个位置的中间,如 1。
- 对于 1 和 2 的情况,在 WT的范围内必须无重复序号(因为如果重复了,比如2的窗口大小为8,发送方把8个报文全部发送出去,这8个里有两个报文序号为7,就有了二义性),即 W T ≤ 2 n W_T\le2^n WT≤2n。
- 对于 3 的情况,在 W T + W R W_T + W_R WT+WR的范围内无重复序号(因为如果重复了,WT就会包含0前面的7,发送这个7接收方并接收到后,发送对序号7的确认,但这两个7只是同一个编号,内容完全不同,这时就会发生回绕),即 W T + W R ≤ 2 n W_T + W_R\le2^n WT+WR≤2n。
WR为1,所以发送窗口不能超过2n-1。
5-20 在连续 ARQ 协议中,若发送窗口等于 7,则发送端在开始时可连续发送 7 个分组。因此,在每一分组发送后,都要置一个超时计时器。现在计算机里只有一个硬时钟。设这 7 个分组发出的时间分别为 t0,t1,…t6,且tout都一样大。试问如何实现这 7 个超时计时器(这叫软件时钟法)?
定义一个含有7个数据的数组,数组的值表示时间值。当数据帧发出去的时候,即在数组相应位置中填入时间值,该时间值是由帧发送出去这一时刻的时间加上tout后得到的,然后不停地对该数组的值进行扫描。当收到接收端的确认帧时,即将对应的时间数据设置为空,准备记录下一个数据发送的时间;当系统时间大于数组中的某一序号的帧对应的时间时,说明该帧已经超时,需要重传。
5-21 使用连续 ARQ 协议中,发送窗口大小是 3,而序列范围 [0, 15],而传输媒体保证在接收方能够按序收到分组。在某时刻,接收方,下一个期望收到序号是 5。试问:
(1)在发送方的发送窗口中可能有出现的序号组合有哪几种?
(2)接收方已经发送出去的、但在网络中(即还未到达发送方)的确认分组可能有哪些?说明这些确认分组是用来确认哪些序号的分组。
(1)接收方期望序号5的分组,说明已经接收到了序号4,已经对发送方发送了确认。
- 如果发送方收到所有确认,则发送窗口序号组合为(5,6,7)。
- 如果所有确认都丢失,则窗口序号组合为(2,3,4)。
所以有可能为(2,3,4)(3,4,5)(4,5,6)(5,6,7)这四种。
(2)对序号为2,3,4的确认分组可能在网络中,用来确认序号为2,3,4的分组的。
5-22 主机 A 向主机 B 发送一个很长的文件,其长度为 L 字节。假定 TCP 使用的 MSS 有 1460 字节。
(1)在 TCP 的序号不重复使用的条件下,L 的最大值是多少?
(2)假定使用上面计算出文件长度,而运输层、网络层和数据链路层所使用的首部开销共 66 字节,链路的数据率为 10 Mb/s,试求这个文件所需的最短发送时间?
(1)TCP有4字节的序号位,共232个序号。每一个字节都有一个序号,所以L最大能有232字节大小,即4GB。
(2)共需要232/1460=2941759个帧。
帧首部共占66x2941759=194156094字节。
帧共占4294967296+194156094=4489123390字节
发送时间:4489123390x8/107=0.997小时
5-23 主机 A 向主机 B 连续发送了两个 TCP 报文段,其序号分别为 70 和 100。试问:
(1)第一个报文段携带了多少个字节的数据?
(2)主机 B 收到第一个报文段后发回的确认中的确认号应当是多少?
(3)如果主机 B 收到第二个报文段后发回的确认中的确认号是 180,试问 A 发送的第二个报文段中的数据有多少字节?
(4)如果 A 发送的第一个报文段丢失了,但第二个报文段到达了 B。B 在第二个报文段到达后向 A 发送确认。试问这个确认号应为多少?
(1)70到99,30个字节的数据。
(2)100
(3)80
(4)对按序到达的最后一个分组确认,显然第一个没收到,收到第二个不会对第二个进行确认,确认的还是第一个之前的,即为70。
5-24 一个 TCP 连接下面使用 256 kb/s 的链路,其端到端时延为 128 ms。经测试,发现吞吐量只有 120 kb/s。试问发送窗口 W 是多少?(提示:可以有两种答案,取决于接收端发出确认的时机)。
(a)收到全部数据后发确认。
吞吐量 = W W 256 k b i t / s + 256 m s = 120 k b i t / s 吞吐量=\frac{W}{\frac{W}{256kbit/s}+256ms}=120kbit/s 吞吐量=256kbit/sW+256msW=120kbit/s
解得: W ≈ 7228 B 解得:W\approx7228B 解得:W≈7228B
(b)收到一点数据就发送确认,开始发送一个窗口到接收到确认需要256ms
吞吐量 = W 256 = 120 k b i t / s 吞吐量=\frac{W}{256}=120kbit/s 吞吐量=256W=120kbit/s
解得: W = 3840 B 解得:W=3840B 解得:W=3840B
5-25 为什么在 TCP 首部中要把 TCP 端口号放入最开始的 4 个字节?
在ICMP差错报告报文要包括IP首部后8个字节,将TCP端口号放入最开始的4个字节便于用这两个端口确认哪个连接出错了。
5-26 为什么在 TCP 首部中有一个首部长度字段,而 UDP 的首部中就没有这个这个字段?
UDP首部长度字段确定,TCP含有选项需要首部长度字段。
5-27 一个 TCP 报文段的数据部分最多为多少个字节?为什么?如果用户要传送的数据的字节长度超过 TCP 报文字段中的序号字段可能编出的最大序号,问还能否用 TCP 来传送?
TCP首部与IP首部最短时,数据部分最多。因为IP数据报最长65535字节,去掉20字节的TCP首部与20字节的IP首部,得TCP报文段数据部分最长为65495。
可以,可以重复使用TCP的序号。
5-28 主机 A 向主机 B 发送 TCP 报文段,首部中的源端口是 m 而目的端口是n。当 B 向 A 发送回信时,其 TCP 报文段的首部中源端口和目的端口分别是什么?
源端口为A向B发送报文段的目的端口,目的端口为源端口为A向B发送报文段的源端口。
5-29 在使用 TCP 传送数据时,如果有一个确认报文段丢失了,也不一定会引起与该确认报文段对应的数据的重传。试说明理由。
还没来得及重传就收到了更高序号的确认。
5-30 设 TCP 使用的最大窗口为 65535 字节,而传输信道不产生差错,带宽也不受限制。若报文段的平均往返时延为 20 ms,问所能得到的最大吞吐量是多少?
由于带宽不受限制,发送时延为0。
吞吐量 = 65535 B / 20 m s = 26214 k b i t / s 吞吐量=65535B/20ms=26214kbit/s 吞吐量=65535B/20ms=26214kbit/s
5-31 通信信道带宽为 1 Gbit/s,端到端时延为 10 ms。TCP 的发送窗口为 65535 字节。试问:可能达到的最大吞吐量是多少?信道的利用率是多少?
发送时延: 65535 B / 1 G b i t / s = 0.524 m s 65535B/1Gbit/s=0.524ms 65535B/1Gbit/s=0.524ms
最大吞吐量: 65535 B / ( 20 m s + 0.524 m s ) = 25.55 M b i t / s 65535B/(20ms+0.524ms)=25.55Mbit/s 65535B/(20ms+0.524ms)=25.55Mbit/s
信道利用率: 25.55 M b i t / s / 1 G b i t / s = 2.55 25.55Mbit/s/1Gbit/s=2.55% 25.55Mbit/s/1Gbit/s=2.55
5-32 什么是 Karn 算法?在 TCP 的重传机制中,若不采用 Karn 算法,而是在收到确认时都认为是对重传报文段的确认,那么由此得出的往返时延样本和重传时间都会偏小。试问:重传时间最后会减小到什么程度?
Karn算法:在计算加权平均 R T T s RTT_s RTTs时,只要报文段重传了,就不采用其往返时间样本。能够区分开有效的和无效的往返时间样本,改进了往返时间的估算。
如果重传后立即收到原始报文段的确认报文,那么重传时间将会降低到很小,具体根据网络情况而定。
5-33 假定 TCP 在开始建立连接时,发送方设定超时重传时间是RTO = 6秒。
(1)当发送方接到对方的连接确认报文段时,测量出 RTT 样本值为1.5秒。试计算现在的RTO值。
(2)当发送方发送数据报文段并接收到确认时,测量出RTT样本值为2.5秒。试计算现在的RTO值。
(1)
- R T T S = R T T = 1.5 s RTT_S=RTT=1.5s RTTS=RTT=1.5s
- R T T D = R T T / 2 = 0.75 s RTT_D=RTT/2=0.75s RTTD=RTT/2=0.75s
- R T O = R T T S + 4 R T T D = 4.5 s RTO=RTT_S+4RTT_D=4.5s RTO=RTTS+4RTTD=4.5s
(2)
- R T T S = ( 1 − α ) R T T S + α R T T = 0.875 × 1.5 + 0.125 × 2.5 = 1.625 s RTT_S=(1-\alpha)RTT_S+\alpha RTT=0.875\times1.5+0.125\times 2.5=1.625s RTTS=(1−α)RTTS+αRTT=0.875×1.5+0.125×2.5=1.625s
- R T T D = ( 1 − β ) R T T D + β × ∣ R T T S − R T T ∣ = 0.75 × 0.75 + 0.25 × 0.875 ≈ 0.78 s RTT_D=(1-\beta)RTT_D+\beta\times|RTT_S-RTT|=0.75\times0.75+0.25\times0.875\approx0.78s RTTD=(1−β)RTTD+β×∣RTTS−RTT∣=0.75×0.75+0.25×0.875≈0.78s
- R T O D = R T T S + R T T D = 4.75 s RTO_D=RTT_S+RTT_D=4.75s RTOD=RTTS+RTTD=4.75s
5-34 已知第一次测得 TCP 的往返时延的当前值 RTT 是 30 ms。现在收到了三个接连的确认报文段,它们比相应的数据报文段的发送时间分别滞后的时间是:26 ms,32 ms 和24 ms。设 α = 0.1。试计算每一次的新的加权平均往返时间值RTTS。讨论所得出的结果。
第一次: R T T S = 30 m s RTT_S=30ms RTTS=30ms
第二次: R T T S = 27 m s + 2.6 m s = 29.6 m s RTT_S=27ms+2.6ms=29.6ms RTTS=27ms+2.6ms=29.6ms
第三次: R T T S = 29.84 m s RTT_S=29.84ms RTTS=29.84ms
第四次: R T T S = 29.256 m s RTT_S=29.256ms RTTS=29.256ms
新RTT样本值对RTTs有影响但很小。
5-35 用TCP通过速率为1Gbit/s的链路传送一个10MB的文件。假定链路的往返时延RTT=50ms。TCP选用了窗口扩大选项,使窗口达到可选用的最大值。在接收端,TCP的接收窗口为1MB,而发送端采用拥塞控制算法,从慢开始传送。假定拥塞窗口以分组为单位计算,在一开始发送1个分组,而每个分组长度都是1KB.假定网络不会发生拥塞和分组丢失,并且发送端发送数据的速率足够快,因此发送时延可以忽略不计,而接收端每一次收完一批分组后就立即发送确认ACK分组。
(1)经过多少个RTT后,发送窗口大小达到1MB?
(2)发送端把整个10MB文件传送成功共需要多少个RTT?传送成功是指发送完整个文件,并收到所有的确认。TCP扩大的窗口够用么?
(3)根据整个文件发送成功所花费的时间(包括收到所有的确认),计算此传输链路的有效吞吐率。链路带宽的利用率是多少?
(1)发送窗口每经过一个RTT增大一倍,窗口大小1MB=210KB,经过十个RTT后窗口大小就能达到1MB。
(2)由等比数列求和公式得第n个RTT结束后发送的分组数为: 2 n − 1 2^{n}-1 2n−1。
10个RTT结束后发送1MB-1KB的数据,还剩9MB+1KB的数据,由于发送端窗口受接收窗口限制,所以10个RTT结束后就一直为1MB,剩下9MB+1KB的数据需要10个RTT。所以共需要20个RTT。
窗口最大为210<230-1(扩大后窗口最大值),够用。
(3)花费时间:14x50ms=0.7s
吞吐率: 10 M B / 0.7 s = 119.8 M b i t / s 10MB/0.7s=119.8Mbit/s 10MB/0.7s=119.8Mbit/s
利用率: 119.8 M b i t / s / 1 G b i t / s = 11.98 % 119.8Mbit/s/1Gbit/s=11.98\% 119.8Mbit/s/1Gbit/s=11.98%
这章习题有点多,这周还在忙推免,下周更完。
5-36 假定TCP采用一种仅使用线性增大和乘法减小的简单拥塞控制算法,而不使用慢开始。发送窗口不采用字节为计算单位,而是使用分组pkt为计算单位。在一开始发送窗口为1pkt。假定分组的发送时延非常小,可以忽略不计。所有产生的时延就是传播时延。假定发送窗口总是小于接收窗口。接收端每收到一分组后,就立即发回确认ACK。假定分组的编号为i,在一开始发送的是i=1的分组。以后当i=9,25,30,38,50时,发生了分组的丢失。再假定分组的超时重传时间正好是下一个RTT开始的时间。试画出拥塞窗口(也就是发送窗口)与RTT的关系曲线,画到发送第51个分组为止。
5-37 在 TCP 的拥塞控制中,什么是慢开始、拥塞避免、快重传和快恢复算法?这里每一种算法各起什么作用? “乘法减小”和“加法增大”各用在什么情况下?
5-38 设 TCP 的 ssthresh 的初始值为 8 (单位为报文段)。当拥塞窗口上升到 12 时网络发生了超时,TCP 使用慢开始和拥塞避免。试分别求出第 1 次到第 15 次传输的各拥塞窗口大小。你能说明拥塞控制窗口每一次变化的原因吗?
5-39 TCP 的拥塞窗口 cwnd 大小与传输轮次 n 的关系如表所示:
(1)试画出如教材中图 5-25 所示的拥塞窗口与传输轮次的关系曲线。
(2)指明 TCP 工作在慢开始阶段的时间间隔。
(3)指明 TCP 工作在拥塞避免阶段的时间间隔。
(4)在第 16 轮次和第 22 轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?
(5)在第 1 轮次,第 18 轮次和第 24 轮次发送时,门限 ssthresh 分别被设置为多大?
(6)在第几轮次发送出第 70 个报文段?
(7)假定在第 26 轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口 cwnd 和门限 ssthresh 应设置为多大?
5-40 TCP 在进行流量控制时是以分组的丢失作为产生拥塞的标志。有没有不是因拥塞而引起的分组丢失的情况?如有,请举出三种情况。
一、IP数据报需要分片,分片丢失引起分组丢失。
二、终点缓存不够,分组被丢弃。
三、路由器缓存不够,分组丢弃。
5-41 用 TCP 传送 512 字节的数据。设窗口为 100 字节,而 TCP 报文段每次也是传送 100 字节的数据。再设发送端和接收端的起始序号分别选为 100 和 200,试画出类似于教材中图 5-31 的工作示意图。从连接建立阶段到连接释放都要画上。