计算机网络-自顶向下方法 第三章课后习题答案(第七版)

复习题

R1.
a) 就叫这个协议为简单传输协议STP(Simple Transport Protocol)。在发送方,STP从发送进程接收不超过1196字节的数据块、目标主机地址和目标端口号。STP向每个块添加一个4字节的头,并将目标进程的端口号放在头中。STP然后将目标主机地址和结果段提供给网络层。网络层将段交付给目的地主机的STP。目的主机基于STP检查段中的端口号,从段中提取数据,并将数据传递给由端口号标识的进程。

b) 在发送方,STP从发送进程接收不超过1192字节的数据块、目标主机地址和目标端口号。STP向每个块添加一个8字节的头,分别将目标进程的端口号、源进程的端口号放在头中。目的主机收到数据后,根据目的端口号将提取出的数据和源端口号交给指定进程。

c) 不需要。

R2.
a) 寄信时,家庭成员需要将信件本身、目的地房屋的地址和收信人的姓名交给代表。代表清楚地在信的顶部写上收信人的名字。然后,代表把信放进一个信封,并在信封上写上目的地房子的地址。然后,该代表将这封信交给了该星球的邮政服务机构。在接收方,代表从邮局收到信件,从信封中取出信件,并注意信件顶部的收信人姓名。然后,代表把信交给这个名字的家庭成员。

b) 不需要,邮政服务只需要送到目的地址即可。

R3.
源端口:

y

y

y,目的端口:

x

x

x

R4.
(根据UDP优点作答)

  1. 某些应用程序不需要提供可靠传输。
  2. 某些应用程序不希望通过繁杂的握手环节降低了指令的实时性与执行速度。
  3. 某些流视频程序不希望数据传输收到拥塞控制。

R5.
由于大多数防火墙被配置为阻止UDP通信,因此使用TCP处理视频和语音通信可以让通信通过防火墙。

这个真难想到,我开始的答案是:过多的UDP连接会造成大量丢包,而且使TCP拥塞

R6.
是的。应用程序开发人员可以将可靠的数据传输放到应用层协议中。然而,这将需要大量的工作和调试。(例如应用层的请求隔两秒没收到,手动重发)

R7.
是的,这两个段将被定向到相同的套接字。由于UDP报文结构中没有IP地址字段,对于每个接收到的段,在套接字接口处,操作系统将向进程提供IP地址,以确定各个段的起源。

R8.
对于每个持久连接,Web服务器创建一个单独的“连接套接字”。每个连接套接字都由一个四元组标识:(源IP地址、源端口号、目的IP地址、目的端口号)。

当主机C接收和IP数据报时,它检查数据报/段中的这四个字段,以确定应该将TCP段的有效负载传递给哪个套接字。因此,来自A和B的请求通过不同的套接字。这两个套接字的标识符都有80作为目的端口。但是,这两个套接字源IP地址不同。

与UDP不同,当传输层将TCP段的有效负载传递给应用程序进程时,它不指定源IP地址,因为这是由套接字标识符隐式指定的。

R9.
因为接收方发送的确认报文(ACK、NAK)如果在链路上发生了错误,发送方就无法识别这个确认报文,所以发送方就重发一遍报文。但接收方不知道这个报文是上个报文的重传还是新的报文

引入序号机制,就能解决这个问题。发送方会在报文中加入一个序号,接收方收到后,如果和上一个确认的报文序号是一样的,那么就是重传。如果不一样,那就是新报文。

R10.
如果发送方发送的报文丢失了、或者是接收方确认后发送的ACK报文丢失了,发送方就收不到确认报文,就需要重传当前报文。

所以发送方每发送一个报文时,就开启一个定时器,如果收到某个ACK确认,那么就停止对应定时器。直到某个定时器响了,就重传该报文。

R11.
是必须的。只是定时器的时间更精确了,刚好是一个往返时延。

R12.
小程序链接:Go-Back-N
a) 第一个分组毁掉后,后面的分组都不被接收方接收。发送方隔一段时间后重发这5个报文。

