计算机网络:第五章运输层课后习题及答案(精细版)

1.试说明运输层在协议栈中的地位和作用,运输层的通信和网络层的通信有什么重要区别?为什么运输层是必不可少的? 

答:

运输层处于面向通信部分的最高层,同时也是用户功能中的最低层,向它上面的应用层提供服务向下兼容网络层,起到承上启下的中间作用 
运输层为应用进程之间提供端到端的逻辑通信,但网络层是为主机之间提供逻辑通信(面向主机,承担路由功能,即主机寻址及有效的分组交换)。 
各种应用进程之间通信需要“可靠或尽力而为”的两类服务质量,必须由运输层以复用和分用的形式加载到网络层。 
2 . 网络层提供数据报或虚电路服务对上面的运输层有何影响?

答:网络层提供数据报或虚电路服务不影响上面的运输层的运行机制。 但提供不同的服务质量。

网络层所提供的服务越多,传输层协议就可以做得越简单。若网络层提供虚电报服务,那就能保证报文五差错、不丢失、不重复且按序地进行交互,因而传输协议就很简单。

但若网络层提供的是不可靠的数据报服务,则就要求主机上有一个复杂的传输协议。

3 .当应用程序使用面向连接的TCP和无连接的IP时,这种传输是面向连接的还是面向无连接的?

答:都是。这要在不同层次来看,在运输层是面向连接的,在网络层则是无连接的。

4.试用画图解释运输层的复用。画图说明许多个运输用户复用到一条运输连接上,而这条运输连接又复用到IP数据报上。

       

5. 试举例说明有些应用程序愿意采用不可靠的UDP,而不用采用可靠的TCP。

答:VOIP:由于语音信息具有一定的冗余度,人耳对VOIP数据报损失由一定的承受度,但对传输时延的变化较敏感。有差错的UDP数据报在接收端被直接抛弃,TCP数据报出错则会引起重传,可能带来较大的时延扰动。因此VOIP宁可采用不可靠的UDP,而不愿意采用可靠的TCP。

原理:有差错的数据报UDP直接丢弃,而TCP则要求重传,TCP会带来较大的时延

此外还有DNS、SNMP等都采用不可靠的UDP协议,而不愿意采用可靠的TCP

6 .接收方收到有差错的UDP用户数据报时应如何处理?

答:丢弃

7 .如果应用程序愿意使用UDP来完成可靠的传输,这可能吗?请说明理由答。

答:可能,但应用程序中必须额外提供与TCP相同的功能。

8.为什么说UDP是面向报文的,而TCP是面向字节流的?

答:发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。接收方 UDP 对 IP 层交上来的 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,客户进程运行时动态选择
把端口划分为3类是因为:避免端口号重复,无法区分应用进程。二是因特网上的计算机通信都是采用C/S方式,在客户发起通信请求时,必须知道服务器的端口,对应一些重要的应用程序,必须让所有用户知道。

10.试说明运输层中伪首部的作用。 

答:用于计算运输层数据报校验和。

伪首部(pseudo header),通常有TCP伪首部和UDP伪首部。在UDP伪首部中,包含32位源IP地址,32位目的IP地址,8位协议,16位UDP长度。通过伪首部的校验,UDP可以确定该数据报是不是发给本机的,通过首部协议字段,UDP可以确认有没有误传。

11.某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报。既然都是数据报,可否跳过UDP而直接交给IP层?哪些功能UDP提供了但IP没提提供?

答:IP数据报只能找到目的主机而无法找到目的进程。UDP提供对应用层的复用和分用功能,并提供对数据部分的差错检验。

12.一个应用程序用UDP,到IP层把数据报在划分为4个数据报片发送出去,结果前两个数据报片丢失,后两个到达目的站。过了一段时间应用程序重传UDP,而IP层仍然划分为4个数据报片来传送。结果这次前两个到达目的站而后两个丢失。试问:在目的站能否将这两次传输的4个数据报片组装成完整的数据报?假定目的站第一次收到的后两个数据报片仍然保存在目的站的缓存中。

答:不行  重传时,IP数据报的标识字段会有另一个标识符。 仅当标识符相同的IP数据报片才能组装成一个IP数据报。前两个IP数据报片的标识符与后两个IP数据报片的标识符不同,因此不能组装成一个IP数据报。

