计算机网络课后习题答案第五章.docx
《计算机网络课后习题答案第五章.docx》由会员分享,可在线阅读,更多相关《计算机网络课后习题答案第五章.docx(18页珍藏版)》请在冰豆网上搜索。
计算机网络课后习题答案第五章
答:
可能,但应用程序中必须额外提供与TCP相同的功能。
5—08 为什么说UDP是面向报文的,而TCP是面向字节流的?
答:
发送方UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。
UDP对应用层交下来的报文,既不合并,也不拆分,而是保存这些报文的边界。
接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
发送方TCP对应用程序交下来的报文数据块,视为无结构的字节流〔无边界约束,课分拆/合并〕,但维持各字节
5—09 端口的作用是什么?
为什么端口要划分为三种?
答:
端口的作用是对TCP/IP体系的应用进程进行统一的标志,使运行不同操作系统的计算机的应用进程能够互相通信。
熟知端口,数值一般为0~1023.标记常规的效劳进程;
1024~49151
5—10 试说明运输层中伪首部的作用。
答:
用于计算运输层数据报校验和。
5—11 某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报。
既然都是数据报,可否跳过UDP而直接交给IP层?
哪些功能UDP提供了但IP没提提供?
答:
不可跳过UDP而直接交给IP层
IP数据报IP报承当主机寻址,提供报头检错;只能找到目的主机而无法找到目的进程。
UDP提供对应用进程的复用和分用功能,以及提供对数据差分的过失检验。
5—12 一个应用程序用UDP,到IP层把数据报在划分为4个数据报片发送出去,结果前两个数据报片丧失,后两个到达目的站。
过了一段时间应用程序重传UDP,而IP层仍然划分为4个数据报片来传送。
结果这次前两个到达目的站而后两个丧失。
试问:
在目的站能否将这两次传输的4个数据报片组装成完整的数据报?
假定目的站第一次收到的后两个数据报片仍然保存在目的站的缓存中。
答:
不行
重传时,IP数据报的标识字段会有另一个标识符。
仅当标识符相同的IP数据报片才能组装成一个IP数据报。
前两个IP数据报片的标识符与后两个IP数据报片的标识符不同,因此不能组装成一个IP数据报。
5—13 一个UDP用户数据的数据字段为8192季节。
在数据链路层要使用以太网来传送。
试问应当划分为几个IP数据报片?
说明每一个IP数据报字段长度和片偏移字段的值。
答:
6个
数据字段的长度:
前5个是1480字节,最后一个是800字节。
片偏移字段的值分别是:
0,1480,2960,4440,5920和7400.
5—14 一UDP用户数据报的首部十六进制表示是:
06320045001C E217.试求源端口、目的端口、用户数据报的总长度、数据局部长度。
这个用户数据报是从客户发送给效劳器发送给客户?
使用UDP的这个效劳器程序是什么?
解:
源端口1586,目的端口69,UDP用户数据报总长度28字节,数据局部长度20字节。
此UDP<1023,是熟知端口〕、效劳器程序是TFFTP。
5—15 使用TCP对实时话音数据的传输有没有什么问题?
使用UDP
答:
如果语音数据不是实时播放〔边接受边播放〕就可以使用TCP,因为TCP传输可靠。
接收端用TCP讲话音数据接受完毕后,可以在以后的任何时间进行播放。
但假定是实时传输,那么必须使用UDP。
UDP不保证可靠交付,但UCP比TCP的开销要小很多。
因此只要应用程序接受这样的效劳质量就可以使用UDP。
5—16
答:
5—17 在停止等待协议中,如果收到重复的报文段时不予理睬〔即悄悄地丢弃它而其他什么也没做〕是否可行?
试举出具体的例子说明理由。
答:
收到重复帧不确认相当于确认丧失
5—18 假定在运输层使用停止等待协议。
发送发在发送报文段M0后再设定的时间内未收到确认,于是重传M0,但M0又迟迟不能到达接收方。
不久,发送方收到了迟到的对M0确实认,于是发送下一个报文段M1,不久就收到了对M1确实认。
接着发送方发送新的报文段M0,但这个新的M0在传送过程中丧失了。
正巧,一开始就滞留在网络中的M0现在到达接收方。
接收方无法分辨M0是旧的。
于是收下M0,并发送确认。
显然,接收方后来收到的M0是重复的,协议失败了。
试画出类似于图5-9所示的双方交换报文段的过程。
答:
旧的M0被当成新的M0。
5—19 试证明:
当用n1〔即只能按序接收分组〕,当仅在发送窗口不超过2n-1时,连接ARQ协议才能正确运行。
窗口单位是分组。
解:
见课后答案。
5—20 在连续ARQ协议中,假设发送窗口等于7,那么发送端在开始时可连续发送7个分组。
因此,在每一分组发送后,都要置一个超时计时器。
现在计算机里只有一个硬时钟。
设这7个分组发出的时间分别为t0,t1…t6,且tout都一样大。
试问如何实现这7个超时计时器〔这叫软件时钟法〕?
解:
见课后答案。
5—21 假定使用连续ARQ协议中,发送窗口大小事3,而序列范围[0,15],5.
试问:
〔1〕
〔2〕
5—22 主机A向主机BL字节。
假定TCP使用的MSS有1460字节。
〔1〕 在TCPL的最大值是多少?
〔2〕 66字节,链路的数据率为10Mb/s
解:
〔1〕L_max的最大值是2^32=4GB,G=2^30.
(2)满载分片数Q={L_max/MSS}取整=2941758发送的总报文数
N=Q*(MSS+66)+{〔L_max-Q*MSS〕+66}=4489122708+682=4489123390
总字节数是N=4489123390字节,发送4489123390字节需时间为:
N*8/〔10*10^6〕=3591.3秒,即59.85分,约1小时。
5—23 主机A向主机B连续发送了两个TCP70和100。
试问:
〔1〕 第一个报文段携带了多少个字节的数据?
〔2〕 主机B
〔3〕 如果主机B180,试问A发送的第二个报文段中的数据有多少字节?
〔4〕 如果A发送的第一个报文段丧失了,但第二个报文段到达了B。
B在第二个报文段到达后向A
解:
〔170到99,共30字节的数据。
〔2100.
〔3〕80字节。
〔4〕70
5—24 一个TCP连接下面使用256kb/s的链路,其端到端时延为128ms。
经测试,发现吞吐量只有120kb/s。
试问发送窗口W是多少?
〔提示:
可以有两种答案,取决于接收等发出确认的时机〕。
解:
来回路程的时延等于256ms(=128ms×2).设窗口值为X(注意:
以字节为单位),假
定一次最大发送量等于窗口值,且发射时间等于256ms,那么,每发送一次都得停下来期待
再次得到下一窗口确实认,以得到新的发送许可.这样,发射时间等于停止等待应答的时间,
结果,测到的平均吞吐率就等于发送速率的一半,即
8X÷(256×1000)=256×0.001
X=8192
所以,窗口值为8192.
5—25 为什么在TCP首部中要把TCP4个字节?
答:
在ICMP的过失报文中要包含IP首部后面的8个字节的内容,而这里面有TCP首部中的源端口和目的端口。
当TCP收到ICMP过失报文时需要用这两个端口来确定是哪条连接出了过失。
5—26 为什么在TCP首部中有一个首部长度字段,而UDP的首部中就没有这个这个字段?
答:
TCP首部除固定长度局部外,还有选项,因此TCP首部长度是可变的。
UDP首部长度是固定的。
5—27 一个TCP报文段的数据局部最多为多少个字节?
为什么?
如果用户要传送的数据的字节长度超过TCPTCP来传送?
答:
65495字节,此数据局部加上TCP首部的20字节,再加上IP首部的20字节,正好是IP数据报的最大长度65535.〔当然,假设IP首部包含了选择,那么IP首部长度超过 20字节,这时TCP报文段的数据局部的长度将小于65495字节。
〕
数据的字节长度超过TCPTCP来传送。
5—28 主机A向主机B发送TCP报文段,首部中的源端口是m而目的端口是n。
当B向A发送回信时,其TCP报文段的首部中源端口和目的端口分别是什么?
答:
分别是n和m。
5—29 在使用TCP传送数据时,如果有一个确认报文段丧失了,也不一定会引起与该确认报文段对应的数据的重传。
试说明理由。
5—30 设TCP使用的最大窗口为65535字节,而传输信道不产生过失,带宽也不受限制。
假设报文段的平均往返时延为20ms,问所能得到的最大吞吐量是多少?
答:
在发送时延可忽略的情况下,最大数据率=最大窗口*8/平均往返时间=26.2Mb/s。
5—31 通信信道带宽为1Gb/s,端到端时延为10ms。
TCP的发送窗口为65535字节。
试问:
可能到达的最大吞吐量是多少?
信道的利用率是多少?
答:
L=65536×8+40×8=524600
C=109b/s
L/C=0.0005246s
Td=10×10-3s
0.02104864
Throughput=L/(L/C+2×Td)=524600/0.0205246=25.5Mb/s
Efficiency=(L/C)//(L/C+2×D)=0.0255
最大吞吐量为25.5Mb/s。
信道利用率为25.5/1000=2.55%
5—32 什么是Karn算法?
在TCP的重传机制中,假设不采用Karn算法,而是在收到确认时都认为是对重传报文段确实认,那么由此得出的往返时延样本和重传时间都会偏小。
试问:
重传时间最后会减小到什么程度?
答:
Karn算法:
在计算平均往返时延RTT时,只要报文段重传了,就不采用其往返时延样本。
设新往返时延样本Ti
RTT〔1〕=a*RTT〔i-1〕+〔1-a〕*T〔i〕;
RTT^〔i〕=a*RTT〔i-1〕+〔1-a〕*T〔i〕/2;
RTT〔1〕=a*0+(1-a)*T
(1)=(1-a)*T
(1);
RTT^〔1〕=a*0+(1-a)*T
(1)/2=RTT〔1〕/2
RTT〔2〕=a*RTT〔1〕+〔1-a〕*T〔2);
RTT^〔2〕=a*RTT〔1〕+〔1-a〕*T〔2)/2;
=a*RTT〔1〕/2+〔1-a〕*T〔2)/2=RTT〔2〕/2
RTO=beta*RTT,在统计意义上,重传时间最后会减小到使用karn算法的1/2.
5—33 假定TCP在开始建立连接时,发送方设定超时重传时间是RTO=6s。
〔1〕当发送方接到对方的连接确认报文段时,测量出RTT样本值为1.5s。
试计算现在的RTO值。
〔2〕当发送方发送数据报文段并接收到确认时,测量出RTT样本值为2.5s。
试计算现在的RTO值。
答:
〔1〕据RFC2988建议,RTO=RTTs+4*RTTd。
其中RTTd是RTTs的偏差加权均值。
初次测量时,RTTd〔1〕=RTT〔1〕/2;
后续测量中,RTTd〔i〕=〔1-Beta〕*RTTd〔i-1〕+Beta*{RTTs-RTT〔i〕};
Beta=1/4
依题意,RTT〔1〕样本值为1.5秒,那么
RTTs〔1〕=RTT〔1〕=1.5s RTTd
(1)=RTT
(1)/2=0.75s
RTO
(1)=RTTs
(1)+4RTTd
(1)=1.5+4*0.75=4.5(s)
〔2〕RTT〔2〕=2.5 RTTs〔1〕=1.5s RTTd〔1〕=0.75s
RTTd〔2〕=〔1-Beta〕*RTTd〔1〕+Beta*{RTTs〔1〕-RT
〔2〕}=0.75*3/4+{1.5-2.5}/4=13/16
RTO
(2)=RTTs〔1〕+4RTTd〔2〕=1.5+4*13/16=4.75s
5—34 第一次测得TCP的往返时延的当前值是30ms。
现在收到了三个接连确实认报文段,它们比相应的数据报文段的发送时间分别滞后的时间是:
26ms,32ms和24ms。
设α=0.9。
试计算每一次的新的加权平均往返时间值RTTs。
讨论所得出的结果。
答:
a=0.1,RTTO=30
RTT1=RTTO*(1-a)+26*a=29.6
RTT2=RTT1*a+32(1-a)=29.84
RTT3=RTT2*a+24〔1-a〕=29.256
三次算出加权平均往返时间分别为29.6,29.84和29.256ms。
可以看出,RTT的样本值变化多达20%时,加权平均往返
5—35 试计算一个包括5段链路的运输连接的单程端到端时延。
5段链路程中有2段是卫星链路,有3段是广域网链路。
每条卫星链路又由上行链路和下行链路两局部组成。
可以取这两局部的传播时延之和为250ms。
每一个广域网的范围为1500km,其传播时延可按150000km/s来计算。
各数据链路速率为48kb/s,帧长为960位。
答:
5段链路的传播时延=250*2+〔1500/150000〕*3*1000=530ms
5段链路的发送时延=960/〔48*1000〕*5*1000=100ms
所以5段链路单程端到端时延=530+100=630ms
5—36 重复5-35题,但假定其中的一个陆地上的广域网的传输时延为150ms。
答:
760ms
5—37 在TCP的拥塞控制中,什么是慢开始、拥塞防止、快重传和快恢复算法?
这里每一种算法各起什么作用?
“乘法减小〞和“加法增大〞各用在什么情况下?
答:
慢开始:
在主机刚刚开始发送报文段时可先将拥塞窗口cwnd设置为一个最大报文段MSS的数值。
在每收到一个对新的报文段确实认后,将拥塞窗口增加至多一个MSScwnd,可以分组注入到网络的速率更加合理。
拥塞防止:
当拥塞窗口值大于慢开始门限时,停止使用慢开始算法而改用拥塞防止算法。
拥塞防止算法使发送的拥塞窗口每经过一个往返时延RTT就增加一个MSS的大小。
快重传算法规定:
发送端只要一连收到三个重复的ACK即可断定有分组丧失了,就应该立即重传丢手的报文段而不必继续等待为该报文段设置的重传计时器的超时。
快恢复算法:
当发送端收到连续三个重复的ACK时,就重新设置慢开始门限ssthresh
与慢开始不同之处是拥塞窗口cwnd不是设置为1,而是设置为ssthresh
假设收到的重复的AVK为n个〔n>3〕,那么将cwnd设置为ssthresh
假设发送窗口值还容许发送报文段,就按拥塞防止算法继续发送报文段。
假设收到了确认新的报文段的ACK,就将cwnd缩小到ssthresh
乘法减小:
是指不管在慢开始阶段还是拥塞防止阶段,只要出现一次超时〔即出现一次网络拥塞〕,就把慢开始门限值ssthresh设置为当前的拥塞窗口值乘以0.5。
当网络频繁出现拥塞时,ssthresh值就下降得很快,以大大减少注入到网络中的分组数。
加法增大:
是指执行拥塞防止算法后,在收到对所有报文段确实认后〔即经过一个往返时间〕,就把拥塞窗口cwnd增加一个MSS大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
5—38 设TCP的ssthresh的初始值为8(单位为报文段)。
当拥塞窗口上升到12时网络发生了超时,TCP使用慢开始和拥塞防止。
试分别求出第1次到第15次传输的各拥塞窗口大小。
你能说明拥塞控制窗口每一次变化的原因吗?
答:
拥塞窗口大小分别为:
1,2,4,8,9,10,11,12,1,2,4,6,7,8,9.
5—39 TCP的拥塞窗口cwnd大小与传输轮次n的关系如下所示:
cwnd
n
1
1
2
2
4
3
8
4
16
5
32
6
33
7
34
8
35
9
36
10
37
11
38
12
39
13
cwnd
n
40
14
41
15
42
16
21
17
22
18
23
19
24
20
25
21
26
22
1
23
2
24
4
25
8
26
〔1〕试画出如图5-25所示的拥塞窗口与传输轮次的关系曲线。
〔2〕指明TCP工作在慢开始阶段的时间间隔。
〔3〕指明TCP工作在拥塞防止阶段的时间间隔。
〔4〕在第16轮次和第22轮次之后发送方是通过收到三个重复确实认还是通过超市检测到丧失了报文段?
〔5〕在第1轮次,第18轮次和第24轮次发送时,门限ssthresh分别被设置为多大?
〔6〕在第几轮次发送出第70个报文段?
〔7〕假定在第26轮次之后收到了三个重复确实认,因而检测出了报文段的丧失,那么拥塞窗口cwnd和门限ssthresh应设置为多大?
答:
〔1〕拥塞窗口与传输轮次的关系曲线如下图〔课本后答案〕:
〔2〕慢开始时间间隔:
【1,6】和【23,26】
〔3〕拥塞防止时间间隔:
【6,16】和【17,22】
〔4〕在第16轮次之后发送方通过收到三个重复确实认检测到丧失的报文段。
在第22轮次之后发送方是通过超时检测到丧失的报文段。
〔5〕在第1轮次发送时,门限ssthresh被设置为32
在第18轮次发送时,门限ssthresh被设置为发生拥塞时的一半,即21.
在第24轮次发送时,门限ssthresh是第18轮次发送时设置的21
〔6〕第70报文段在第7轮次发送出。
〔7〕拥塞窗口cwnd和门限ssthresh应设置为8的一半,即4.
5—40 TCP在进行流量控制时是以分组的丧失作为产生拥塞的标志。
有没有不是因拥塞而引起的分组丧失的情况?
如有,请举出三种情况。
答:
当Ip数据报在传输过程中需要分片,但其中的一个数据报未能及时到达终点,而终点组装IP数据报已超时,因而只能丧失该数据报;IP数据报已经到达终点,但终点的缓存没有足够的空间存放此数据报;数据报在转发过程中经过一个局域网的网桥,但网桥在转发该数据报的帧没有足够的过失空间而只好丢弃。
5—41 用TCP传送512字节的数据。
设窗口为100字节,而TCP报文段每次也是传送100100和200,试画出类似于图5-31的工作示意图。
从连接建立阶段到连接释放都要画上。
5—42 在图5-32中所示的连接释放过程中,主机B能否先不发送ACK=x+1确实认?
(因为后面要发送的连接释放报文段中仍有ACK=x+1这一信息)
答:
如果B不再发送数据了,是可以把两个报文段合并成为一个,即只发送FIN+ACK报文段。
但如果B还有数据报要发送,而且要发送一段时间,那就不行,因为A迟迟收不到确认,就会以为刚刚发送的FIN报文段丧失了,就超时重传这个FIN报文段,浪费网络资源。
5—43 在图(5-33)中,在什么情况下会发生从状态LISTEN到状态SYN_SENT,以及从状态SYN_ENT到状态SYN_RCVD的变迁?
答:
当A和B都作为客户,即同时主动翻开TCP连接。
这时的每一方的状态变迁都是:
CLOSED----àSYN-SENT---àSYN-RCVD--àESTABLISHED
5—44 试以具体例子说明为什么一个运输连接可以有多种方式释放。
可以设两个互相通信的用户分别连接在网络的两结点上。
答:
设A,B建立了运输连接。
协议应考虑一下实际可能性:
A或B故障,应设计超时机制,使对方退出,不至于死锁;
A主动退出,B被动退出
B主动退出,A被动退出
5—45 解释为什么突然释放运输连接就可能会丧失用户数据,而使用TCP
答:
当主机1和主机2之间连接建立后,主机1发送了一个TCP数据段并正确抵达主机2,接着主机1发送另一个TCP数据段,这次很不幸,主机2在收到第二个TCP数据段之前发出了释放连接请求,如果就这样突然释放连接,显然主机1发送的第二个TCP报文段会丧失。
而使用TCP2发出了释放连接的请求,那么即使收到主机1确实认后,只会释放主机2到主机1方向的连接,即主机2不再向主机1发送数据,而仍然可接受主机1发来的数据,所以可保证不丧失数据。
5—46 试用具体例子说明为什么在运输连接建立时要使用三次握手。
说明如不这样做可能会出现什么情况。
答:
3
假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。
按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。
可是,B在A的应答分组在传输中被丧失的情况下,将不知道A是否已准备好,不知道AB甚至疑心A是否收到自己的连接请求分组,在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。
而A发出的分组超时后,重复发送同样的分组。
这样就形成了死锁。
5—47 一个客户向效劳器请求建立TCP连接。
客户在TCP连接建立的三次握手中的最后一个报文段中捎带上一些数据,请求效劳器发送一个长度为L
〔1〕客户和效劳器之间的数据传输速率是R字节/秒,客户与效劳器之间的往返时间是RTT〔固定值〕。
〔2〕效劳器发送的TCP报文段的长度都是M字节,而发送窗口大小是nM字节。
〔3〕所有传送的报文段都不会出错〔无重传〕,客户收到效劳器发来的报文段后就及时发送确认。
〔4〕所有的协议首部开销都可忽略,所有确认报文段和连接建立阶段的报文段的长度都可忽略〔即忽略这些报文段的发送时间〕。
T是:
T=2RTT+L/R 当nM>R(RTT)+M
或 T=2RTT+L/R+(K-1)[M/R+RTT-nM/R] 当nM其中,K=[L/nM][x]表示假设x不是整数,那么把x的整数局部加1。
解:
发送窗口较小的情况,发送一组nM个字节后必须停顿下来,等收到确认后继续发送。
共需K=[L/nM]个周期:
其中
前K-1个周期每周期耗时M/R+RTT,共耗时〔K-1〕〔M/R+RTT〕
第K周期剩余字节数Q=L-〔K-1〕*nM,需耗时Q/R
总耗时=2*RTT+(K-1)M/(R+RTT)+Q/R=2*RTT+L/R+(K-1)[(M/R+RTT)-nM/R]