b) ACK丢失不会触发任何重传,因为Go-Back-N使用累积确认。

c) 发送者无法发送第6个数据包,因为发送窗口大小固定为5。

R13.
小程序链接:选择重传
a) 当数据包丢失时,接收到的四个数据包被缓冲到接收端。超时后,发送方重新传输丢失的数据包。

b) 发送方重发第一个数据包,接收方为发送了第一个数据包ACK。

c) 发送者无法发送第6个数据包,因为发送窗口大小固定为5。

当一个包丢失时,Go-Back-N重新传输之后的所有包,而选择重传只重新传输丢失的包。在确认ACK丢失的情况下,选择重传收到重复的包后发送一个重复的ACK,而Go-Back-N使用累积确认,因此重复的ACK是不必要的。

R14.
a) 错
b) 错
c) 对
d) 错
e) 对
f) 错
g) 错

R15.
a) 20字节
b) 90

R16.
3 个报文段.
First segment: seq = 43, ack =80;
Second segment: seq = 80, ack = 44;
Third segment; seq = 44, ack = 81;

R17.

R

/

2

R/2

R/2

R18.
错,不是设置为原来慢开始门限的一半,而是设置为当前拥塞窗口大小的一半。

R19.
Front End Server为近处代理站点,Back End Server为远处站点。
在这里插入图片描述所以一共有4个客户与代理站点的RTT,外加一个代理与目标站点的RTT,再加上处理时间。

习题

P1.
a)
e) 可以相同
f) 不能相同。(可能你会想到并行连接,并行连接的源端口号是不同的)

P2.
主机A的连接:源端口为80,目标端口26145;源IP为B,目标IP为A
主机C的左侧连接:源端口为80,目标端口为7532;源IP为B,目标IP为C
主机C的右侧连接:源端口为80,目标端口为26145;源IP为B,目标IP为C

P3.
在这里插入图片描述
在这里插入图片描述
结果取反:1 1 0 1 0 0 0 1

接收方将带有该反码的4个8比特字节求和,如果结果为全1,就说明没出问题。

1比特的差值可以检测出来,但2比特差可能检测不出来:比如第一个8比特字节的最后一个字节由1变为0,第二个8比特字节的最后一个字节由0变为1,这样求和取反就会得到和正常情况相同的结果。

P4.
a) 00111110
b) 10111111
c) 第一个字节:01010100; 第二个字节:01101101.(同时翻转第5个比特位)

P5.
不能确信。上面的两题都说明了情况,不解释了。

P6.
假设发送方处于“从上面等待呼叫1”的状态,而接收方(作业中显示的接收方)处于“从下面等待1”的状态。发送方发送一个序列号为1的数据包,并转换为“Wait for ACK or NAK 1”,等待ACK或NAK。

假设现在接收者正确接收到序列号为1的数据包,发送ACK,并转换到状态“从下面等待0”,等待序列号为0的数据包。

但是,ACK已损坏。当rdt2.1发送方获得损坏的ACK时,它重新发送序列号为1的数据包。然而,接收方正在等待一个序列号为0的数据包(如家庭作业问题所示),当它没有收到序列号为0的数据包时,它总是发送一个NAK。

因此,发送方将总是发送序列号为1的数据包,而接收方将总是获取那个数据包。两者都不会从那个状态中取得进展。

P7.
为了最好地回答这个问题,考虑一下我们为什么首先需要序列号。我们看到,发送方需要序列号,以便接收方能够判断数据包是否是已经接收到的数据包的副本。在

A

C

K

s

ACK_s

ACKs的情况下,发送方不需要此信息(即。在ACK上的一个序列号)告诉检测一个重复的ACK。对于rdt3.0接收器来说,一个重复的ACK是显而易见的(根据ACK中的确认号),因为当它收到原始ACK时,它就转换到下一个状态。重复的ACK不是发送方需要的ACK,因此被rdt3.0发送方忽略。