13 .一个UDP用户数据的数据字段为8192字节。在数据链路层要使用以太网来传送。试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值。

答:UDP报文的长度=8192+8=8200字节。由于以太网的MTU=1500字节,所以IP分组的数据部分长度为1500-20=1480字节。因此需要划分为6个IP数据片。

数据字段的长度:前5个是1480字节,最后一个是800字节。

片偏移字段的值分别是:0,185,370,555,740和925.。

14. 一UDP用户数据报的首部十六进制表示是:06 32 00 45 00 1C  E2 17.试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器发送给客户?使用UDP的这个服务器程序是什么?

答:源端口0x0632=1586,目的端口0x0045=69,UDP用户数据报总长度0x001C=28字节,数据部分长度是28-8=20字节。 此UDP用户数据报是从客户发给服务器(因为目的端口号<1023,是熟知端口),服务器程序是TFFTP。

15.使用TCP对实时话音数据的传输有没有什么问题?使用UDP在传送数据文件时会有什么问题?

答:如果语音数据不是实时播放(边接受边播放)就可以使用TCP,因为TCP传输可靠。接收端用TCP讲话音数据接受完毕后,可以在以后的任何时间进行播放。但假定是实时传输,则必须使用UDP。  UDP不保证可靠交付,但UCP比TCP的开销要小很多。因此只要应用程序接受这样的服务质量就可以使用UDP。

16.在停止等待协议中如果不使用编号是否可行?为什么?

答:分组和确认分组都必须进行编号,才能明确哪个分则得到了确认。

停止等待协议要点:

 停止等待协议用于通信系统中,两个相连的设备相互发送信息时使用,以确保信息不因丢包或包乱序而丢失,是最简单的自动重传请求方法。
只有收到序号正确的确认帧 ACKn 后,才更新发送状态变量 V(S)一次,并发送新的数据帧。
接收端接收到数据帧时,就要将发送序号 N(S) 与本地的接收状态变量 V(R) 相比较。
若二者相等就表明是新的数据帧,就收下,并发送确认。否则为重复帧,就必须丢弃。但这时仍须向发送端发送确认帧 ACKn,而接收状态变量 V(R) 和确认序号 n 都不变。
连续出现相同发送序号的数据帧,表明发送端进行了超时重传。连续出现相同序号的确认帧,表明接收端收到了重复帧。
发送端在发送完数据帧时,必须在其发送缓存中暂时保留这个数据帧的副本。这样才能在出差错时进行重传。只有确认对方已经收到这个数据帧时,才可以清除这个副本。
实用的CRC 检验器都是用硬件完成的。
CRC 检验器能够自动丢弃检测到的出错帧。因此所谓的“丢弃出错帧”,对上层软件或用户来说都是感觉不到的。
发送端对出错的数据帧进行重传是自动进行的,因而这种差错控制体制常简称为ARQ(Automatic Repeat reQuest),直译是自动重传请求,但意思是自动请求重传。

17. 在停止等待协议中,如果收到重复的报文段时不予理睬(即悄悄地丢弃它而其他什么也没做)是否可行?试举出具体的例子说明理由。

答: 收到重复帧不确认相当于确认丢失

不可行。例如:发送方发送M1,接受方收到M1,确认M1,确认M1丢失。发送方超时重传M1,如果接受方收到重复的M1,不理睬,发送方又超时,又重传M1,如此重复下去了。

18.假定在运输层使用停止等待协议。发送发在发送报文段M0后再设定的时间内未收到确认,于是重传M0,但M0又迟迟不能到达接收方。不久,发送方收到了迟到的对M0的确认,于是发送下一个报文段M1,不久就收到了对M1的确认。接着发送方发送新的报文段M0,但这个新的M0在传送过程中丢失了。正巧,一开始就滞留在网络中的M0现在到达接收方。接收方无法分辨M0是旧的。于是收下M0,并发送确认。显然,接收方后来收到的M0是重复的,协议失败了。试画出类似于图5-9所示的双方交换报文段的过程。

答:  旧的M0被当成新的M0。      收下后就丢弃,什么也不做。 

19.试证明:当用n比特进行分组的编号时,若接收到窗口等于1(即只能按序接收分组),当仅在发送窗口不超过2n-1时,连接ARQ协议才能正确运行。窗口单位是分组。

