计算机网络自顶向下方法与Internet特色课后习题答案第三章中文版要点文档格式.docx
《计算机网络自顶向下方法与Internet特色课后习题答案第三章中文版要点文档格式.docx》由会员分享,可在线阅读,更多相关《计算机网络自顶向下方法与Internet特色课后习题答案第三章中文版要点文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
![计算机网络自顶向下方法与Internet特色课后习题答案第三章中文版要点文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/29/40c69b6e-426c-4b27-9680-69c84d5dc9d5/40c69b6e-426c-4b27-9680-69c84d5dc9d51.gif)
23
b)B→S源端口号:
513目的端口号:
c)S→A源端口号:
23目的端口号:
467
d)S→B源端口号:
513
e)Yes.
f)No.
2.P128假设主机A,B,C的IP地址为a,b,c.(a,b,c各不相同)
到主机A:
源端口=80,源IP地址=b,目的端口=26145,目的IP地址=a;
到主机C:
左边进程:
源端口=80,源IP地址=b,目的端口=7532,目的IP地址=c;
右边进程:
源端口=80,源IP地址=b,目的端口=26145,目的IP地址=c;
3.P132UDP检查和
01010101
+01110000
11000101
+01001100
00010001
1的补码=11101110
为了检测错误,接收方将四个字相加(三个原始字和一个检测字)。
如果结果包含0,那么接收方就知道分组中存在错误。
所有的1bit错误都将被检测出来,但是年个个比特的错误有可能被忽略(例如,如果第一个字的最后一个数变为0,并且第二个字的最后最后一个数变为1)。
4.P138假设发送方处于“等待来自上层的调用1”状态,接收方处于“等待来自下层的1”。
发送方发送一个带有序列号1的分组,然后转到“等待ACK或NAK1”的状态等待ACK或NAK。
假设现在接收方正确接收到带有序列号1的分组,发送一个ACK,然后转入“等待来自下层的0“状态,等待带有序列号0的分组。
然而,ACK出错了。
当rdt2.1发送方接收到出错的ACK,它就重发带有序列号1的分组。
然而,接收方在等待带有序列号0的分组并在它没有收到带有序列号0的分组时一直发送NAK。
因此发送方会一直发送带有序列号1的分组,这时接收方会一直发送这个分组的NAK信息。
两边都不会从这个状态中跳出,进入了死循环。
5.P140为了回答这个问题,首先考虑为什么我们需要序列号。
我们看到发送方需要序列号以便于接收方能够区分出一个分组是不是已经接收到的分组的重复。
考虑ACK信息,发送方不需要这个信息(也就是一个ACK的序列号)来告诉发送方检测到一个重复的ACK.因为当他接收到原始ACK信息后它就转入下一个状态,所以一个重复的ACK信息对rdt3.0的发送方是很明显的。
重复的ACK信息不是发送方需要的ACK信息,因此被red3.0发送方忽略了。
6.P139rdt3.0协议的发送方与rdt2.2协议的发送方的不同之处在于引入了超时机制.我们已经看到超时机制地引入增加了从发送方到接收方数据流中出现重复分组地可能性.然而,rdt2.2协议地接收方已经能够处理重复分组.(在rdt2.2中当接收方发送地ACK丢失时,发送方就会重传旧的数据.这时接收方就会接收到重复的分组.)因此rdt3.0中的接收方同rdt2.2中的接收方相同.
7.Supposetheprotocolhasbeeninoperationforsometime.Thesenderisinstate“Waitforcallfromabove”(toplefthandcorner)andthereceiverisinstate“Waitfor0frombelow”.ThescenariosforcorrupteddataandcorruptedACKareshowninFigure1.
Figure1:
rdt3.0scenarios:
corrupteddata,corruptedACK
8.P138这里,我们加入一个定时器,它的值比我们已知的往返传播时延大.我们在”等待ACK或NAK0”和”等待ACK或NAK1”状态各加入一个超时事件.如果超时事件出现,那么最后传输的分组将被重传.让我们看看为什么这个协议仍然能和rdt2.1的接收方协同工作.假设超时是由数据分组的丢失引起的,比如,一个从发送方到接收方的信道上的分组丢失.在这种情况下,接收方从没有接收过之前传送的分组,从接收方的角度看,如果超时重传的分组被接收到,它看起来就和最初传输的分组被接收是一样的.现在假设一个ACK丢失.接收方最终将由于超时重传分组.但是这个重传动作是和当一个错误ACK出现时的重传动作是完全相同的.因此当出现ACK丢失或出现错误ACK时,发送方的重传动作是一样的.rdt2.1的接收方已经能够处理出现错误ACK的状况.
9.协议仍将工作,因为如果接收到的带有错误的分组实际上被丢掉的话,重传就会发生(从接收方的观点看,这两种情况哪一个会发生,或者同时发生是不可知的).要对这个问题进行更进一步的讨论,就必须考虑到定时器超时过早发生的情况.在这种情况下,如果每个超大分组被确认,并且每个接收的超大分组确认信息导致另一个超大分组被发送,当n趋近于无穷时,分组n被发送的次数将无限增加.
10.
11.在仅使用NAK的协议中,只有当接收到分组x+1时才能检测到分组x的丢失.也就是说接收方接收到x-1然后接收到x+1,只有当接收方接收到x+1时才发现x的丢失.如果在传输x和传输x+1之间有很长时间的延时,那么在只有NAK的协议中,x的修复要花费很长的时间.另一方面,如果要发送大量的数据,那么在只有NAK的协议中修复的速度将很快.并且,如果错误很少,那么NAK只是偶尔发送,并且从不发送ACK.与只有ACK的情况相比,只有NAK的情况将明显减少反馈时间.
12.Ittakes8microseconds(or0.008milliseconds)tosendapacket.inorderforthesendertobebusy90percentofthetime,wemusthaveutil=0.9=(0.008n)/30.016ornapproximately3377packets.
13.在GBN可靠数据传输协议中,发送方持续发送分组直到它接收到一个NAK.如果到n-1之前的分组已经被正确的接收,这个NAK只是为分组n产生.也就是说,n总是未被接收的分组的最小序号.当发送方接收到分组n的NAK,它从分组n开始重传.这和书上讲的GBN协议相类似,除了在流水线上没有未被确认分组的最大数.注意发送方不能确切的直到有多少分组未被确认.如果当前的序号是k,最后一个NAK是分组n的,那么在流水线上或许就有k-(n-1)的分组未被确认.还要注意接收方只有在接收到更高序列号的分组时才能确认分组n的丢失.(接收分组的序列号的空缺告诉接收方位于孔雀位置的分组丢失).因此,对于接收方,当数据速率低时,(比如,两个分组之间的时间比较长),将会比数据速率高时花费更长的时间来确认分组的丢失.
14.在我们的解决方案中,发送方在接收到一对报文的ACK(seqnum和seqnum+1)后才开始发送下一对报文.数据分组携带有两bit的序列码.也就是说,游泳的序列号是0,1,2,3.ACK信息携带已经确认的数据分组的序列号.接收方和发送方的FSM由下图所示.注意发送状态记录:
(1)当前对没有收到ACKs;
(2)只收到seqnum的ACK或只收到seqnum+1的ACK.在本图中,我们假设seqnum由0起始,发送方已经发送第一对数据.
15.这个问题是简单停等协议rdt3.0的变种.因为信道有可能丢失数据,还因为在其中一个接收方已经接收到数据的情况下发送方也有可能重传数据.(要么是因为定时器超时过早发生,要么是因为另一个接收方还没有正确的接收数据),所以序列号是必须的.就像是在rdt3.0中一样,在这里一个0-bit序列号是必须的.发送方和接收方的FSM如下图所示.在这个问题中,发送方状态显示发送方是否只从B接收到ACK,只从C接收到ACK,还是从B和C都没有接收到ACK.接收方状态显示是否接收到的序列号是接收方等待的序列号.
16.a)在这里的窗口长度为N=3,假设接收方已经接收到分组k-1,并且已经对该分组以及之前的所有分组进行了确认.如果所有这些确认信息都已经被发送方接收,那么发送方的窗口是[k,k+N-1].接下来假设所有这些ACK都没有被发送方接收.在这种情况下,发送方的窗口包含k-1和直到包括k-1之前的N的分组.因此发送方的窗口是[k-N,k-1].因此,发送方的窗口大小是3,并且从[k-N,k]中的某个数开始.
b)如果接收方在等待分组k,那么它已经接收(并确认)了分组k-1以及在这之前的N-1个分组.如果所有这N的ACK都没有被发送方接收到,那么值为[k-N,k-1]的ACK信息可能仍在回传.因为发送方已经发送了分组[k-N,k-1],那么发送方肯定已经接收到了分组k-N-1的ACK.一旦接收方发送了分组k-N-1的ACK,它就不会在发送低于k-N-1的分组的ACK.因此发送方接收到的所有报文的ACK字段的可能值为从k-N-1到k-1.
17.因为A-to-B信道会丢失请求报文.A将需要超时timeout和重传请求信息.(为了能重丢失中恢复过来).因为信道时延是未知且变化的,A有可能发送重复的请求(比如,重传一个已经被B接收到的请求).为了能够检测出重复的请求报文,协议将使用序列号.1-bit序列号就能够满足停/等类型的请求/响应协议的需求.
∙“WaitforRequest0fromabove”这里请求方在等待一个来自上层的请求一个单元数据的命令.当它接收到来自上层的请求是,它就向B发送一个请求报文R0,启动一个计时器并将状态转移到”WaitforD0”等待D0状态.当处于”WaitforRequest0fromabove”状态是,A忽略它从B接收到的所有信息.
∙“WaitforD0”在这里请求方等待来自B的D0数据报文.A的计时器在这个状态是一直运行的.如果计时器超时,A重新发送一个R0报文,重启计时器并保持这个状态.如果接收到来自B的D0报文,A停止计时器,并将状态转移到”WaitforRequest1fromabove”等待来自上层的调用1.如果A在这个状态接收到一个D1数据报文,它将把此忽略.
∙“WaitforRequest1fromabove”在这里请求方再次等待来自上层的请求一个单元数据的命令.当它从上层接收到一个请求时,它向B发送一个请求报文R1,启动计时器并将状态转移到”WaitforD1”.当处于WaitforRequest1fromabove状态时,A忽略从B接收到的任何数据.
∙“WaitforD1”.在这里请求方等待来自B的D1数据报文.在这个状态A的计时器一直在运行.如果计时器超时,A将发送另一个R1报文,重启计时器并保持这个状态.如果接收到来自B的D1报文,A停止计时器,并将状态转移到”WaitforRequest0fromabove”在这个状态A将忽略重B接收到的信息.
数据提供方B只有两个状态:
∙“SendD0”.在这种状态,B持续通过发送D0来回应接收到的R0报文.并保持这个状态.如果B接收到一个R1报文,它就直到D0报文已经被正确接收.因此就将这个D0数据丢失(因为它已经被另一端接收).并转移到”SendD1”状态.在这种状态它将用D1回应下一个请求报文.
∙“SendD1”在这种状态,B持续通过发送D1来回应接收到的R1报文,并保持在这个状态.如果B接收到一个R0报文,它就由此直到D1报文已经被正确接收,并转移到”SendD1”状态.
18.为了避免图3.27出现的情况,我们要避免让接受者窗口的最前端(也就是具有最高序列号的那个)与发送窗口的最尾端(发送窗口中的具有最低序列号的那个)交迭在同一个序列号空间中.也就是说,序列号空间必须足够大到让整个接收窗口和整个发送窗口在此序列号空间中不会出现交迭.因此,我们需要测定在任何给定时刻由接收方和发送方覆盖的序列号有多大.假设接收方等待的最低序列号是分组m的序列号.在这种情况下,接收方窗口是[m,m+w-1],并且它已经接收(并确认)了分组m-1和此前的w-1个分组,这里w是窗口的尺寸.如果所有这w个ACK都没有被发送方接收到,那么值为[m-w,m-1]的ACK报文将仍被传回.如果带有这些ACK号码的ACK都没有被发送方接收,那么发送方的窗口将是[m-w,m-1].因此,发送窗口的最低边界是m-w,接收窗口的最大边界是m+w-1.为了使接收窗口的前沿和发送窗口的后沿不出现交迭,因此序列号空间必须大到能过容纳2w长度的序列号.也就是说,序列号空间长度必须至少使窗口长度的两倍k≥2w.
19.a)正确,假设发送方窗口大小为3,在t0时刻发送分组1,2,3.在t1(t1>
t0)时刻接收方确认1,2,3.在t2(t2>
t1)时刻发送方计时器超时,重发1,2,3.在t3时刻接收到重复的分组并重新确认1,2,3.在t4时刻发送方接收到接收方在t1时刻发送的ACK,并将其窗口前移到4,5,6.在t5时刻发送方接收到接收方在t2发送的ACK1,2,3.这些ACK是在当前窗口之外的报文的ACK.
b)是的,本质上同a中是一样的.
c)True.
d)正确.当窗口尺寸为1时,SR,GBN,的比特交替协议在功能上相同.窗口尺寸1排除了失序分组的可能性.在这种情况下,一个累积的ACK就是一个普通的ACK.因为在窗口内它只能与一个分组有关.
20.有232=4,294,967,296个可能的序列号.
a)序列号不会因报文数增加而有增量,而是随发送数据比特数量的增加而有增量.所以MSS(最大报文长度)的大小与问题无关.能够从A发送到B的文件的最大尺寸能被232≈4.19Gbytes所描述.
b)报文数是:
[232/1460]=2,941,758.每个报文增加66bytes的首部,所以总共增加了2,941,758×
66=194,156,028bytes的首部.要传输的总比特数为232+194,156,028=3,591×
107bits
因此使用10Mbps链路需要10×
106=3,591秒=59分钟来传输文件.
21.DenoteEstimatedRTT(n)fortheestimateafterthenthsample.
EstimatedRTT
(1)=SampleRTT1
EstimatedRTT
(2)=xSampleRTT1+(1−x)SampleRTT2
EstimatedRTT(3)=xSampleRTT
(1)+(1-x)[xSampleRTT2+(1−x)SampleRTT3]
=xSampleRTT1+(1−x)xSampleRTT2+(1−x)2SampleRTT3
EstimatedRTT(4)=xSampleRTT1+(1−x)EstimatedRTT(3)
=xSampleRTT1+(1−x)xSampleRTT2+(1−x)2xSampleRTT3+(1−x)3SampleRTT4
b)
感觉应该是j-1
c)
22.让我们看看如果TCP测量重传报文的SampleRTT会出现什么情况.假设源发送分组P1,P1的定时器超时,源接着发送P2---同一个分组的一个新的拷贝.进一步假设源测量P2的SampleRTT(重传的分组).最后假设在传输P2后很快P1的ACK到达.源将错误的把这个ACK当作P2的ACK,并计算出错误SampleRTT值.
23.SendBase:
是最近未被确认的字节的序号.SendBase-1是接收方已正确按序接收到数据的最后一个字节的序号.
LastByteRcvd:
从网络中到达的并且已经放入主机B接收缓存中的数据流最后一个字节的编号.
在任一给定时刻t,SendBase-1是发送方知道的已经被接收方正确的按序接收的最后一个比特的序列号.在t时刻被接收方(正确的和按序的)接收到的真正的最后一个byte要比在链路上传输的ACK要大所以
SendBase–1≤LastByteRcvd
24.y:
发送方接收到的最新ACK的值
在t时刻,发送方接收到的ACK的值为y,据此发送方可以确认接收方已经接收了序号到y-1的数据.如果y≤SendBase或在线路上有其他的ACK,在t时刻接收方(正确的和按序的)接收到的真正的最后一个byte要比y-1大.所以y-1≤LastByteRvcd
25.假设发送了分组n,n+1,n+2,并且分组n被接收并被确认.如果分组n+1和n+2在端到端的路径上被重新排序)也就是说,被以n+2,n+1的顺序接收),那么在收到第一个冗余ACK就重传的策略下,在接收到分组n+2时将产生一个分组n的冗余ACK,这将引起重传发生.在接收到3个冗余ACK才执行重传的策略下,只有在分组n后面的两个分组被正确接收,然而分组n+1没有被接收的情况下,重传才会发生.设计三个冗余ACK策略的设计者可能感觉等待两个分组(而不是一个)是在当需要时触发快速重传和当分组重新排序时不进行过早的重传之间权衡的结果.
26.P171如果在图3.45b中到达速率的增加超过了R/2,那么到达队列的总到达速率将超过队列的容量,这将导致随着到达速率的增加包的丢失也随之增加.当到达速率=R/2时,每3个离开队列的分组中就有1个是重传分组.随着丢失的增加,甚至是离开队列的分组的较大分片都将是重传数据.即使是将离开队列的最大离去速率给定为R/2,并给定随到达速率的增加1/3或更多的数据将被传输.成功递交数据的吞吐量也不会超过λout.同样的原因,如果离开队列的分组中有一般的分组为重传分组,并且输出分组的最大速率是R/2,那么λout的最大值是(R/2)/2orR/4.
27.P178收到3个冗余ACK后,TCP将拥塞窗口减小一般,然后线性地增长。
但是超时事件发生时,TCP发送方进入一个慢启动阶段,即它将拥塞窗口设置为1MSS,然后窗口长度以指数速度增长。
拥塞窗口持续以指数速度增长,知道CongWin达到超时事件前窗口值地一半为止。
此后,CongWin以线型速率增长,就像收到3个冗余ACK一样。
a)运行TCP慢启动的时间间隔是[1,6]和[23,26]
b)运行TCP避免拥塞时的时间间隔是[1,6]和[17,22]
c)在第16个传输周期后,通过3个冗余ACK能够检测到一个报文段丢失。
如果有一个超时,拥塞窗口尺寸将减小为1。
d)在第22个传输周期后,因为超时能够检测到一个报文段丢失,因此拥塞窗口的尺寸被设置为1。
e)Threshold的初始值设置为32,因为在这个窗口尺寸是慢启动停止,避免拥塞开始。
f)当检测到报文段丢失时,threshold被设置为拥塞窗口值的一半。
当在第16个周期检测到丢失时,拥塞窗口的大小是42,因此在第18个传输周期时threshold值为21。
g)当检测到报文段丢失时,threshold被设置为拥塞窗口值的一半。
当在第22个周期检测到丢失时,拥塞窗口的大小是26,因此在第24个传输周期时threshold值为13。
h)在第一个传输周期内,报文段1被传送;
在第二个传输周期发送报文段2-3;
在第3个传输周期发送报文段4-7,在第四个传输周期发送8-15;
在第五个传输周期发送16-31;
在第六个传输周期发送32-63;
在第7个传输周期发送64-96。
因此,报文段70在第7个传输周期内发送。
i)当丢失出现时拥塞窗口和threshold的值被设置为目前拥塞窗口长度8的一般。
因此新的拥塞窗口和threshold的值为4。
28.
Figure4:
LackofTCPconvergencewithlinearincrease,lineardecrease
在图4(a)中,连接1和连接2因为丢包导致的线性减小的速率和他们线性增加的速率相同并相等。
在这种情况下,吞吐量不会从AB间相连的线段上移开。
在图4(b)中,因丢包导致的连接1和连接2线性减小的速率之比为2:
1。
也就是说,不论何时出现丢包时,连接1窗口减小量是连接2的两倍。
我们看到最终,在经过足够多的丢包和随后的增加后,连接1的吞吐量将趋向0,全部链路带宽将被分配给连接2。
29.如果TCP是停等协议,那么将超时间隔加倍作为拥塞控制机制已经足够。
然而,TCP使用流水线(因此不是停等协议),这允许发送方有数倍的未被确认的报文段。
当端到端路径高度拥塞时,将超时间隔加倍不会阻止TCP发送方在第一次发送时发送大量报文段。
因此就需要一种拥塞控制机制,当出现网络拥塞的迹象时,阻止“接收来自上层应用的数据”
30.在这个问题中,因为接收方的接收缓存能够容纳整个文件,因此不会出现接收方溢出的危险。
并且,因为不会出现分组丢失和定时器超时,TCP的拥塞控制不会抑制发送方,所以不需要拥塞控制。
然而,主机A的进程不会持续的向套接字发送数据,因为发送方的缓存将很快被填满。
一旦发送方缓存被填充满,进程就会以平均速率R<
<
S传送数据。
所以需要TCP流量控制。
31.a)丢包率L,是丢失的包数量与发送包数量的比率。
在一个循环中,有1个包丢失,在这个循环中发送的包数是:
因此,丢包率为:
b)因为W很大,3/8W2>
>
3/4W。
所以L≈8/3W2orW≈(8/3L)1/2。
因此,我们得到
平均吞吐量=3/4(8/3L)1/2·
MSS/RTT=1.22MSS/RTT(L)1/2
32.P180考虑一条具有1500字节报文段和100msRTT。
从P180的TCP吞吐量等式,我们得到:
10Gbps=1.22×
(1500×
8bits)/(0.1sec×
srqt(L))
Orsqrt(L)=14640bits/(109bits)=0.00001464
OrL=2.14*10-10
33.将在t1时刻的CongWin和Threshold值用在t2时刻的优点是TCP不需要经过慢启动的避免拥塞阶段即可直接跳到在t1时刻得到的吞吐量值。
使用这些值的缺点是它们可能已经不正确了。
比如,如果路径在t1到t2的时间内变得更拥塞了,发送方会将大量的窗口内的有用报文段发送到已经更加拥塞的路径上去。
34.P1