计算机网络谢希仁第七版 第五章 传输层html
5—01 试说明运输层在协议栈中的地位和做用,运输层的通讯和网络层的通讯有什么重要区别?为何运输层是必不可少的?算法
答:运输层处于面向通讯部分的最高层,同时也是用户功能中的最低层,向它上面的应用层提供服务 运输层为应用进程之间提供端到端的逻辑通讯,但网络层是为主机之间提供逻辑通讯(面向主机,承担路由功能,即主机寻址及有效的分组交换)。 各类应用进程之间通讯须要“可靠或尽力而为”的两类服务质量,必须由运输层以复用和分用的形式加载到网络层。 缓存
5—02 网络层提供数据报或虚电路服务对上面的运输层有何影响?服务器
答案:网络层提供数据报或虚电路服务不影响上面的运输层的运行机制。 但提供不一样的服务质量。网络
谢希仁并发
5—03 当应用程序使用面向链接的TCP和无链接的IP时,这种传输是面向链接的仍是面向无链接的?测试
答案:都是。这要在不一样层次来看,在运输层是面向链接的,在网络层则是无链接的。大数据
谢希仁spa
5—04 试用画图解释运输层的复用。画图说明许多个运输用户复用到一条运输链接上,而这条运输链接有复用到IP数据报上。 操作系统
5—05 试举例说明有些应用程序愿意采用不可靠的UDP,而不用采用可靠的TCP。答案:VOIP:因为语音信息具备必定的冗余度,人耳对VOIP数据报损失由必定的承受度,但对传输时延的变化较敏感。 有差错的UDP数据报在接收端被直接抛弃,TCP数据报出错则会引发重传,可能
带来较大的时延扰动。
所以VOIP宁肯采用不可靠的UDP,而不肯意采用可靠的TCP。
5—06 接收方收到有差错的UDP用户数据报时应如何处理?答案:丢弃
5—07 若是应用程序愿意使用UDP来完成可靠的传输,这可能吗?请说明理由答案:可能,但应用程序中必须额外提供与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用户数据报的首部十六进制表示是:06 32 00 45 00 1C E2 17.试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器发送给客户?使用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 试证实:当用n比特进行分组的编号时,若接收到窗口等于1(即只能按序接收分组),当仅在发送窗口不超过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向主机B发送一个很长的文件,其长度为L字节。假定TCP使用的MSS有1460字节。
(1) 在TCP的序号不重复使用的条件下,L的最大值是多少?
(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连续发送了两个TCP报文段,其序号分别为70和100。试问:
(1) 第一个报文段携带了多少个字节的数据?
(2) 主机B收到第一个报文段后发回的确认中的确认号应当是多少?
(3) 若是主机B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?
(4) 若是A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。试问这个确认号应为多少?
解:(1)第一个报文段的数据序号是70到99,共30字节的数据。
(2)确认号应为100.(3)80字节。 (4)70
5—24 一个TCP链接下面使用256kb/s的链路,其端到端时延为128ms。经测试,发现吞吐量只有120kb/s。试问发送窗口W是多少?(提示:能够有两种答案案,取决于接收等发出确认的时机)。
解:来回路程的时延等于256ms(=128ms×2).设窗口值为X(注意:以字节为单位),假定一次最大发送量等于窗口值,且发射时间等于256ms,那么,每发送一次都得停下来期待再次获得下一窗口的确认,以获得新的发送许可.这样,发射时间等于中止等待应答案的时间结果,测到的平均吞吐率就等于发送速率的一半,即8X÷(256×1000)=256×0.001X=8192因此,窗口值为8192.
5—25 为何在TCP首部中要把TCP端口号放入最开始的4个字节? 答案:在ICMP的差错报文中要包含IP首部后面的8个字节的内容,而这里面有TCP首部中的源端口和目的端口。当TCP收到ICMP差错报文时须要用这两个端口来肯定是哪条链接出了差错。
5—26 为何在TCP首部中有一个首部长度字段,而UDP的首部中就没有这个这个字段? 答案:TCP首部除固定长度部分外,还有选项,所以TCP首部长度是可变的。UDP首部长度是固定的。
5—27 一个TCP报文段的数据部分最多为多少个字节?为何?若是用户要传送的数
据的字节长度超过TCP报文字段中的序号字段可能编出的最大序号,问还可否用TCP来传送?
答案:65495字节,此数据部分加上TCP首部的20字节,再加上IP首部的20字节,正好是IP数据报的最大长度65535.(固然,若IP首部包含了选择,则IP首部长度超过 20字节,这时TCP报文段的数据部分的长度将小于65495字节。) 数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号,经过循环使用序号,仍能用TCP来传送。
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的往返时延的当前值是30 ms。如今收到了三个接连的确认报文段,它们比相应的数据报文段的发送时间分别滞后的时间是: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的数值。在每收到一个对新的报文段的确认后,将拥塞窗口增长至多一个MSS的数值。用这样的方法逐步增大发送端的拥塞窗口cwnd,能够分组注入到网络的速率更加合理。 拥塞避免: 当拥塞窗口值大于慢开始门限时,中止使用慢开始算法而改用拥塞避免算法。拥塞避免算法使发送的拥塞窗口每通过一个往返时延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报文段每次也是传送100字节的数据。再设发送端和接收端的起始序号分别选为100和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报文段会丢失。而使用TCP的链接释放方法,主机2发出了释放链接的请求,那么即便收到主机1的确认后,只会释放主机2到主机1方向的链接,即主机2再也不向主机1发送数据,而仍然可接受主机1发来的数据,因此可保证不丢失数据。
5—46 试用具体例子说明为何在运输链接创建时要使用三次握手。说明如不这样作可能会出现什么状况。答案: 3次握手完成两个重要的功能,既要双方作好发送数据的准备工做(双方都知道彼此已
准备好),也要容许双方就初始序列号进行协商,这个序列号在握手过程当中被发送和确认。
假定B给A发送一个链接请求分组,A收到了这个分组,并发送了确认应答案分组。按照两
次握手的协定,A认为链接已经成功地创建了,能够开始发送数据分组。但是,B在A的应答案分组在传输中被丢失的状况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑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<R(RTT)+M
其中,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]