这里的n比特进行分组编号即指序号为n位 协议中的是16位

答:由于使用n比特对分组进行编码,所以分组的编号从0~2n-1,现假设发送方窗口的大小为2n,则发送方可一次发送序号为0~2n-1的分组。  

假定序号为0~2n-1的分组全部发送且接收方正确接收后,接收方将用ACK0来进行确认,发送方收到此分组后,不能确定的是重传序号为0的旧分组还是新分组,出现二义性,故发送窗口不能超过2n-1。  

20.在连续ARQ协议中,若发送窗口等于7,则发送端在开始时可连续发送7个分组。因此,在每一分组发送后,都要置一个超时计时器。现在计算机里只有一个硬时钟。设这7个分组发出的时间分别为t0,t1…t6,且tout都一样大。试问如何实现这7个超时计时器(这叫软件时钟法)?

答:可采用链表记录,其信息域为分组的相对发送时间和分组编号来实现。当编号为0的分组定时时钟到期后,修改链表指针并重发此分组,同时将头指针指向编号为1的分组,以此类推。

补充:方法2:可以定义一个含有7个数据的数组,数组中的数据表示时间,当该组数据发送出去时,在对应序号的数组中填入时间值,该时间值是该组发送出去的时间+超时时间得到,如何不停的对该数组的值进行扫描,当接收到接收端的确认分组时,即将对应数组序号的时间值设置为空,准备记录下一个数据发发送时间,当系统时间大于数组中某一个时间值时,说明该分组以及超时了,需要进行重传

21.使用连续ARQ协议中,发送窗口大小事3,而序列范围[0,15],而传输媒体保证在接收方能够按序收到分组。在某时刻,接收方,下一个期望收到序号是5。  

试问:  

(1)在发送方的发送窗口中可能有出现的序号组合有哪几种?  

(2)接收方已经发送出去的、但在网络中(即还未到达发送方)的确认分组可能有哪些?说明这些确认分组是用来确认哪些序号的分组。  

答:

(1)序号到4为止的分组都已收到。若这些确认都已到达发送方,则发送窗口的范围是[5,7]。假定所有的确认都丢失了,发送方没有收到这些确认。这时,发送窗口应为[2,4]。因此,发送窗口可以是[2,4],[3,5],[4,6],[5,7]中的任何一个。

(2)接收方期望收到序号5的分组,说明序号为2,3,4的分组都已收到,并且发送了确认。对序号为1的分组确认肯定被发送方收到了,否则发送方不可能发送4号分组。可见,对序号为2,3,4的分组的确认有可能仍滞留在网络中。这些确认是用来确认序号为2,3,4的分组。

22.主机A向主机B发送一个很长的文件,其长度为L字节。假定TCP使用的MSS有1460字节。  

(1)在TCP的序号不重复使用的条件下,L的最大值是多少?  

(2)假定使用上面计算出文件长度,而运输层、网络层和数据链路层所使用的首部开销共66字节,链路的数据率为10Mb/s,试求这个文件所需的最短发送时间。  

答:

( 1 ) L 的最大值是 2^ 32=4GB=4294967296 字节
        因为TCP报文 序号 字段——占 4 字节(32位)。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 L是让求文件的长度,即TCP报文 序号 字段最多可以表示的字节的总数
(2 )每次发送的报文段为 1460 字节。因此必须分4294967296/1460 取整为2941758,因为有余数,所以29417598+1即 2941759 个报文段。(而不是2941758)发送的总字节数是 2941759*66+4294967296=4489123390 字节。
发送 4489123390 字节需时间为 4489123390 × 8 ÷10Mb/s=3591.3 秒≈ 59.85 分≈ 1 小时。

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)180-100=80 字节。  

(4) 70  

24 一个TCP连接下面使用256kb/s的链路,其端到端时延为128ms。经测试,发现吞吐量只有120kb/s。试问发送窗口W是多少?(提示:可以有两种答案,取决于接收端发出确认的时机)。  

答:

