复习题
R1. 假定网络层提供了下列服务。源主机中的网络层接受最大长度为1200字节和来自运输层的目的主机地址的报文端。网络层则保证将报文段交付给位于目的主机的运输层。假定在目的主机上能够运行许多网络应用进程。
a.设计最简单的运输层协议,该协议将使应用程序数据到达目的主机上所希望的进程。假设目的主机中的操作系统已经为每个运行的应用进程分配一个4字节的端口号。
b.修改这个协议,使它向目的进程提供一个“返回地址”。
c.在你的协议中,该运输层在计算机网络核心中“什么也不做”吗?
a.首先,要有一个进程-端口号关系表,存储不同进程对应的端口号;其次,要有一个程序来处理应用层-运输层-网络层之间的数据解析或数据打包:源主机中,该程序负责将应用层数据以及目的主机中应用程序对应的端口号信息打包交给网络层;目的主机中,该程序负责将从网络层接收的数据交给运输层,并在运输层通过进程-端口号关系表查找到对应的应用程序,将数据(除去端口号)交给应用层对应的应用程序;
b.只需要在源主机的数据包中添加源主机应用程序对应的端口号即可。
c.不是,运输层要负责将从网络层接收到的数据正确地交给应用层的应用程序。
(说明:根据自己的理解写的,在网上或书上没有找到相应答案)
R2.考虑有一个星球,每个人都有一个六口之家,每个家庭都住在自己的房子里,每个房子都有一个唯一的地址,并且每个家庭中的每个人都有一个唯一的名字。假定该星球有一个从源家庭到目的家庭交付信件的邮政服务。该邮件服务要求:(1)在一个信封中有一封信;(2)在信封上清楚地写上目的家庭(并且没有其他东西)的地址。假设每个家庭有一名家庭成员代表为家庭中的其他成员收集和分发信件。这些信没有必要提供接受者。
a.使用对上面问题1的解决方案作为启发,描述家庭成员代表能够使用的协议,以便从发送家庭成员向接收家庭成员交付信件。
b.在你的协议中,该邮政服务必须打开信封并检查信件内容才能提供其服务吗?
a.只需要信封上只需要在信封上写明收件人即可,这样当信件达到家庭时,负责收集和分发的成员由于知道收件人是家里的哪个成员,就可以将信件正确地交付给目的家庭成员。(题目中要求信中没有必要提供接受者,所以在信封上写明接受者是可以的)
b.不需要,因为信封上的目的家庭和接收人姓名这两个信息已经足够将信件从源家庭成员正确地送达目的家庭成员。
(说明:根据自己的理解写的,在网上或书上没有找到相应答案)
R3. 考虑在主机A和主机B之间有一条TCP连接。假设从主机A传送到主机B的TCP报文段使用的源端口号是x,目的端口号是y。那么对于从主机B传送到主机A的TCP报文段而言,源端口号和目的端口号分别是多少?
源端口号是y,目的端口号是x。
3.1.4 描述应用程序开发者为什么可能选择在UDP上运行应用程序而不是在TCP上运行。
如果该应用程序开发者想更精细地控制应用层发送数据的时间和方式,非常注重数据的网络传输效率,但允许数据出现小部分的丢失,那么该应用程序开发者就可能选择UDP而不是TCP。
3.1.5 在今天的因特网中,为什么语音和视频流量常常是经TCP而不是UDP发送?
UDP和TCP现在都用于多媒体应用(语音和视频等),这些应用都能同仁少量的分组丢失,因此可靠数据传输对于这些应用并不是至关重要的,此外TCP的拥塞控制会导致此类应用的实时应用性能变的很差。因此多媒体开发人员通常将这些应用运行在UDP而不是TCP之上。但是在今天的互联网时代,大约75%的按需和实况流式多媒体采用了TCP。原因有两点:①当分组丢包率低时,并且为了安全原因,很多机构会阻塞UDP流量(如利用防火墙等);②UDP缺乏拥塞控制机制,可能导致UDP发送方和接收方之间的高丢包率,并挤垮TCP会话。
R6. 当应用程序运行在UDP上时,该应用程序是否能够得到可靠数据传输?如果能,如何实现?
可以。UDP本身虽然不能可靠传输,但可以在应用程序自身中建立可靠性机制,如增加确认和重传机制来实现。
R7. 假定主机C上的一个进程有一个端口号6789的UDP套接字。假定主机A和主机B都用目的端口号6789向主机C发送一个UDP报文段。这两台主机的这些报文段在主机C都被描述为相同的套接字吗?如果是这样的话,在主机C的该进程将怎样知道源于两台不同主机的这两个报文段?
不会,因为源端口号不相同。在主机C的该进程可以通过报文段中的源端口号来区分源于两台不同主机的这两个报文段。(UDP的报文段中包含源端口号和目的端口号等信息)。
R8. 假定在主机C的端口80上运行一个Web服务器。假定这个Web服务器使用持久连接,并且正在接受来自两台不同主机A和B的请求。被发送的所有请求都通过位于主机C的相同套接字吗?如果他们通过不同的套接字传递,这两个套接字都具有端口80吗?讨论并解释。
被发送的所有请求并不是通过位于主机C的相同套接字,而是通过不同的套接字连接到主机C的。主机C通过解析TCP报文段首部中的源IP地址和源端口号,根据两者的不同来区分不同的报文段。
R9. 在我们的rdt协议中,为什么需要引入序号?
加入序号,是为了接收方可以通过序号来确定新到达的报文段是新的还是重发的。
R10. 在我们的rdt协议中,为什么需要引入定时器?
加入计时器,是为了让发送方确认分组丢失:如果发送方在确定时间内没有收到请求,则认为分组已经丢失,则会重发分组。
R11. 假定发送方和接受方之间的往返时延是固定的并且为发送方所知,假设分组能够丢失的话,在协议rdt3.0中,仍需要定时器吗,试解释之。
仍然需要,因为如果没有定时器,即使发送发知道了往返时延,仍然无法知道一个分组从发送时刻起,过了多久的时间。往返时延的确定只是能够更合理地设置这个倒计时计时器,而不能缺少这个计时器。(每个分组对应一个到机器计时器,即每次发送一个分组,就启动一个倒计时计时器,包括第一次分组和重传分组)。
R12. 在配套网站上使用回退N布Java小程序。
a.让源发送5个分组,在这5个分组任何一个到达目的地之前暂停该动画,然后毁掉第一个分组并继续该动画,描述发生的情况。
b.重复该实验,只是现在让第一个分组到达目的地并毁掉第一个确认。再次描述发生的情况。
c.最后,尝试发送6个分组。发生了什么情况?
TODO
R13. 重复12题,但是现在使用选择重传Java小程序。选择重传和回退N步有什么不同?
TODO
3.5.14 是否判断题:
a. 主机A通过一条TCP连接向主机B发送一个大文件。假设主机B没有数据发往主机A。因为主机B不能随数据捎带确认信息,所以主机B将不向主机A发送确认。
b. 在连接的整个过程中,TCP的RcvWindow的长度不会变化。
c. 假设主机A通过一条TCP连接向主机B发送一个大文件。主机A发送的未被确认的字节数不会超过接收缓存的大小。
d. 假设主机A通过一条TCP连接向主机B发送一个大文件。如果对于这次连接的一个报文段序列号为m,则对于后继报文段的序列号必然为m+1。
e. TCP报文段在它的首部中有一个rwnd字段。
f. 假定在一条TCP连接中最后的SampleRTT等于1s,那么对于这一连接的TimeoutInterVal的当前值必定≥1s。
g. 假定主机A通过一条TCP连接向主机B发送一个序号为38的4字节报文段。这个报文段的确认号必定是42。
a:错误。TCP连接中,如果主机B没有数据要发往主机,它就不能随数据捎带确认信息,但是,TCP要求B必须发送确认,因此B将向A发送非捎带的确认信息。
b:错误。rwnd的值是动态的,它是表示连接的缓存中还有多少空间。
c:正确。
d:错误。TCP的序列号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。一个报文段的序号应该是该报文段手字节的字节流编号。举例来说,假如主机A上的一个进程想通过一条TCP连接向主机B上的一个进程发送一个数据流,则主机A的TCP会隐式地为该数据流的每个字节进行编号。假定数据流由一个包含500 000 字节的文件组成,其MSS(最大报文段长度,不包括协议首部,只包含应用数据)为1000字节,数据流的首字节编号是0。该TCP将为该数据流构建500个报文段。给第一个报文段分配序号0,第二个报文段分配序号1000,第三个报文段分配序号2000,以此类推。每一个序号被填入到相应的TCP报文段首部的序号字段中。
e:正确。rwnd即接收窗口(receive window),用来告知发送方,自己在该TCP连接的缓存中还有多少可用空间。
f:错误。超时时间是EstimatedRTT 和SampleRTT的函数,不能由一个SampleRTT值决定。TimeoutInterval = EstimatedRTT + 4*DevRTT。
g:错误。主机A向主机B发送报文(序号为38,字节数为4),假如B成功收到该报文段,并向A发送确认报文段,这个确认报文段中的确认号才是42(告诉A,我现在收到这个你发的报文段了,你可以发从42开始发送了),而不是最初从A发向B的那个报文段的确认号是42。即主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号。
R15. 假定主机A通过一条TCP连接向主机B连续发送两个TCP报文段。第一个报文段的序号为90,第二个报文段的序号为110。
a.第一个报文段中有多少数据?
b.假设第一个报文段丢失而第二个报文段到达主机B,那么在主机B发往主机A的确认报文中,确认号应该是多少?
a:第一个报文段中的数据:20字节(指应用数据,不包含报文段首部)。
b:确认号是90。因为TCP提供的是累计确认(只确认该流中至第一个丢失字节为止的字符)。
R16. 考虑3.5节中讨论的Telnet的例子。在键入字符C数秒之后,用户又键入字符R。那么在用户键入字符R之后,总共发送了多少个报文段?这个报文段中的序号和确认号字段应该填入什么?
总共发送了3 个报文段:
第一个报文段由客户发往服务器,序号为43,确认号为80,数据为字符‘R’(占一个字节);
第二个报文段是由服务器发往客户,序号为80,确认号为44,数据为字符‘R’(占一个字节);
第三个报文是从客户发送服务器序号为44,确认号为81,数据为空。
(与键入字符C的过程一致,参考书上的流程即可)。
R17. 假设两个TCP连接存在于一个带宽为R bps的瓶颈链路上。它们都要发送一个很大的文件(以相同方向经过瓶颈链路),并且两者是同时开始发送文件。那么TCP将为每个连接分配多大的传输速率?
TCP将为每个连接分配R/2的传输速率:因为TCP趋于在竞争的多条TCP连接之间提供一段瓶颈链路带宽的平等分享。
R18 .是非判断题。考虑TCP的拥塞控制,发送方定时器超时时,其阀值将被设置为原来值的一半。
错误。它将被设置为拥塞窗口cwnd的一半。
R19.在3.7节的“TCP分岔”讨论中,对于TCP分岔的响应时间,断言大约是4*RTTFE + RTTBE + 处理时间。评价该断言。
RTTFE表示客户与前端服务器之间的往返时间,4倍是表示用于建立TCP连接的RTTFE加上用于3个数据窗口的3个RTTFE(如果客户距离前端服务器足够近,RTTFE就会小得微不足道)。RTTBE表示的是前端服务器与数据中心(后端服务器)之间的往返时间,前端服务器以非常大的窗口向数据中心维护一条TCP连接,RTTBE约为RTT。
习题
TODO