第五层 运输层课后习题答案
1. 试说明传输层在协议栈中的地位和作用,传输层的通信和网络层的通信有什么重要区别?为什么说传输层是必不可少的?
答:
地位:传输层处于面向通信部分的最高层,同时也用户功能中的最底层
作用:向它上面的应用层提供服务,向下兼容网络层,起到承上启下的中间作用
重要区别:传输层为应用层的应用程序提供端到端的逻辑通信,该逻辑链路是虚拟的
,而网络层是为主机之间提供逻辑通信的(面向主机,承担路由功能)
必不可少的原因:各种应用进程之间通信需要“可靠交付”和“尽最大努力交付”的
类服务,必须要又传输层以复用和分用的形式加载到网络层才能实现这两种类型的通信
2. 网络层提供数据报或虚电路服务队上面的传输层有何影响?
答:不管是网络层提供数据报还是虚电路服务,队上面运输层的运行机制都不会有任何影响,但是会给运输层提供不同质量的服务
3. 当应用程序使用面向连接的TCP和无连接的IP时,这种传输的面向连接的还是面向无连接的?(无连接的IP:IP协议,面向无连接,跟UPD一样)
答:都有,这要在不同层次来看,在运输层是面向连接的,在网络层则是面向无连接的
4. 试用画图解释运输层的复用,画图说明许多个运输用户复用到一条运输连接上,而这条运输连接又复用到IP数据报上
答:许多个运输用户复用到一条运输连接上:通过不同的端口号(不同应用程序不同端口号)
这条运输连接又复用到不同的IP数据报上:不同的协议号,UDP-17,TCP-6,UPD在IP报文的协议号是17
5. 举例说明有的应用程序宁愿采用不可靠的UDP,而不采用可靠的TCP
答:视频播放程序,可以忍受不可靠的UDP丢失掉一两帧的图,不会影响视频服务的质量,但是不能忍受可靠的TCP的,因为TCP虽然可靠但是传输速率慢
原理:有差错的数据报UDP直接丢弃,而TCP则要求重传,TCP会带来较大的时延
6. 接收方收到有差错的UDP用户数据报应如何处理?
答:直接丢弃
7. 如果应用程序宁愿使用UDP来完成可靠的传输,这可能吗?请说明理由
答:可能,但应用程序中必须额外提供于TCP相同的功能
8. 为什么说UDP是面向报文的,而TCP是面向字节的?
答:UDP是面向报文的:发送方的UDP对应用程序交下来的报文,在添加了首部之后就向下交付,UDP对应用层交付下来的报文即不合并也不拆分,而是保留这些报文的边界,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,接收方UDP对下方交上来的UDP用户数据报,在去除首部之后就原封不动的交付给上层的应用程序,一次交付一个完整报文,所以是UDP是面向报文的
TCP是面向字节的:发送方TCP对应用程序交下来的报文数据块,视为无结构的字节流(无边界约束,可拆分/合并),但维持各字节流顺序(相对顺序没有变),TCP发送方有一个发送缓冲区,当应用程序传输的数据块太长,TCP就可以把它划分端一些再传输,如果应用程序一次只传输一个字节,那么TCP可以等待积累足够多的字节后再构成报文端发送出去,所以TCP的面向字节的
9. 端口的作用是什么?为什么端口要划分三种?
答:端口的作用是对TCP/IP体系的应用进程进行统一的标志,使运行不同操作系统的计算机能够相互通信
熟知端口号:数值一般为0~1023,标记常规的服务进程如FTP是21,DNS是53,HTTP是80等
登记端口号:数值为1024~49151,标记没有熟知端口号的非常规的服务进程
短暂端口号:数值为49152~65535,客户进程运行时动态选择
10. 试说明运输层中伪首部的作用
答:仅用于计算运输层数据报的校验和
11. 某个应用进程使用运输层的UDP用户数据报,然而继续向下交付给IP层之后,又封装成IP数据报,既然都是数据报,可否跳过UDP而直接交给IP层?哪些功能UDP提供了但IP没有提供?
答:不可以跳过UDP而直接交给IP层,IP数据报的IP报头承担主机寻址,报头检错,直接交付给IP层只能找到目的主机而无法找到目的进程
UDP提供对应用进程的复用和分佣功能,以及提供对数据的差错检验
12. 一个应用程序用UDP,到了IP层把数据报划分伪4个数据报片发送出去,结果前两个数据报丢失,后两个到达目的站,过了一段时间应用程序重传UDP,而IP层仍然划分为4个数据报片来发送,结果这次前两个到达后两个丢失,试问,在目的站能否将这两次传输的4个数据报片组合成一个完整的数据报?假定目的站第一次收到后的两个数据报片仍然1保存在目的站的缓存中。
答:不行,数据报片丢失重传时,IP数据报的标识字段会又另一个标识符,仅当标识符相同的IP数据报片才能组成一个IP数据报,前两个IP数据报片的标识符和后两个IP数据报片的IP标识符不同,使用不能组成一个IP数据报
补充:因为IP协议是无连接的服务,所以数据报不存在按序接收到达的问题,当数据报由于长度超过网络的最大传输单元MTU而必须分片时,该数据报的标识字段就被复制到该数据报的所有数据报分片中,相同的标识字段的值可以使得分片后的数据报片能正确的重装成原理的数据报
13. 一个UDP用户数据报的数据字段为8192个字节,在数据链路层要使用以太网来传送,试问应该划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值。
答:6个,8192字节加上UDP首部8字节共8200字节
数据字段的长度:前面5个是1480字节,最后一个是800字节
片偏移字段的值分别是:0,1480,2960,4440,5920,7400
补充:
UDP数据报首部长度为8个字节
UDP数据报数据部分+UDP数据报首部=IP数据报的数据部分
所以IP数据报的数据部分长度=8192字节+8字节=8200字节
IP数据报的数据部分+IP数据报的首部=一个完整的IP数据报
IP数据报的首部是20个字节
一个完整的IP数据报的最大长度是1500字节
所以IP数据报的数据部分最大长度是1500-20=1480字节
1480*5+800=8200字节
所以至少需要6个IP数据报片
偏移值分别是:1480*0,1480*1,1480*2,1480*3,1480*4,1480*5
14. 一UDP用户数据报的首部十六进制表示是:06 32 00 45 00 1C E2 17 ,试求源端口,目的端口,用户数据报的总长度,数据部分长度,这个用户数据报是从客户发送给服务器还是服务器发送给用户?使用这个UDP的这个服务器程序是什么?
答:源端口:1586,目的端口:69,UDP用户数据报总长度:28字节,数据部分长度:20字节,此UDP用户数据报是从客户发送给服务器(因为目的端口<1023,是熟知端口1),服务器程序是TFTP
补充:UDP首部结构(8字节):源端口(2字节)+目的端口(2字节)+UDP数据报总长度(2字节)+校验和(2字节)
十六进制0632 ---> 十进制1586
十六进制0045 ---> 十进制 69
十六进制1C ---> 十进制 28
所以该用户数据报UDP的数据部分长度是28-8=20字节
69端口是TFTP的端口
15. 使用TCP对实时话音数据的传输有没有什么问题?使用UDP在传送数据文件时会有什么问题?
答:如果话音数据不是实时播放(边接收边播放)就可以使用TCP,因为TCP传输可靠,接收端用TCP接收数据完毕之后,可以在任何时间进行播放,但阶段是实时播放,则必须使用UDP,UDP不保证可靠交付,但UDP比TCP的开销小很多,一次只要应用程序接受这样的服务质量就可以选择使用UDP
16. 在停止等待协议中如果不使用编号是否可行?为什么?
答:不行,分组和确认分组都必须进行编号,才能明确哪个分组得到了确认
补:停止等待协议是TCP可靠传输的保证之一
17. 在停止等待协议中,如果收到重复的报文段时不予理睬(即悄悄丢弃什么也不做)是否可行?举例说明
答:不可以,收到重复报文不确认相当于丢失,会让发送方以为你没有收到而一直发送该重复报文
18.假定在运输层使用停止等待协议,发送方在发送报文段M0后在设定时间未收到确认,于是重传M0,但是M0又迟迟不能到达接收方,不久发送方收到了迟到的对M0的确认,于是发送下一个报文M1,不仅就收到了对M1的确认,接着发送方发送新的报文段M0(和前面的M0不同)但这个新的M0的传送过程中丢失了,正巧,一开始就滞留在网络中的M0现在到达接收方,接收方无法分辨M0是旧的,于是收下了M0,并发送确认,显然,接收方后来收到的M0是重复,协议失败了,请画图描述上述过程
答:
19.试证明:当用n比特进行分组的编号时,若接收窗口等于1(即只能按序接收分组),当仅在发送窗口不超过2的n次方然后减去1时,连续滑动窗口协议才能正确运行,窗口单位是分组
答:
20. 在连续ARQ协议中,若发送窗口等于7,则发送端在开始时可连续发送7个分组,因此,在每一组发送之后,都要设置一个超时计时器,现在计算机里之一一个硬时钟,设这7个分组发出的时间为t0~t6,且超时时间Tout一样大,试问如何实现这7个超时计时器(软件时钟法)?
答:
补充:方法2:可以定义一个含有7个数据的数组,数组中的数据表示时间,当该组数据发送出去时,在对应序号的数组中填入时间值,该时间值是该组发送出去的时间+超时时间得到,如何不停的对该数组的值进行扫描,当接收到接收端的确认分组时,即将对应数组序号的时间值设置为空,准备记录下一个数据发发送时间,当系统时间大于数组中某一个时间值时,说明该分组以及超时了,需要进行重传
21. 假设使用连续ARQ协议中,发送窗口大小是3,序列范围是[0,15],而传送媒体保证在接收方能接收到分组,在某时刻,在接收方,下一个期望收到的序号是5
试问:
1)在发送方的发送窗口中你可能出现的序号组合有哪几种?
答:如果发送方没有收到[2,4]的确认,那么发送窗口的范围是:[2,4],[3,5],[4,6],[5,7]中如何一个
如果发送方收到了[2,4]的确认,那么发送窗口的范围是:[5,7]
2) 接收方已经发送出去的,但在网络中(未到达发送方)的确认分组可能有那些?说明这些确认分组是用来确认那些序号的分组
答:[2,4]分组的确认可能还在网络中
22. 主机A向主机B发送一个很长的文件,其长度为L字节,假定TCP使用的MSS有1460字节
1)在TCP的序号不重复使用的条件下,L的最大值是多少?
答:FAT单个文件不能超过4G,2^32=4G,1G=2^30字节,所以L_max=2^62字节
3) 假定使用上面计算出的文件长度,而运输层,网络层和数据链路层所使用的首部开销共66字节,链路的数据率为10Mb/s,试求这个文件所需要的最短发送时间
答:满载分片数Q={L_max/MSS}取整=2941758次
总字节数N=Q*(MSS+66)+{(L_max-Q*MSS)+66}=4489122708+682=4489123390字节
最小时间T=N*8/(10*10^6)=3591.3秒=59.85分 约等于1小时
补充:MSS:TCP最大报文段长度
最后剩余要发送的字节不足MSS所以要取整
1个字节是8个比特
1Mb=10^6 b
23. 主机A向主机B连续发送了两个TCP报文段,其序号是70和100,问:
1) 第一个报文段携带了多少个字节?
答:
TCP报文段的序号:发送数据段的首字节编号
70~99有30个字节,所以第一个报文段携带了30个字节
2)主机B收到第一个报文段后发回的确认中确认序号应当是多少?
答:
TCP报文段的确认号:期望下一次收到的字节的序号
所以该确认序号是100
3)如果主机B收到第二个报文段后发挥确认中的确认序号是180,试问A发送的第二个报文段中的数据有多少字节?
答:
确认序号是180,说明它期望下次收到180编号的字节,那么180以前的就已经收到了,即100~179,80个字节
4) 如果A发送的第一个报文段丢失了,单第二个报文段到达了B,B在第二个报文段到达后向A发送确认,试问这个确认号应该是多少?
答:70,因为第一个报文段的丢失,需要重传
24. 一个TCP连接下面使用256kb/s的链路,其端到端时延为128ms,经测试,发现吞吐量只有120kb/s,试问发送窗口w是多少?(提示:可以有两种答案,取决于接收等发出确认的时机)
答:来回路程的时延等于128*2=256ms
设窗口值为x(以字节为单位),假定一次最大发送量等于窗口值,且发送时间等于255ms,那么每发送一次都得停下来期待再次得到下一窗口的确认,以得到新的发送许可,这样发送时间等于停止等待应答的时间,结果,测到的平均吞吐率就等于发送速率的一半,即:
8*x/(256*1000)=256*0.001
X=8192
补充:一个字节8个比特
256ms=256*0.001s
速率=256*1000 b/s
25. 为什么在TCP首部中要把TCP端口号放入最开始的4个字节?
答:在ICMP的差错报文中要包含IP首部后面8个字节的内容,而这里面有TCP首部中的源端口和目的端口,当TCP收到ICMP差错报文时需要用这两个端口来确定是哪条连接出了差错
26. 为什么在TCP首部中有一个首部长度字段,而UDP的首部中就没有首部长度字段?
答:TCP首部除固定长度部分外,还有选项,TCP首部长度是可变的,所以需要首部长度字段,而UDP的首部长度是固定的,不需要
27. 一个TCP报文段的数据部分最多为多少个字节?为什么?如果用户要传送的数据的字节长度超过TCP报文字段中的序号字段可能编出的最大序号,问还能否用TCP来传送?
答:65535-20-20=65495字节,此数据部分加上TCP首部的20字节,然后加上IP首部的20字节,正好是IP数据报的最大长度:65535字节(当然若IP首部包含了选填字段,则IP首部的长度超过20字节,这时TCP报文端的数据部分的长度将小于65495字节),数据的字节长度超过TCP报文字段中序号字段可能编出的最大序号,通过循环使用序号,仍然可以使用TCP来传送
28. 主机A向主机B发送TCP报文段,首部中的源端口是m而且目的端口是n,当B向A发送回信时,其TCP报文段的首部中源端口和目的端口分别是什么?
答:n和m
29. 在使用TCP传送数据时,如果有一个确认报文段丢失了,也不一定会引起与该确认报文对应的数据的重传,试说明理由
答:还没有重传就收到了对更高序号的确认
30. 设TCP使用的最大窗口为65535字节,而传输信道不产生差错,带宽也不受限制,若报文段的平均往返时延为20ms,问所能得到的最大吞吐率是多少?
答:在发送时延可忽略的情况下:最大数据率=最大窗口*8/平均往返时间=26.2Mb/s
31. 通信信道的带宽为1GB/s,端到端的时延为10ms,TCP的发送窗口为65535字节,试问:可能达到的最大吞吐率是多少?信道的利用率是多少?
答:传输的比特L=65536*8+40*8=52408b 带宽c=10^9 b/s
发送时延 L/c=0.000524608 s
传输时延 Td=10*10^-3 s
最大吞吐率=传输的比特数/(发送时延+2倍的传输时延)=25.6Mb/s
信道利用率=发送时延/(发送时延+2倍的传输时延)=2.55%
补充:0-65535,所以是65536,乘以8是因为一个字节8个比特,40是因为TCP首部20个字节+IP首部20个字节,发送时延+2倍的传输时延是因为先发出去,然后传输到接收方,然后接收方发送一个确认信号才算完成了此次传输
32. 什么是karm算法?在TCP的重传机制中,若不采用karm算法,而是在收到确认时都认为是对重传报文端的确认,那么由此得出的往返时延样本和重传时间都会减小,试问:重传时间最后会减小到什么程度?
答:karm算法:在计算平均往返时延RTT时,只要该报文段重传了,就不采用其往返延时样本
超时重传时间RTO=RTTs+4*RTTd 其中RTTd是RTTs的偏差加权均值
33. 假定TCP在开始建立连接时,发送方设定的超时重传时间是RTO=6s
1)当发送方接收到对方的连接确认报文时,测量出RTT(平均往返时延)样本值为1.5s,试计算限制的超时重传时间RTO
2)当发送方发送数据报文段并接收到确认时,测量出RTT样本值为2.5s,试计算限制的RTO值
答:
34. 已知第一次测得TCP的往返时延的当前值是30ms,现在收到了三给连接的确认报文段,他们相比的数据报文段的发送时间分别滞后26ms,32ms,和24ms,设a=0.9,试计算每一层新的加权平均往返时间值RTTs,讨论所得结果
答:a=0.1,RTTO=20
RTT1=RTTO*(1-a)+26*a=29.6
RTT2=RTT1*a_32(1-a)=29.84
RTT3=RTT2*a+24(1-a)=29.256
可以看出,RTT的样本值变化多达20%,加权平均往返时间RTTs的变化却很小
35. 试计算一个包括5段链路的运输连接的单程段到端的延时,5端链路程中有2端是卫星链路,有3段是广域网链路,每条卫星链路又由上行链路和下行链路两部分组成,可以去这两部分的传播时延之和为250ms,每一个广域网的范围为1500km,其传播时延可按150000km/s来计算,各数据链路速率为48kb/s,帧长为960位
答:总的传播时延=信道长度/传播速率=250*2+(1500/150000)*3*1000=530 ms
总的发送时延=960/(48*1000/1000)*5=100ms
单程端到端时延=100ms+530ms=630ms
36. 重复35题,假定其中一个陆地上的广域网的发送时延为150ms
答:
总的传播时延没有变化,还是530ms
总的发送时延=960/(48*1000/1000)*4+150=230ms
端到端的时延=530+230=760ms
37. 在TCP的拥塞控制中,什么是慢开始,拥塞避免,快重传和快恢复算法?这里每一种算法各起什么作用?乘法减小和加法增大各用在什么情况下?
答:
慢开始:在主机刚刚开始发送报文段时先将拥塞窗口cwnd设置为一个最大报文段的MSS数值,在每收到一个对新的报文端的确认后,将拥塞窗口增加至多一个MSS数值,用这样的方法逐步增大发送端的拥塞窗口cwnd,即逐步增加发送窗口的大小,可以分组注入到网络中的速率更加合理
拥塞避免:当拥塞窗口值(现在是等于发送窗口大小)大于慢开始门限时,停止使用慢开始算法,而改用拥塞避免算法:使发送的拥塞窗口每经过一个往返时延RTT就增加一个MSS的大小
快重传算法:发送端只要连续收到三个重复的ACK,就断定有分组丢失了,就理解重传丢失的报文段而不是等待该报文段的超时计时器超时
快恢复算法:当发送端连续收到三个重复的ACK时,就重新设置慢开始门限ssthresh(当前拥塞窗口的一半)与慢开始不同之处在于拥塞窗口cwnd不是设置为1,而是设置为新的慢开始启动门限(当前拥塞窗口的一半)
乘法减小:是指无论在慢开始阶段还是在拥塞避免阶段,只要出现超时(即很有可能出现了网络拥塞),就是把慢开始门限值ssthresh设置为当前拥塞窗口值的一半,当网络频繁出现拥塞时,ssthresh值就下降得很快,以大大减少注入到网络中的分组数
加法增大:是值指向拥塞避免算法之后,在收到度所有报段的确认后(即经过一个往返时间)就把拥塞控制窗口cwnd增加一个MSS大小,使得拥塞窗口缓慢增大,以防止网络过早的出现拥塞
38. 设TCP的ssthresh的初始值为8,当拥塞窗口上升到12时网络发送了超时,TCP使用慢开始和拥塞避免,试求出第一次到第15此的拥塞窗口大小
答:1 2 4 8 9 10 11 12 1 2 4 6 7 8 9
* *
Ssthresh在12之后变成了6,然后又是从1开始,快到6就采用拥塞控制
39. TCP在进行流量控制时是以分组的丢失作为产生拥塞的标志的,有没有不是因为拥塞而引起的丢失分组的情况?如果有,请举3个例子
答:1.当IP数据报的传输过程中需要分片,但其中的一个数据报未能及时到达终点,而终点组装IP数据报已超时,因而只能丢失该数据报
2. IP数据报已经到达终点,但终点的缓存没有足够的空间来存放此数据报
3. 数据报在转发的过程中经过一个局域网的网桥,但网桥在转发该数据报的帧没有足够的差错空间而只好丢弃
41.用TCP传送512字节的数据,设窗口为100字节,而TCP报文段每次也是传送100字节的数据,再设发送端和接收端的起始序号分别为100和200,试画出连接建立到连接释放的工作示意图
答:
44试举例说明为什么一个运输连接可以有多种方式释放,可以设两个互相通信的用户分别连接在网络的两个结点上
答:假设A,B建立了运输连接,协议应该考虑实际的可能性
比如:
A或者B故障,应该设置超时机制,使对方推出,不至于死锁
A主动退出,B被动退出
A被动退出,B主动退出
45. 试接收为什么突然释放运输连接就有可能丢失用户数据,而使用TCP的连接释放方法就可以保证数据不丢失?
答:当主机1和主机2之间建立连接后,主机1发送了一个TCP数据段并且正确抵达主机2,接着主机1发送另外一个TCP数据段,这次很不幸,主机2在收到第二个TCP数据段之前发出了释放连接的请求,如果就这样突然释放连接,显然主机1发送的第二个TCP报文段会丢失,而使用TCP的连接释放方法,主机2发出了释放连接的请求,那么即使收到主机1的确认后,之间释放主机2到主机1的连接,即主机2不再向主机1发送数据,而仍然可以接受主机1发送来的数据,所以可以保证数据不丢失
46. 试用例子说明为什么在运输连接建立时要使用三次握手。说明不这样做可能会出现什么情况
答:3次握手完成两个重要功能,既要双方做好发送数据的准备工作(双方都知道彼此已经准备好),也要运行双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
假定B决定给A发送一个连接请求分组,A收到了分组,并发送了确认分组,按照两次握手的协定,A认为连接已经成功建立了,可以开始发送数据分组,可是B在A的应答分组在传输中被丢失的情况下,将不知道A是否已经准备号,不知道A建议什么样的序列号,B甚至怀疑A是否收到了自己的请求连接分组,在这种情况下还未建立成功,将忽略A发送过来的任何数据,只等待连接确认分组
而A发送的分组超过之后,重复发送同样的分组,这样就形成了死锁