本题目主要考查的是“TCP流量控制”。
为了提高报文段的传输效率,TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位为字节。发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值。发送端利用发送窗口调节向网络注入分组的速率不仅是为了使接收端来得及接收,而且还是为了对网络进行拥塞控制。在每一个运输连接上报文段是断续发送的,这样就有了两种速率。一种是链路层的数据率,另一种是从运输层看到的数据注入速率。
题目中给出端到端时延为128ms,则在一个传输周期里,从发送第一个报文段到收到所有确认时间为:W/R+2*T,其中w为发送窗口的大小,R为链路速率,T为端到端时延。因此吞吐量TP=W/(W/R+2*T),将题目中的具体数据代入,即可求得W=7228字节。

(b)W/256=120kb/s   推出w=3840B

25.为什么在TCP首部中要把TCP端口号放入最开始的4个字节?  

答:在ICMP的差错报文中要包含IP首部后面的8个字节的内容,而这里面有TCP首部中的源端口和目的端口。当TCP收到ICMP差错报文时需要用这两个端口来确定是哪条连接出了差错。  

26.为什么在TCP首部中有一个首部长度字段,而UDP的首部中就没有这个这个字段?  

答:TCP首部除固定长度部分外,还有选项,因此TCP首部长度是可变的。UDP首部长度是固定的。  

27.一个TCP报文段的数据部分最多为多少个字节?为什么?如果用户要传送的数据的字节长度超过TCP报文字段中的序号字段可能编出的最大序号,问还能否用TCP来传送?  

答:65495字节,此数据部分加上TCP首部的20字节,再加上IP首部的20字节,正好是IP数据报的最大长度65535。(当然,若IP首部包含了选择,则IP首部长度超过20字节,这时TCP 报文段的数据部分的长度将小于65495字节。)数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号,通过循环使用序号,仍能用TCP来传送。  

IP数据报的最大长度=2^16-1=65535(字节)
TCP报文段的数据部分=IP数据报的最大长度-IP数据报的首部-TCP报文段的首部=65535-20-20=65495(字节)

一个tcp报文段的最大载荷是65515字节.

IP数据报的最大长度为2^16-1=65536B,减去IP数据报首部20B和TCP首部20B后的TCP报文段的数据部分为65495B。

28.主机A向主机B发送TCP报文段,首部中的源端口是m而目的端口是n。当B向A发送回信时,其TCP报文段的首部中源端口和目的端口分别是什么?  

答:分别是n和m。  

29.在使用TCP传送数据时,如果有一个确认报文段丢失了,也不一定会引起与该确认报文段对应的数据的重传。试说明理由。  

答:还未重传就收到了对更高序号的确认。  

因为TCP接收方只会对按序到达的最后一个分组发送确认 

当对更高的序号确认了 意味着已经到达了,即不用重传了。

30.设TCP 使用的最大窗口为65535字节,而传输信道不产生差错,带宽也不受限制。若报文段的平均往返时延为20ms,问所能得到的最大吞吐量是多少?  

答:在发送时延可忽略的情况下,最大数据率=最大窗口*8/平均往返时间=26.2Mb/s。  

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  

最大吞吐量=L/(L/C+2×Td)=524600/0.0205246=25.5Mb/s  

信道的利用率=(L/C)//(L/C+2×D)=0.0255  

最大吞吐量为25.5Mb/s。信道利用率为25.5/1000=2.55%  

往返时延等于两倍的端到端传播时延,即20ms=0.02s
发送时延等于窗口数据量除以带宽,即65535*8/10^9秒
TCP每发送一个窗口,需要进行等待确认信息回来,所以每发送完一个窗口,最快需要经过一个往返时延才可以发送下一个窗口(确认信息很小不考虑发送时延),所以在一个传输轮次中,包含一个发送时延和一个往返时延,而传输的数据量是一个窗口的大小(这里不考虑TCP、IP首部和帧的构成)
所以最大吞吐量为一个窗口的大小除以一个传输轮次的时间,即65535*8/(65535*8/10^9+0.02)=25.54Mbit/s
信道利用率为25.54Mbit/s/1000Mbit/s=2.55%
注意在通信传输中G=10^9 M=10^6

32.什么是Karn算法?在TCP的重传机制中,若不采用Karn算法,而是在收到确认时都认为是对重传报文段的确认,那么由此得出的往返时延样本和重传时间都会偏小。试问:重传时间最后会减小到什么程度?  

