42、传输层习题及参考答案

  1. 在传输原语中, LISTEN 是一个阻塞调用。试问这是严格要求的吗?如果不是,请解释如何使用一个非阻塞的原语。与正文中描述的方案相比,你的方案有什么优点?
    解:不是。LISTEN可能表示愿意建立新的连接,而不是阻止。当尝试连接时,可以给调用者一个信号。然后,它将执行,例如,OK或REJECT接受或拒绝连接。

  2. 传输服务原语假设在两个端点之间建立连接的过程是不对称的,一端(服务器〉执行LISTEN,而另一端(客户端〉执行CONNECT 。然而,在对等应用中,比如BitTorrent那样的文件共享系统,所有的端点都是对等的。没有服务器或客户端功能之分。试问如何使用传输服务原语来构建这样的对等应用?
    解:由于这两个端点是对等点,因此需要一个单独的应用程序级机制,在运行时通知端点哪个端将充当服务器,哪个端将充当客户端以及它们的地址。这样做的一种方法是有一个单独的协调程序,在建立端点之间的连接之前将此信息提供给端点。

  3. 在图示的底层模型中,它的假设条件是网络层的数据包有可能被丢失,因此,数据包必须被单独确认。假如网络层百分之百可靠,并且永远不会丢失数据包,试问图中需要做什么修改吗?如果需要的话(斜体标记的状态是由到达的包引起的。实线表示客户的状态序列,虚线表示服务器的状态序列)。在这里插入图片描述
    解:从被动建立到已建立的虚线不再取决于收到的确认。从本质上讲,被动建立待定状态消失了(因为客户机收到连接接收段之后不必发送确认段了,所以服务器可以在收到连接建立请求的时候就可以直接建立连接了,注)。

  4. 在本章的套接字编程实例的两部分中,有一条注释说明了SERVER PORT 在客户机和服务器中必须相同。试问为什么这一条如此重要?
    解:如果客户端向服务器端口发送数据包,而服务器没有监听该端口,则该数据包将不会传递到服务器(所以双方必须约定一个特定端口,注)。

  5. 在Internet 文件服务器例子中,除了服务器端的监听队列为满之外,试问还有其他原因能导致客户机的connect ()系统调用失败吗?假设网络完美无缺。
    解:服务器没有执行listen()方法调用(即服务器没有监听)

  6. 评判一个服务器是否全程活跃,或者通过进程服务器来按需启动它,的一个标准是它所提供服务的使用频率。试问你能想出作出这一决定的任何其他标准吗?
    解:另一个标准是客户端如何受到进程服务器技术中涉及的额外延迟的影响(服务器可能在执行过程中,但是没有响应客户机而带来了延迟,应该是这个吧?注)。所请求的服务器必须加载,并且可能必须在客户端请求得到服务之前进行初始化(所以后半句是个解决方法,注)。

  7. 假设采用时钟驱动方案来生成初始序号,该方案用到了一个15 位的时钟计数器。每隔100 毫秒时钟滴答一次,最大数据包生存期为60 秒。试问,每隔多久需要重新同步一次?
    (a )在最差情况下。
    (b )当数据每分钟用掉240 个序号的时候。
    解:(a)2的15次方,即32768次滴答,耗时3276.8秒。假定数据发送率极低(接近0),那么发送方在3276.8-60=3216.8秒时进入禁止区,需要同步一次
    (b)每分钟使用 240 个序列号,即每秒使用 4 个号码,如果时间以 t 表示(以秒为单位),那么实际的序列号是 4t。现在由于每秒钟 10 个滴答,禁止区的左边是10(t-3216.8)。令 4t =10(t-3216.8),得  t=5316.3 秒。即当  t=5316.3 时,开始进入禁止区,因此当  t=5316.3 时需要进行一次重新同步。(此题好好研究。。。)

  8. 试问,为什么最大数据包生存期T 必须足够大,大到确保不仅数据包本身而且它的确认也消失在网络中?
    解:下图中,如果ACK包到达后,如果还有一个老的对y的确认存活于网络中,那么就会建立一个不需要的连接(或许人生不应该在这几个题目上纠结超过三个小时)。在这里插入图片描述

  9. 想象用两次握手过程而不是三次握手过程来建立连接。换句话说,第三个消息不再是要求的。试问现在有可能死锁吗?请给出一个例子说明存在死锁,或者证明死锁不存在。
    解:死锁是有可能的。例如,一个包突然到达一个,并确认它,但是确认丢失了。a现在是开放的,而b根本不知道发生了什么。同样的事情发生在b上,两者都是打开的,但是需要不同的序列号。必须引入超时以避免死锁。

  10. 想象一个广义的n-军队对垒问题,在这里任何两支蓝军达成一致意见后就足以取得胜利。试问是否存在一个能保证蓝军必赢的协议?
    解:没有。(可以搜索一下两军对垒问题,这个问题是类似于TCP协议连接释放的问题)

  11. 请考虑从主机崩溃中恢复的问题。如果写操作和发送确认之间的间隔可以设置得相对非常小,那么,为了使协议失败的概率最小,试问两种最佳的发送端-接收端策略是什么?
    解:即崩溃发生在写与确认操作之前或之后。发送端在前者情况下,没有收到确认将会重传,而后者没有影响。接收端都没有任何影响。

  12. 在下图中,假设加入了一个新的流E,它的路径为从Rl 到R2 ,再到R6 。试问对于5 个流的最大-最小带宽分配有什么变化?
    解:在链路R1R2和R2R3上,流A的分配为1/2(由于在路由器5上,有4个流,所以除A外都变成1/4的带宽)。流E的分配将在链接R1R2和R2R6上分配1/2。所有其他保持不变。在这里插入图片描述

  13. 请讨论信用协议与滑动窗口协议的优缺点。
    解:滑动窗口更简单,只有一组参数(窗口边缘)可以管理。此外,窗口大小增加或减少的问题也不会发生,即使分段到达的顺序是错误的。然而,信用计划更灵活,允许对缓冲进行动态管理,允许独立于确认。

  14. 拥塞控制的公平性方面有一些其他的策略,它们是加法递增加法递减(AIAD, AdditiveIncrease Additive Decrease )、乘法递增加法递减( MIAD, Multiplicative Increase AdditiveDecrease )、乘法递增乘法递减( MIMD, Multiplicative Increase Multiplicative Decrease )。请从收敛性和稳定性两个方面来讨论这三项政策。
    解:在AIAD和MIMD中,用户将沿着效率线振荡,但不会收敛。MIAD会像AIMD一样收敛(但不如后者公平,MIAD会向两极偏移,远离中心点,注)。这些政策都不固定。在AIAD和MIAD中减少策略不具有攻击性,而在MIAD和MIMD中增加策略则不温和。

  15. 试问,为什么会存在UDP ?用户进程使用原始IP 数据包还不够吗?
    解:不够。IP数据包包含指定目标计算机的IP地址。一旦这样的数据包到达,网络处理程序不知道将它交给哪个进程。UDP数据包包含目标端口,因此它们可以被传递到正确的过程中。

  16. 请考虑一个建立在UDP 之上的简单应用层协议,它允许客户从一个远程服务器获取文件,而且该服务器位于一个知名地址上。客户端首先发送一个请求,该请求中包含了文件名;然后服务器以一个数据包序列作为响应,这些数据包中包含了客户所请求的文件的不同部分。为了确保可靠性和顺序递交,客户和服务器使用了停-等式协议。忽略显然存在的性能问题,试问你还能看得出这个协议存在的另一个问题吗?请仔细想一想进程崩溃的可能性。
    解:客户端可能会得到错误的文件。假设客户端a发送请求文件f1,然后崩溃。然后,另一个客户端b使用相同的协议请求另一个文件f2。假设在同一台机器上运行的客户机b(具有相同的IP地址)将其UDP套接字绑定到a之前使用的相同端口。此外,假设b的请求失败了。当服务器(对请求的答复)到达时,客户端b将接收到它,并假设它是响应它自己的请求,但是文件却不正确。

  17. 一个客户通过一条1 Gbps 的光纤向100 千米以外的服务器发送一个128 字节的请求。试问在远过程调用中这条线路的效率是多少?
    解:在1 Gbps线路上发送1000比特需要1μ秒(估算,实际1024bit)。光纤中的光速是200公里/毫秒,所以请求到达需要0.5毫秒,回复返回需要0.5毫秒。总共在1毫秒内传输了1000比特。这相当于1兆比特/秒,或1/10的效率。

  18. 继续考虑上一个问题的情形。对于给定的1 Gbps 线路和1 Mbps 线路两种情况,请计算最小的可能响应时间。试问由此你得出了什么结论?
    解:在1 Gbps时,响应时间由光速决定。可以达到的最佳效果是1毫秒。在1 mbps时,抽出1024位需要大约1毫秒,最后一位到达需要0.5毫秒,在最佳情况下回复需要0.5毫秒。最好的RPC时间是2毫秒。得出的结论是,将线路速度提高1000倍,只会获得性能上的两倍。除非千兆位线是惊人的便宜,否则不值得有这个应用。(这里都是光纤,实际上小寒觉得1Mbps的光纤太罕见了)

  19. UDP 和TCP 在传递消息时,都使用了端口号来标识接收方实体。请给出两个理由说明为什么这两个协议要发明一个新的抽象ID (端口号),而不用进程ID ?在设计这两个协议的时候,进程ID 早己经存在。
    解:这里有三个原因。首先,进程ID是OS特定的,使用进程ID会使这些协议依赖于OS(所以不同的主机是有不同的进程ID)。第二,单个进程可以建立多个通信渠道。第三,让进程监听众所周知的端口很容易,但众所周知的进程ID是不可能的。

  20. 一些RPC 实现为客户端提供了一个选项,使用实现在UDP 之上的RPC 还是使用实现在TCP 之上的RPC 。试问在什么样的条件下,客户端更喜欢使用基于UDP 的RPC?在什么条件下,他或许更喜欢使用基于TCP 的RPC?
    解:如果操作是幂等的,并且所有参数或结果的长度都足够小,可以容纳在单个UDP数据包中,则客户端将在UDP上使用RPC。另一方面,如果参数或结果很大,或者操作不是幂等的,他将使用基于TCP 的RPC。

  21. 考虑两个网络NI 和N2 ,在源端A 和目的端D 之间有相同的平均延迟。在NI 中,不同的数据包所经历的延迟是均匀分布,且最大延迟为10 秒:而在N2 中, 99%的数据包所经历的延迟都小于l 秒,且没有最大延迟上界。请讨论在这两种情况下如何用RTP来传输实时音频/视频流。
    解:在N1中,由于最大延迟为10秒,可以选择一个适当的缓冲区在目的地D存储略多于10秒的数据。这将确保不会出现抖动。另一方面,在N2中,一个较小的缓冲器,可能使用2-3秒,但是一些帧(经历更大的延迟)将被删除。

  22. 试问最小TCP MTU的总长度是多少?包括TCP 和IP 的开销,但是不包括数据链路层的开销。
    解:默认段为536字节。TCP增加20个字节,IP也增加20个字节,使默认的576字节总计。

  23. 数据报的分段和重组机制由IP 来处理,对于TCP 不可见。试问,这是否意味着TCP不用担心数据错序到达的问题?
    解:即使每个数据报都完好无损地到达,数据报也有可能以错误的顺序到达,因此TCP必须准备好适当地重新组装消息的各个部分。

  24. RTP 被用来传输CD 品质的音频,这样的音频信号包含一对16 位的采样值,采样的频率为每秒钟44100 次,每个采样值对应于一个立体声声道。试问RTP 每秒钟必须传输多少个数据包?
    解:每个样值占用4个字节(立体声2字节、16位2字节)。这就给出了每个包总共256个样本(不知道256怎么来的;44.1KHz是理论上的CD音质界限,注)。有44100个样本/秒,所以每包256个样本,需要44100/256个或172个数据包来传输一秒的音乐。

  25. 试问有可能将RTP 代码放到操作系统内核中,与UDP 代码放在一起吗?请解释你的答案。
    解:当然。调用者必须提供所有所需的信息,但是RTP没有理由不能在内核中,就像UDP一样。

  26. 主机l 上的一个进程己经被分配了端口p ,主机2 上的一个进程也己经被分配了端口q,试问这两个端口之间有可能同时存在两个或者多个TCP 连接吗?
    解:不能。连接仅由其套接字标识。因此,(1,p)-(2,q)是这两个端口之间唯一可能的连接。

  27. 在TCPP头格式中,我们看到除了32 位的确认号字段外,在第四个字还有一个ACK 标志位。试问这个标志位有额外的意义吗?为什么有?或者为什么没有?
    解:ack位用于判断是否使用32位字段。但如果没有,则必须始终使用32位字段,如果有必要的话,必须确认已经确认的字节。简而言之,对于正常的数据通信来说,它并不是绝对必要的。然而,它在连接建立过程中起着至关重要的作用,在三次握手的第二条和第三条消息中使用它。

  28. TCP 段的最大有效载荷为65 495 字节。试问为什么选择如此奇怪的数值?
    解:整个TCP段必须适合于IP数据包的65515字节有效负载字段(IP头为20字节)。由于tcp报头至少为20个字节,因此只剩下65 495个字节用于TCP数据。

  29. 描述从图中进入SYN RCVD (到达一个连接请求,等待ACK)状态的两种途径。
    解:一种方法是先从LISTEN开始。如果接收到SYN,则协议进入SYN RCVD 状态。另一种方法是在进程主动尝试执行打开并发送SYN时开始。如果另一方也打开了,并且接收了一个SYN,则还将输入SYN RCVD状态。在这里插入图片描述

  30. 请考虑在一条往返时间为10 毫秒的无拥塞线路上使用慢速启动算法的效果。接收窗口为24 KB,最大段长为2 KB。试问需要多长时间才能首次发送满窗口的数据?
    解:第一个突发2K,10ms,20ms,30ms后为4K、8K、6K字节。40ms后为min{24K,32K},所以下一个是24K。

  31. 假设TCP 的拥塞窗口被设置为18 KB,并且发生了超时。如果接下来的4 次突发传输全部成功,试问拥塞窗口将达到多大?假设最大段长为1 KB 。
    解:由于超时,所以接下来的第一次突发还是1K,到第四次即为8K。

  32. 如果TCP 往返时间RTT 的当前值是30 毫秒,紧接着分别在26 、32 、24 毫秒确认到达,那么,若使用Jacobson 算法,试问新的RTT 估计值为多少?请使用α = 0.9 。
    解:公式为:SRTT =αSRTT + (1 一α) R。新的值分别为29.6, 29.84, 29.256ms(计算样例:SRTT=0.930+0.126)。

  33. 一台TCP 机器正在通过一条1 Gbps 的信道发送满窗口的65 535 字节数据,该信道的单向延迟为10 毫秒。试问可以达到的最大吞吐量是多少?线路的效率是多少?
    解:每20毫秒可以发送一个窗口。这提供了50个窗口/秒,最大数据速率约为330万字节/秒。线路效率为26.4 mbps/1000 mbps,即2.6%。

  34. 一台主机在一条线路上发送1500 字节的TCP 有效载荷,最大数据包生存期为120 秒,要想不让序号回绕,试问该线路的最快速度为多少?要考虑TCP 、IP 和以太网的开销。假设可以连续发送以太网帧。
    解:目标是在120秒内发送232字节或35 791 394个有效负载字节/秒(32是序号位数,注)。这是23 860 个1500字节帧/秒。TCP开销为20字节。IP开销为20字节。以太网开销为26个字节。这意味着对于1500字节的有效负载,必须发送1566字节。如果我们要每秒钟发送23860个帧(每帧1566字节),我们需要一条299 Mbps的线路。在任何比这更快的情况下,我们都会面临两个不同的tcp段同时拥有相同的序列号的风险。

  35. 为了解决IPv4的局限性,主要经过IETF的努力,导致了IPv6 的设计,但仍然有很多人不愿意采用这个新版本。然而,却没有人做出解决TCP 限制所需要的重大努力。请解释为什么会这样。
    解:IP是网络层协议,TCP是端到端传输层协议。对IP协议规范的任何更改都必须包含在因特网上的所有路由器上。另一方面,只要两个端点运行兼容版本,TCP就可以正常工作。因此,可以在不同的主机上同时运行许多不同版本的TCP,但IP的情况并非如此。

  36. 在一个网络中,最大段长为128 字节,段的最大生存期为30 秒,序号为8 位,试问每个连接的最大数据率是多少?
    解:发送者不能在30秒内发送超过255个段(2的8次方),即255×128×8bit。因此,数据速率不超过8.704 kbps。

  37. 假设你正在测量接收一个段所需要的时间。当发生一个中断时,你读出系统时钟的值(以毫秒为单位)。当该段被完全处理后,你再次读出时钟的值。你测量的结果是270 000 次为0 毫秒, 730 000 次为1 毫秒。试问接收一个段需要多长时间?
    解:计算平均值:(270 000×0+730 000ms)/1 000 000。它需要730μs。

  38. 一个CPU 执行指令的速率为1000 MIPS 。数据复制可以按每次64 位来进行,每个字的复制需要花费10 条指令。如果一个入境数据包要被复制4 次,试问这个系统能处理一条1 Gbps 的线路吗?为了简单起见,假设所有的指令,包括读或者写内存的指令,都以1000 MIPS 的全速率运行。
    解:复制8个字节需要4×10=40条指令。40条指令需要40ns(纳秒)。因此,每个字节需要5个ns的CPU时间进行复制。因此,该系统能够处理200 MB/秒或1600 Mbps。如果没有其他瓶颈,它可以处理1 Gbps线路。序列空间的大小大约为264字节(这一句是什么意思?)。

  39. 为了避开当序号回绕时老的数据包仍然存在这个问题,可以使用64 位序号。然而,从理论上讲,光纤的运行速度可以达到75 Tbps。试问在未来的75 Tbps 网络中使用64位序号,数据包的最大生存期为多少才能确保不会发生回绕问题?假设每个字节都有自己的序号,像TCP 那样。
    解:2×1019字节75 Tbps发射机以每秒9.375×1012个序列号(每个字节一个序号,注)的速率耗尽序列空间。序号回绕需要200万秒。由于一天中有86 400秒的时间,它将需要超过3周的时间来回绕,即使是75 tbps。最大数据包寿命小于3周就能防止问题的发生。简而言之,64位很可能在很长一段时间内起作用。

  40. 在前面章节中,我们计算了主机以80 000 包/秒的速度往一条千兆线路发送,只使用了6250 指令,留下一半的CPU 时间给应用程序。这里计算时假设数据包大小为1500 字节。针对ARPANET 大小的数据包(128 字节)重复上述计算。在这两种情况下,假设给出的数据包大小均包括了所有开销。
    解:如果数据包是11.72倍(1500/128),那么每秒的数量是11.72倍,所以每个数据包只能得到6250/11.72或533条指令。

  41. 对于一个运行在4000 千米距离上的1 Gbps 网络,限制因素是延迟而并非带宽。请考虑这样一个MAN(大型的计算机网络,属于IEEE802.6标准,是介于LAN和WAN之间能传输语音与数据的公用网络),源端和接收方之间的平均距离为20 千米。试问多大的速率使得1 KB数据包的传输延迟等于光速的往返延迟?
    解:光纤和铜的光速约为200公里/毫秒。对于一条20公里长的线路,延迟是100μ秒单程和200μ秒往返行程。一个1Kb的数据包有8192位。如果发送8192位并得到确认的时间为200μ秒,则传输和传播延迟相等。如果B是位时间,那么我们就有8192 B=2×10−4秒。数据速率为1/B,大约为40 Mbps。

  42. 试计算下列网络的带宽-延迟乘积:(1) T1 ( 1.5 Mbps) ; (2 )以太网(10 Mbps) ;(3) T3 (45 Mbps )和( 4) STS-3 (155 Mbps )。假设RTT 为100 毫秒。请回忆TCP头有16 位保留用作窗口大小( Window Size )。根据你的计算,试问它有什么隐含的意义吗?
    解:答案为:(1)18.75kb(1.5*1000*0.1/8)、(2)125kb、(3)562.5kb、(4)1.937MB。16位窗口大小意味着发送者在必须等待确认之前最多可以发送64KB。这意味着如果使用的网络技术是以太网、T3或STS-3,则发送方不能使用TCP连续发送并保持管道已满(把线路比喻成管道,把管道比作线路,手动滑稽(✪ω✪))。

  43. 对于地球同步卫星上的一条50Mbps 信道,试问它的带宽-延迟乘积是多少?如果所有的数据包都是1500 字节(包括开销〉,试问窗口应该为多大(按数据包为单位〉?
    解:往返延迟约540毫秒,因此在50 Mbps信道下,带宽产品延迟为27兆位或3 375 000字节。对于1500个字节的数据包,需要2250个数据包来填充管道,因此窗口至少应该是2250个数据包。

猜你喜欢

转载自blog.csdn.net/ao__ao/article/details/88602399
今日推荐