P8.
协议rdt3.0的发送方与协议2.2的发送方不同之处在于添加了超时。我们已经看到,超时的引入增加了发送者到接收者数据流中出现重复数据包的可能性。然而,协议rd .2.2中的接收方已经可以处理重复的数据包。(在rdt 2.2中,如果接收方发送了一个丢失的ACK,然后发送方重新传输旧数据,则会出现接收端重复。)因此,协议rdt2.2中的接收方也将作为协议rdt 3.0中的接收方。

P9.
在这里插入图片描述P10.
分组发送时,添加一个定时器,当超过给定的最大时延后还没有收到ACK或NAK时,重发分组。

P11.
会发生死锁。

发送方:发送了包0后,进入等待ACK状态

接收方:等待0状态,收到了一个损坏的包。如果什么都不做,那么就会一直在这个状态等待

P12.
协议仍然可以工作,因为如果接收到的有错误的数据包实际上已经丢失(而且从接收者的角度来看,它永远不知道是哪个事件),那么就会发生重传。如果有,就会发生。

要了解这个问题背后更微妙的问题,就必须考虑到过早超时的发生。在这种情况下,如果数据包的每个额外副本都被压缩,并且每个额外的ACK都会导致当前数据包的另一个额外副本被发送,那么当n趋近于无穷大时,数据包发送的次数将无限制地增加。

P13.
在这里插入图片描述
P14.
不会更好。如果在偶尔发送数据的情况下只使用NAK,那么接收方检测到包x丢失的途径只能是:接收了x - 1号包后,再接收到了x + 1号包,这时,接收方才知道x号包丢了。又由于发送方发送间隔比较长,那么x号包得经过好久才能收到重传。所以在重传速度方面体现不了优势,况且还存在NAK丢失的情况,接收方就永远收不到目标包的重传了

如果要发送大量数据,而且很少丢包,那么只使用NAK要比ACK好些,只有当接收方收到损坏的分组时才发送NAK。

P15.
发送一个分组耗时12ms,如果要满足利用率为90%,那么n * 12ms / 30us = 90%,计算得n为2451个最大报文段长度。

P16.
可以提升信道利用率,发送方会发送更多管道数据到链路中。

有安全隐患,如果数据包丢失了,发送方不知道如何重发。

P17.
在这里插入图片描述
P18. - P21.

P22.
a) 可能是[k - 3, k]到[k, k + 3]

b) [k - 4, k - 1]

P23.
1/2序号长度.

P24.
a) 对,假设发送方的窗口为3,发送了1,2,3。接收方收到后,给出了3个ACK,可能中途出现了拥塞,ACK迟到了,于是发送方重发了1,2,3。这时之前的3个ACK到了发送方,发送方将窗口移到4,5,6,之后重发的3个包对应的ACK也收到了,这就落到了窗口之外。
b) 对,因为发送方接收到了第n个ACK后,就认为前n个全被接收方收到了,窗口就可以向前移动,这时可能有<n而且在窗口外的确认到达。(第二种情况就和a中出现的一样)
c) 对
d) 对

在发送窗口和接收窗口都为1时,GBN和SR与比特交替协议是等价的。

P25.
a) TCP段里要放一些不必要的东西(序号、确认号),UDP段里能放更多的有效载荷。
b) 对于TCP,由于流量控制和拥塞控制,从应用程序将数据写入其发送缓冲区到将数据提供给网络层之间可能存在显著的延迟。UDP没有延迟由于流量控制和拥塞控制。

P26.
a) 序号的最大值和MSS没关系,

L

=

2

32

=

4

,

294

,

967

,

296

L=2^{32}=4,294,967,296

L=232=4,294,967,296

b) 249s

P29.
a) 防止SYN洪泛攻击
b) 不行
c) 不,服务器可以简单地在计算这些初始序列号时添加一个时间戳,并为这些序列号选择一个生存时间值,并丢弃过期的初始序列号。


版权声明:本文为God_woodson原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>