答:Karn 算法:在计算平均往返时延RTT时,只要报文段重传了,就不采用其往返时延样本。在统计意义上,重传时间最后会减小到使用karn 算法的1/2. 

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)- RTT(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  

34.已知第一次测得TCP的往返时延的当前值RTT是30ms。现在收到了三个接连的确认报  

文段,它们比相应的数据报文段的发送时间分别滞后的时间是:26ms,32ms和24ms。设α=0.9。试计算每一次的新的加权平均往返时间值RTTs。讨论所得出的结果。  

答:a=0.1,RTT=30 ms,M1=26ms,M2=32ms,M3=24ms  

RTTS1=RTT*(1-a) +26*a=29.6  

RTTS2=RTT1*a+32(1-a)=29.84  

RTTS3=RTT2*a+24(1-a)=29.256  

三次算出加权平均往返时间分别为29.6,29.84 和29.256ms。可以看出,RTT 的样本值变化多达20%时,加权平均往返。  

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  

36.重复5-35题,但假定其中的一个陆地上的广域网的传输时延为150ms。  

答:5段链路的传播时延=250*2+(1500/150000)*3*1000=530ms  

5段链路的发送时延=960/(48*1000)*4*1000+150=230ms  

所以5段链路单程端到端时延=530+230=760ms  

37.在TCP的拥塞控制中,什么是慢开始、拥塞避免、快重传和快恢复算法?这里每一种算法各起什么作用? “乘法减小”和“加法增大”各用在什么情况下?  

答:慢开始:  

在主机刚刚开始发送报文段时可先将拥塞窗口cwnd设置为一个最大报文段MSS的数值。在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个MSS 的数值。用这样的方法逐步增大发送端的拥塞窗口cwnd,可以分组注入到网络的速率更加合理。  

拥塞避免:  

当拥塞窗口值大于慢开始门限时,停止使用慢开始算法而改用拥塞避免算法。拥塞避免算法使发送的拥塞窗口每经过一个往返时延RTT就增加一个MSS的大小。  

快重传算法规定:  

发送端只要一连收到三个重复的ACK即可断定有分组丢失了,就应该立即重传丢手的报文段而不必继续等待为该报文段设置的重传计时器的超时。  

快恢复算法:  

当发送端收到连续三个重复的ACK时,就重新设置慢开始门限ssthresh与慢开始不同之处是拥塞窗口cwnd不是设置为1,而是设置为ssthresh若收到的重复的ACK为n个(n>3),则将cwnd 设置为ssthresh若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。若收到了确认新的报文段的ACK,就将cwnd缩小到ssthresh。  

乘法减小:  

是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值ssthresh设置为当前的拥塞窗口值乘以0.5。当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。  

加法增大:  

是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口cwnd增加一个MSS大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。  

38.设TCP的ssthresh的初始值为8(单位为报文段)。当拥塞窗口上升到12时网络发生了超时,TCP使用慢开始和拥塞避免。试分别求出第1 次到第15 次传输的各拥塞窗口大小。你能说明拥塞控制窗口每一次变化的原因吗?  

答:拥塞窗口大小分别为:1,2,4,8,9,10,11,12,1,2,4,6,7,8,9。  

依照原理,首先执行TCP连接初始化,将拥塞窗口cwnd值置为1;其次执行慢开始算法,cwnd按指数规律增长,因此随后窗口大小分别为2,4,8。当拥塞窗口cwnd=ssthresh时,进入拥塞避免阶段,其窗口大小依次是9,10,11,12,直到上升到12为止发生拥塞;然后把门限值ssthresh设置为当前的拥塞窗口值乘以0.5,门限值ssthresh变为6,;然后进入慢开始,cwnd值置为1,cwnd按指数规律增长,随后窗口大小分别为1,2,4,6,当拥塞窗口cwnd=ssthresh时,进入拥塞避免阶段,其窗口大小依次是7,8,9。  

39.TCP的拥塞窗口cwnd 大小与传输轮次n的关系如表5.1所示:  

表5.1 拥塞窗口cwnd 大小与传输轮次n的关系  

cwnd 

1  

2  

4  

8  

16  

32  

33  

34  

35  

36  

37  

38  

39  

n  

1  

2  

3  

4  

5  

6  

7  

8  

9  

10  

11  

12  

13  

cwnd 

40  

41  

42  

21  

22  

23  

24  

25  

26  

1  

2  

4  

8  

n  

14  

15  

16  

17  

18  

19  

20  

21  

22  

23  

24  

25  

26  

(1)试画出如教材中图5-25所示的拥塞窗口与传输轮次的关系曲线。  

(2)指明TCP 工作在慢开始阶段的时间间隔。  

(3)指明TCP 工作在拥塞避免阶段的时间间隔。  

(4)在第16 轮次和第22 轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?  

(5)在第1轮次,第18轮次和第24 轮次发送时,门限ssthresh分别被设置为多大?  

(6)在第几轮次发送出第70 个报文段?  

(7)假定在第26 轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd和门限ssthresh应设置为多大?  

答:

40.TCP 在进行流量控制时是以分组的丢失作为产生拥塞的标志。有没有不是因拥塞而  

引起的分组丢失的情况?如有,请举出三种情况。  

答:  

当IP数据报在传输过程中需要分片,但其中的一个数据报未能及时到达终点,而终点组装IP 数据报已超时,因而只能丢失该数据报;IP 数据报已经到达终点,但终点的缓存没有足够的空间存放此数据报;数据报在转发过程中经过一个局域网的网桥,但网桥在转发该数据报的帧没有足够的差错空间而只好丢弃。  

41.用TCP传送512字节的数据。设窗口为100字节,而TCP报文段每次也是传送100字节的数据。再设发送端和接收端的起始序号分别选为100和200,试画出类似于教材中图5-31的工作示意图。从连接建立阶段到连接释放都要画上。  

答:答案如图5.4所示。  

图5.4 TCP传送数据的工作示意图  

42.在图5-29中所示的连接释放过程中,主机B能否先不发送ACK=x+1 的确认? (因为后面要发送的连接释放报文段中仍有ACK=x+1 这一信息)  

答:  

如果B 不再发送数据了,是可以把两个报文段合并成为一个,即只发送FIN+ACK 报文段。但如果B 还有数据报要发送,而且要发送一段时间,那就不行,因为A 迟迟收不到确认,就会以为刚才发送的FIN 报文段丢失了,就超时重传这个FIN 报文段,浪费网络资源。  

43.在图(5-30)中,在什么情况下会发生从状态LISTEN到状态SYN_SENT,以及从状态SYN_ENT到状态SYN_RCVD的变迁?  

答:当A和B都作为客户,即同时主动打开TCP连接。这时的每一方的状态变迁

都是:CLOSED----→SYN-SENT---→SYN-RCVD--→ESTABLISHED

44.试以具体例子说明为什么一个运输连接可以有多种方式释放。可以设两个互相通信的用户分别连接在网络的两结点上。  

答:设A,B建立了运输连接。协议应考虑一下实际可能性:  

A或B故障,应设计超时机制,使对方退出,不至于死锁;  

A主动退出,B被动退出  

B主动退出,A被动退出  

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是否收到自己的连接请求分组,在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。而A发出的分组超时后,重复发送同样的分组。这样就形成了死锁。  

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  

48.网络允许的最大报文段长度为128字节,序号用8比特表示,报文段在网络中的寿命为30s,则每一条TCP连接所能达到的最高数据传输速率为?

具有相同编号的报文段不应该同时在网络中传输,必须保证当序列号循环回来重复使用的时候,具有相同序列号的报文段已经从网络中消失。若序号用8比特表示,报文段的寿命为30s,那么在30s的时间内发送方发送的报文段的数目不能多于255个。网络允许的最大报文段长度为128B,再结合下式可得每一条TCP连接所能达到的最高数据传输速率约为8.7kbps。

49.下面是以十六进制格式存储的一个UDP首部:

CB84000D001C001C

试问:

a.源端口号是什么?

b.目的端口号是什么?

c.这个用户数据报的总长度是什么?

d.数据长度是多少?

e.这个分组是从客户到服务器还是从服务器到客户?

答:

a.源端口号是最前面的四位十六进制(CB84),代表着源端口号为52100。

b.目的端口号是第二个四位十六进制(000D),代表着目的端口号为13。

c.第三个四位十六进制(001C)定义了整个UDP分组的长度为28字节。

d.数据的长度是整个分组的长度减去首部的长度,也就是28-8=20字节。

e.目的端口号是13(熟知端口),所以是从客户到服务器的。

猜你喜欢

转载自blog.csdn.net/weixin_44015669/article/details/89944262
今日推荐