目录

课后习题;

练习题:


课后习题;

【5-02】网络层提供数据报或虚电路服务,对上面的运输层有何影响?
网络层提供的两种服务的最大不同就是:数据报不提供可靠的交付,而虚电路服务则提供可靠的交付。初看起来,似乎是如果网络层提供了可靠的交付,那么运输层就可以简化一些,就不需要可靠交付了,因而可以简化一些。其实不然。事实证明,即使网络层提供了可靠的交付,那也只是主机到主机的通信是可靠的,而我们需要的进程到进程的通信仍然可能出错。因此,当必须保证可靠通信时,不管网络层提供多么可靠的服务,运输层仍然必须有可靠交付的协议。因此,互联网在网络层只提供比较简单的数据报服务(这样就使得网络层大大简化,使得网络的造价降低),而用连接在网络上的主机中的运输层来实现可靠交付。可见对于互联网的设计,网络层的服务并没有对运输层的设计产生多大的影响。

【5-03】当应用程序使用面向连接的TCP和无连接的IP时,这种传输是面向连接的还
是无连接的?

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

【5-04】试画图解释运输层的复用。画图说明许多个运输用户复用到一条运输连接上,而这条运输连接又复用到IP数据报上。
图T-5-04给出了这种复用的简单例子。

在图T-5-04中,主机H3同时与主机H1和H2进行通信。H1和H3的两个应用进程(HTTP和SMTP)进行通信,这需要使用两个TCP连接。这两个TCP 连接所传送的报文段,使用下面的网络层的IP数据报传送。H2和 H3的应用进程(HTTP)进行通信,这需要使用一个TCP连接。这个TCP 连接所传送的报文段,也要使用下面的网络层的IP数据报来传送。在网络层所传送的IP数据报已看不到运输层以上的复用情况。

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

这可能有以下几种情况。
首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用TCP协议对这些出错或丢失的分组进行重传,那么时延就会大大增加。因此,实时数据的传输在运输层就应采用用户数据报协议UDP,而不使用TCP协议。这就是说,对于传送实时数据,我们宁可丢失少量分组(当然不能丢失太多,否则重放的质量就太差了),也不要等待太晚到达的分组。在连续的音频或视频数据流中,很少量分组的丢失对播放效果的影响并不大(因为这是由人来进行主观评价的),因而是可以容忍的。在这种情况下,我们愿意采用不可靠的UDP,而不愿意采用可靠的TCP。
其次,当网络出现拥塞时,TCP的拥塞控制就会让TCP的发送方放慢报文段的发送。可能有的应用程序就不愿意放慢其报文段的发送速度。另外,可能有的应用程序不需要TCP的可靠传输。在这些情况下,就宁可使用UDP来传送。

【5-06】接收方收到有差错的UDP用户数据报时应如何处理?

简单地丢弃。

【5-07】如果应用程序愿意使用UDP完成可靠传输,这可能吗?请说明理由。
这是可能的,但这要由应用层自己来完成可靠传输。例如,应用层自己使用可靠传输协议。当然,这还是需要相当大的工作量的。

【5-08】为什么说UDP是面向报文的,而TCP是面向字节流的?
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,如教材的图5-4所示。在接收方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率。反之,若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太大,这也降低了IP层的效率。

【5-09】端口的作用是什么?为什么端口号要划分为三种?
端口是用来标志进程的。端口也就是协议端口号。但这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。不同的系统,具体实现端口的方法可以是不同的(取决于系统使用的操作系统)。TCP/IP 的运输层用一个16位端口号来标志一个端口。但端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。在互联网中不同的计算机中,相同的端口号是没有关联的。
两个计算机中的进程要互相通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
端口号有三种。不同的端口类别有其特殊的用途。例如,客户端是通信的发起方,而服务器是服务的提供方。它们对端口的使用要求是不同的。这三种端口号是:
(1)熟知端口号或系统端口号,数值为0~1023。这些数值可在网址 www.iana.org 查到。IANA把这些端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。
(2)登记端口号,数值为1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。使用这类端口号必须按照IANA规定的手续登记,以防止重复。
上面两种端口号是服务器端使用的端口号。下面的一种是客户端使用的端口号。
(3)短暂端口号,数值为49152~65535。这类端口号仅在客户进程运行时才动态选择,是留给客户进程选择暂时使用。

【5-10】试说明运输层中伪首部的作用。
所谓“伪首部”是因为这种伪首部并不是UDP用户数据报或TCP报文段真正的首部。只是在计算检验和时,临时添加在UDP用户数据报或TCP报文段的前面,得到一个临时的UDP用户数据报或TCP报文段。检验和就是按照这个临时的UDP用户数据报或TCP报文段来计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算运输层的检验和。

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

IP 数据报只能找到目的主机而无法找到目的进程。如果应用进程直接把数据交给下面的IP层,那么在传送到对方IP层后,就只能交付目的主机,但不知道应当交付哪一个应用进程。UDP提供对应用进程的复用和分用功能,以及提供对数据部分的差错检验。这些功能IP层没有提供。

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

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

【5-13】一个UDP用户数据报的数据字段为8192字节。在链路层要使用以太网来传送。试问应当划分为几个IP数据报片?说明每一个IP数据报片的数据字段长度和片偏移字段的值。
UDP用户数据报的长度=8192+8= 8200 B
以太网数据字段最大长度是1500 B。若IP首部为20 B,则IP数据报的数据部分最多只能有1480B。8200= 1480 × 5+800,因此划分的数据报片共6个。
数据字段的长度:前5个是1480字节,最后一个是800字节。

第1个数据报片的片偏移字节是0。
第2个数据报片的片偏移字节是1480 B。
第3个数据报片的片偏移字节是1480× 2 = 2960 B。

第4个数据报片的片偏移字节是1480x 3 = 4440 B。

第5个数据报片的片偏移字节是1480x 4 =5920 B。

第6个数据报片的片偏移字节是1480x 5=7400 B。

图T-5-13给出了以上结果。

把以上得出的片偏移字节数除以8,就得出片偏移字段中应当写入的的数值。因此最后的答案,片偏移字段的值分别是:0,185,370,555,740和925(字节数除以8)。

【5-14】一个UDP用户数据报的首部的十六进制表示是:06 32 00 45 00 1C E2 17。试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器还是从服务器发送给客户?使用UDP的这个服务器程序是什么?
把 UDP首部8个字节的数值写成二进制表示的数值,如下所示:

源端口00000110 00110010,其十进制表示是1024+512+ 32+16+2= 1586。

目的端口00000000 01000101,其十进制表示是64+4+1= 69。
UDP用户数据报总长度00000000 00011100,其十进制表示是16+8+4 =28字节。

数据部分长度是UDP总长度减去首部长度= 28-8=20字节。
此UDP用户数据报是从客户发给服务器(因为目的端口号<1023,是熟知端口)。服务器程序是TFTP(从教材5.1.3节的熟知端口号的表可查出)。

【5-15】使用TCP对实时话音数据的传输有没有什么问题?使用UDP在传送数据文件时会有什么问题?
对实时话音数据的传输是不能使用TCP的。这是因为用TCP传输话音数据时,只要一出现差错或丢失,TCP就要重传。这就产生了额外的时延,有时这种时延会达到很高的数值,使接收方无法容忍。在实时话音通信中,我们宁可丢掉几个分组(这在重放时,还原的话音质量会差一些,但仍然可以听懂),也不愿意收到太迟来到的分组,因为这样会使重放的话音质量严重恶化。虽然UDP不保证可靠交付,但UDP比 TCP的开销要小很多。因此只要应用程序接受这样的服务质量就可以使用UDP。
如果话音数据不是实时播放(边接收边播放)就可以使用TCP,因为TCP传输可靠。接收端用TCP将话音数据接收完毕后,可以在以后的任何时间进行播放。但本题目假定是实时话音数据传输,因此必须使用UDP。
使用UDP传送数据文件时,如果出现了差错,UDP仅仅是少收了这个出错的报文段,并不通知发送方重传。这样就不能保证正确地传送数据。因此在传送数据文件时,我们都是采用TCP来传送的。

【5-16】在停止等待协议中,如果不使用编号是否可行?为什么?
在停止等待协议中,如果不使用编号是不可行的。试考虑下面的例子(见图T-5-16)。A发送报文段M,B收到后发送确认(不编号)。但这个确认很晚才传送到A。A在没有等到确认时,超时重传了M。
B发送的第一个确认最后到了A,于是A发送下一个报文段M,但M丢失了。
B收到A发送的重传的M。但B并不知道是重传的,因为报文段没有编号。B无法判断是重传的老报文段,还是新的报文段。B只能把A发送的重传的M,收下,并发送确认。但这个确认使A认为是对其发送的M的确认,于是以为发送的两个报文段B都收到了。
这样简单的例子使我们看出,不使用编号,A以为发送的两个报文段都正确地传送到B,而实际上B收到了两个重复的报文段。可见在停止等待协议中,如果不使用编号是不可行的。

【5-17】在停止等待协议中,如果收到重复的报文段时不予理睬(即悄悄地丢弃它,而其他什么也不做)是否可行?试举出具体例子说明理由。
不可行。试看图T-5-17的例子。
A发送报文段M,B收到后发送确认,但这个确认丢失了。
A超时重传报文段M,B收到后不予理睬。这就导致A再次超时重传报文段M。B收到重复的报文段都不予理睬,A就一直超时重传报文段M。
可见,如果收到重复的报文段时不予理睬是不行的。

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

双方交换报文段的过程如图T-5-18所示。

我们可以看出,旧的M被当成是新的M!可见运输层不能使用停止等待协议(编号只有0和1两种)。

【5-20】在连续ARQ【自动重传请求】协议中,若发送窗口等于7,则发送端在开始时可连续发送7个分组。因此,在每一分组发出后,都要置-一个超时计时器。现在计算机里只有一个硬时钟。设这7个分组发出的时间分别为 to, t4),..., t6,且 tou,都一-样大。试问如何实现这7个超时计时器(这叫软时钟法)?
用相对发送时间实现一个链表(见图T-5-20)。

【5-21】假定使用连续ARQ协议,发送窗口大小是3,而序号范围是[0,15],而传输媒体保证在接收方能够按序收到分组。在某一时刻,在接收方,下一个期望收到的序号是5。试问;
(1)在发送方的发送窗口中可能出现的序号组合有哪些?
(2)接收方已经发送出的、但仍滞留在网络中(即还未到达发送方)的确认分组,可能有哪些?说明这些确认分组是用来确认哪些序号的分组。

分别回答如下:
(1)在接收方,下一个期望收到的序号是5。这表明序号到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的分组的。

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

(1)在 TCP的序号不重复使用的条件下,L的最大值是多少?
(2)假定使用上面计算出的文件长度,而运输层、网络层和数据链路层所用的
首部开销共66字节,链路的数据率为10 Mbit/s,试求这个文件所需的最短传输时间。

分别求解如下:
(1)可能的序号共2 32= 4294967296个。TCP的序号是数据字段的每一个字节的编号,而不是每一个报文段的编号。因此,这一小题与报文段的长度无关,即用不到题目给出的MSS值。这个文件L的最大值就是可能的序号数,即 4294967296字节。若1 GB = 2 30B,则L的最大值是4GB。
(2) 2 32/1460= 2941758.422,需要发送2941759个帧。

帧首部的开销是66×2941759= 194156094字节。
发送的总字节数是=2 32+194156094= 4489123390字节。

数据率10 Mbit/s = 1.25 MB/s=1250000字节/秒。
发送4489123390字节需时间为:4489123390/1250000= 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)B期望收到下一个报文段的第一个数据字节的序号是100,因此确认号应为100。

(3)A发送的第二个报文段中的数据中的字节数是180- 100= 80字节。
(4)B在第二个报文段到达后向A发送确认,其确认号应为70。


【5-27】一个TCP报文段的数据部分最多为多少个字节?为什么?如果用户要传送的数据的字节长度,超过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报文段的首部中的源端口和目的端口分别是什么?
当B向A发送回信时,其TCP报文段首部中的源端口就是A发送的TCP报文段首部中的目的端口n,而B发送的TCP报文段首部中的目的端口就是A发送的TCP报文段首部中的源端口 m。


【5-30】设TCP使用的最大窗口为65535字节,而传输信道不产生差错,带宽也不受限制。若报文段的平均往返时间为20 ms,问所能得到的最大吞吐量是多少?
在发送时延可忽略的情况下,每20 ms可发送65535×8 = 524280 bit
最大数据率 =(524280 bit) / (20 ms)26.2 Mbit/s。


【5-33】假定TCP在开始建立连接时,发送方设定超时重传时间RTO=6秒。
(1)当发送方收到对方的连接确认报文段时,测量出RTT样本值为1.5秒。试计算现在的RTO值。
(2)当发送方发送数据报文段并收到确认时,测量出RTT样本值为2.5秒。试计算现在的RTO值。
RTO值计算如下:
(1)当第一次测量到RTT样本时,RTTs值就取为这个测量到的RTT样本值。

因此,RTTs= 1.5 s。
根据RFC 2988的建议,当第一次测量时,RTTd值取为测量到的RTT样本值的一半。

因此,RTTd= (1/2)× 1.5 s=0.75 s。
根据教材上(5-5)式,RTO= RTTs+4× RTTd=1.5 s+4×0.75 s= 4.5 s
(2)新的RTT 样本 =2.5 s
按(5-4)式,新的RTTs =(1 - α)×(旧的RTTs)+ α×(新的RTT样本)
                                   =(1- 1/8)x 1.5 s +1/8×2.5 s= 1.625 s
按(5-6)式,新的RTTd=(1-β)×(旧的RTTd)+ β×|RTTs-新的RTT样本|
                                  =(1-1/4)×0.75 s +1/4× | 1.625 s- 2.5 s |=0.78125~0.78 s
按(5-5)式,RTO=RTTs+4× RTTd
                          = 1.625 s +4×0.78 s  4.75 s


【5-34】已知第一次测得TCP的往返时间RTT是30 ms。接着收到了三个确认报文段,用它们测量出的往返时间样本RTT分别是: 26 ms, 32 ms和 24 ms。设a =0.1。试计算每一次的新的加权平均往返时间值RTTs。讨论所得出的结果。
按教材上(5-4)式:新的RTTs=(l - α)×(旧的RTTs)+α×(新的RTT样本)

第一次算出:RTTs= (1-0.1)×30+0.1×26= 29.6 ms
第二次算出:RTTs= (1-0.1)×29.6+0.1×32= 29.84 ms
第三次算出:RTTs= (1-0.1)×29.84+0.1 x24= 29.256 ms

三次算出加权平均往返时间分别为29.6, 29.84和29.256 ms。
可以看出,RTT 的样本值变化多达20%时((30 - 24)/30 = 6/30= 1/5 = 20%),加权平均往返时间RTTs的变化却很小。


【5-37】在TCP的拥塞控制中,什么是慢开始、拥塞避免、快重传和快恢复算法?这里每一种算法各起什么作用?“乘法减小”和“加法增大”各用在什么情况下?
慢开始算法的思路是这样的:当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。经验证明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。使用慢开始算法后,每经过一个传输轮次,拥塞窗口cwnd就加倍。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
拥塞避免算法的思路是让拥塞窗口 cwnd缓慢地增大,即每经过一个往返时间RTT 就把发送方的拥塞窗口 cwnd 加1,而不是加倍。这样,拥塞窗口cwnd 按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
快重传算法首先要求接收方每收到一个失序的报文段后,就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等待自己发送数据时才进行捎带确认。
快恢复算法,其过程有以下两个要点:
(1)当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh 减半。这是为了预防网络发生拥塞。请注意,接下去不执行慢开始算法。
(2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
“乘法减小”是指不论在慢开始阶段还是拥塞避免阶段,只要出现超时(即很可能出现了网络拥塞),就把慢开始门限值ssthresh 减半,即设置为当前的拥塞窗口的一半(与此同时,执行慢开始算法)。当网络频繁出现拥塞时,ssthresh值就下降得很快,以大大减少注入到网络中的分组数。
“加法增大”是指执行拥塞避免算法后,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。


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


【5-39】TCP的拥塞窗口cwnd大小与传输轮次n的关系如表T-5-39所示;

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

(2)指明TCP工作在慢开始阶段的时间间隔。
(3)指明TCP工作在拥塞避免阶段的时间间隔。
(4)在第16轮次和第22轮次之后发送方是通过收到三个重复的确认,还是通过超时检测到丢失了报文段?
(5)在第1轮次、第18轮次和第24轮次发送时,门限ssthresh分别被设置为多大?
(6)在第几轮次发送出第70个报文段?
(7)假定在第26轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口 cwnd和门限 ssthresh应设置为多大?

(1)拥塞窗口与传输轮次的关系曲线如图T-5-39所示。

(2)慢开始时间间隔:[1,6]和[23,26]。

(3)拥塞避免时间间隔:[6,16]和[17,22]。
(4)在第16轮次之后发送方通过收到三个重复的确认,检测到丢失了报文段,因为题目给出,下一个轮次的拥塞窗口减半了。
在第22轮次之后发送方是通过超时检测到丢失了报文段,因为题目给出,下一个轮次的拥塞窗口下降到1了。
(5)在第1轮次发送时,门限 ssthresh被设置为32,因为从第6轮次起就进入了拥塞避免状态,拥塞窗口每个轮次加1。
在第18轮次发送时,门限ssthresh被设置为发生拥塞时拥塞窗口42的一半,即21。
在第24轮次发送时,门限ssthresh被设置为发生拥塞时拥塞窗口26的一半,即13。

(6)第1轮次发送报文段1。( cwnd = l)
第2轮次发送报文段2,3。(cwnd = 2)

第3轮次发送报文段4~7。( cwnd = 4)

第4轮次发送报文段8~15。(cwnd = 8)

第5轮次发送报文段16~31。( cwnd = 16)

第6轮次发送报文段32~63。( cwnd = 32)

第7轮次发送报文段64~94。( cwnd = 33)

因此第70报文段在第7轮次发送出。
(7)检测出了报文段的丢失时拥塞窗口 cwnd是8,因此拥塞窗口cwnd 的数值应当减半,等于4,而门限ssthresh应设置为检测出报文段丢失时拥塞窗口8的一半,即4。


【5-40】TCP在进行流量控制时,是以分组的丢失作为产生拥塞的标志。有没有不是因拥塞而引起分组丢失的情况?如有,请举出三种情况。
不是因拥塞而引起分组丢失的情况是有的,举例如下。
第一种情况:当IP数据报在传输过程中需要分片,但其中的一个数据报片未能及时到达终点,而终点组装IP数据报已超时,因而只能丢弃该数据报。
第二种情况:IP数据报已经到达终点,但终点的缓存没有足够的空间存放此数据报。

第三种情况:数据报在转发过程中经过一个局域网的网桥,但网桥在转发该数据报的帧时没有足够的存储空间而只好丢弃。


【5-41】用TCP传送512字节的数据。设窗口为100字节,而TCP报文段每次也是传送100字节的数据。再设发送方和接收方的起始序号分别选为100 和200,试画出类似于教材图5-28的工作示意图。从连接建立阶段到连接释放都要画上。
要传送的512B的数据必须划分为6个报文段传送,前5个报文段各100 B,最后一个报文段传送12B。图T-5-41是双方交互的示意图。下面进行简单的解释。
报文段#1:A发起主动打开,发送SYN报文段,处于SYN-SENT状态,并选择初始序号seq= 100。B处于LISTEN状态。
报文段#2:B确认A的SYN报文段,因此 ack = 101(是A的初始序号加1)。B选择初始序号seq = 200。B进入到SYN-RCVD状态。
报文段#3:A发送ACK报文段来确认报文段#2,ack = 201(是B的初始序号加1)。A没有在这个报文段中放入数据。因为SYN报文段#1消耗了一个序号,因此报文段#3的序号是seq = 101。这样,A和B都进入了 ESTABLISHED状态。
报文段#4:A发送100字节的数据。报文段#3是确认报文段,没有数据发送,报文段#3并不消耗序号,因此报文段#4的序号仍然是seq = 101。A在发送数据的同时,还确认B的报文段#2,因此ack = 201。
报文段#5:B确认A的报文段#4。由于收到了从序号101到200共100字节的数据,因此在报文段#5中,ack = 201(所期望收到的下一个数据字节的序号)。B发送的SYN报文段#2消耗了一个序号,因此报文段#5的序号是seq = 201,比报文段#2的序号多了一个序号。在这个报文段中,B给出了接收窗口 rwnd = 100。
从报文段#6到报文段#13都不需要更多的解释。到此为止,A已经传送了500字节的数据。值得注意的是,B发送的所有确认报文段都不消耗序号,其序号都是seq = 201。
报文段#14:A发送最后12字节的数据,报文段#14的序号是seq = 601。
报文段#15:B发送对报文段#14的确认。B收到从序号601到612共12字节的数据。因此报文段#15的确认号是ack = 613(所期望收到的下一个数据字节的序号)。
需要注意的是,从报文段#5一直到报文段#15,B一共发送了6个确认,都不消耗序号,因此B发送的报文段#15的序号仍然和报文段#5的序号一样,即 seq = 201。
报文段#16:A发送FIN报文段。前面所发送的数据报文段#14已经用掉了序号601到602,因此报文段#16的序号是seq =613。A进入FIN-WAIT-1状态。报文段#16的确认号ack= 202。
报文段#17:B发送确认报文段,确认号ack =614,进入CLOSE-WAIT状态。由于确认报文段不消耗序号,因此报文段#17的序号仍然和报文段#15的一样,即 seq = 201。
报文段#18:B没有数据要发送,就发送FIN报文段#18,其序号仍然是seq = 201。这个FIN报文段会消耗一个序号。
报文段#19:A发送最后的确认报文段。报文段#16的序号是613,已经消耗掉了。因此现在的序号是seq= 614。但这个确认报文段并不消耗序号。
其他的地方不再需要更多的解释了。


【5-42】在教材的图5-29中所示的连接释放过程中,在 ESTABLISHED状态下,B能否先不发送ack = u+1的确认?(因为B在后面要发送的连接释放报文段中,仍有ack = u+1这一信息。)
如果B不再发送数据了,可以把两个报文段合并成为一个,即只发送FIN + ACK报文段。但如果B还有数据要发送,那就不行,因为A迟迟收不到确认,就会以为刚才发送的FIN报文段丢失了,就超时重传这个FIN报文段,浪费网络资源。


【5-45】解释为什么突然释放运输连接就可能会丢失用户数据,而使用TCP的连接释放方法就可保证不丢失数据。
我们假定A和B之间建立了TCP连接,并且已经交换了一些数据。
现在A应当发送的数据都已经发送完毕了。如果A现在突然把TCP连接释放掉,那么有可能出现这种情况:A发送给B的某些报文段正在网络中传送,但因某种原因,报文段丢失了。A以为B应当收到A所发送的全部报文段,但事实上,有些报文段B没有收到。这就是题目所说的“可能会丢失用户数据”。
我们再假定:A已经收到了来自B的确认,B向A确认已经收到了A所发送的全部数据。
如果A现在突然把TCP连接释放掉,那么A发送给B的数据是不可能丢失了,因为B已经确认收到了A所发送的全部数据。现在可能会丢失的,是B无法向A发送-一些数据了(如果B还有这样的数据),因为TCP连接已经突然释放了。
因此,必须使用 TCP的连接释放,这样就可保证不丢失数据。


【5-46】试用具体例子说明为什么在运输连接建立时要使用三报文握手。说明如不这样做可能会出现什么情况。

图T-5-46给出了一个例子。

在上一个TCP连接中,A向B发送的连接请求SYN报文段滞留在网络中的某处。于是A超时重传,与B建立了TCP连接,交换了数据,最后也释放了TCP连接。
但滞留在网络中某处的陈旧的SYN报文段,现在突然传送到B了。如果不使用三报文握手,那么B就以为A现在请求建立TCP连接,于是就分配资源,等待A传送数据。但A并没有想要建立TCP连接,也不会向B传送数据。B就白白等待着A发送数据。
如果使用三报文握手,那么B在收到A发送的陈旧的SYN报文段后,就向A发送SYN报文段,选择自己的序号seq=y,并确认收到A的SYN报文段,其确认号ack =x+1。当A收到B的SYN报文段时,从确认号就可得知不应当理睬这个SYN报文段(因为A现在并没有发送seq=x的SYN报文段)。这时,A发送复位报文段。在这个报文段中,RST = 1,ACK=1,其确认号 ack = y+1。我们注意到,虽然A拒绝了TCP连接的建立(发送了复位报文段),但对B发送的SYN报文段还是确认收到了。
B收到A的RST报文段后,就知道不能建立TCP连接,不会等待A发送数据了。


【5-49】下面是以十六进制格式存储的一个UDP首部;
CB8400OD001C001C
试问:
(1)源端口号是什么?

(2)目的端口号是什么?
(3)这个用户数据报的总长度是多少?

(4)数据长度是多少?
(5)这个分组是从客户到服务器方向的,还是从服务器到客户方向的?

(6)客户进程是什么?
分别回答如下:
(1)源端口号是最前面的四位十六进制数字(CB8416),算出十进制的源端口号是
12×16 3+11×16 2+8×16 1+4×16 0= 49152+2816+128+4= 52100。
(2)目的端口号是第二个四位十六进制数字(000D 16),算出十进制的目的端口号是13。

(3)第三个四位十六进制数字(001C6)定义了整个UDP分组的长度,算出是
1 ×16 1+12×16 0=28字节。
(4))数据的长度是整个分组的长度减去首部的长度,也就是28-8=20字节。

(5)因为目的端口号是13(熟知端口),所以这个分组是从客户到服务器的。
(6)从RFC 867可以得知,这个客户进程是Daytime。当 Daytime 服务器收到客户发送的UDP用户数据报后,就把现在的日期和时间以ASCII 码字符串的形式返回给客户。


【5-52】UDP和IP的不可靠程度是否相同?请加以解释。
UDP和IP都是无连接的协议和不可靠传输的协议。UDP用户数据报和IP数据报的首部都有检验和字段。当检验出有差错时,就把收到的UDP用户数据报或IP数据报丢弃。这是它们的相同之处。
但UDP和IP的可靠性是有些区别的。UDP用户数据报的检验和是既检验UDP用户数据报的首部又检验整个的UDP用户数据报的数据部分,而IP数据报的检验和仅仅检验IP数据报的首部。UDP用户数据报的检验和还增加了伪首部,即还检验了下面的IP数据报的源IP地址和目的IP地址。


【5-53】UDP用户数据报的最小长度是多少?用最小长度的UDP用户数据报构成的最短IP数据报的长度是多少?
UDP用户数据报的最小长度是8字节,即仅有首部而没有数据。用最小长度的UDP源用户数据报构成的最短IP数据报的长度是28字节。此IP数据报具有20字节的固定首部,首部中没有可选字段。


【5-61】在本题中列出的8种情况下,画出发送窗口的变化,并标明可用窗口的位置。
己知主机A要向主机B发送3KB的数据。在TCP连接建立后,A的发送窗口大小是2KB。A的初始序号是0。
(1)一开始A发送1KB的数据。
(2)接着A就一直发送数据、直到把发送窗口用完。(3)发送方A收到对第1000号字节的确认报文段。(4)发送方A再发送850B的数据。
(5)发送方A收到ack = 900的确认报文段。
(6)发送方A收到对第2047号字节的确认报文段。
(7)发送方A把剩下的数据全部都发送完。
(8)发送方A收到ack = 3072的确认报文段。

图T-5-61是发送窗口和可用窗口的变化情况。

(1)我们应当注意到,发送窗口=2KB就是2×1024=2048字节。因此,发送窗口应当是从0到第2047字节为止,长度是2048字节。A开始就发送了1024字节,因此发送窗口中左边的1024个字节已经用掉了(窗口的这部分为灰色),而可用窗口是白色的,从第1024字节到第2047字节为止。请注意,不是到第2048字节为止,因为第一个字节的编号是О而不是1。
(2)发送方A一直发送数据,直到把发送窗口用完。这时,整个窗口都已用掉了,可用窗口的大小已经是零了,一个字节也不能再发送了。
(3)发送方A收到对第1000号字节的确认报文段,表明A收到确认号ack = 1001的确认报文段。这时,发送窗口的后沿向前移动,发送窗口从第1001字节(不是从第1000字节)到第3048字节(不是第3047字节)为止。可用窗口从第2048字节到第3048字节。
(4)发送方A再发送850字节,使得可用窗口的后沿向前移动850字节,即移动到2898字节。现在的可用窗口从第2898字节到第3048字节。
(5)发送方A收到ack = 900的确认报文段,不会对其窗口状态有任何影响。这是个迟到的确认。
(6)发送方A收到对第2047号字节的确认报文段。A的发送窗口再向前移动。现在的发送窗口从第2048字节开始到第4095字节。可用窗口增大了,从第2898字节到第4095字节。
(7)发送方A把剩下的数据全部都发送完。发送方A共有3KB(即3072字节)的数据,其编号从0到3071。因此现在的可用窗口变小了,从第3072字节到第4095字节。
(8)发送方A收到ack = 3072的确认报文段,表明序号在3071和这以前的报文段都收到了,后面期望收到的报文段的序号从3072开始。因此新的发送窗口的位置又向前移动,从第3072号到第5119号。整个发送窗口也就是可用窗口。


【5-72】已知TCP的接收窗口大小是600(单位是字节,为简单起见以后就省略了单位),已经确认了的序号是300。试问,在不断地接收报文段和发送确认报文段的过程中,接收窗口也可能会发生变化(增大或缩小)。请用具体例子(指出接收方发送的确认报文段中的重要信息)来说明哪些情况是可能发生的,而哪些情况是不允许发生的。
可以用图T-5-72来说明。

(1)这是题目开始的情况。接收方发送的确认报文段中的接收窗口rwnd = 600。已确认的序号是300。接收方发送的确认报文段的ack = 301,表示期望收到开始的序号为301的数据。我们看到,序号301到900都在接收窗口内。
(2)接收窗口增大总是不受限制的。这就是说,只要接收端的TCP能够拿出更多的空间来接收发来的数据,就可以这样做。图中给出的例子是:已确认的序号是400,接收方发送的确认报文段的ack = 401。假定现在接收窗口从情况(1)的600增大到了700,即rwnd = 700。现在接收窗口的范围是从401到1100。当接收窗口增大时,接收窗口的前沿总是向前移动的。
(3)这种情况是接收窗口变小了,但接收窗口的前沿没有变化。例如,现在已确认的序号是400,接收方发送的确认报文段的ack = 401。假定现在接收窗口从情况(1)的600减小到了500,即 rwnd = 500。接收窗口的范围是从401到900。
(4)这种情况是接收窗口变小了,同时接收窗口的前沿也向前移动了。例如,现在已确认的序号是500,接收方发送的确认报文段的ack = 501。假定现在接收窗口从情况(1)的600减小到了500,即rwnd = 500。接收窗口的范围是从501到1000。
(5)这种情况是接收窗口变小了,但接收窗口的前沿是向后退的。例如,现在已确认的序号是500,接收方发送的确认报文段的ack = 501。假定现在接收窗口从情况(1)的600减小到了300,即rwnd = 300。接收窗口的范围是从501到800。但请注意,这种情况是不允许出现的。也就是说,接收窗口的前沿是不允许后退的。在开始时,接收窗口的前沿的编号是900。不管接收窗口是变大还是变小,这个窗口的前沿的编号可以不动,也可以前移,但是不允许后退。
为什么不允许出现这种情况呢?可以先观察一下发送方的情况。在一开始,发送方收到接收窗口=600的报文段后(其中 ack = 301),发送方就把发送窗口设置为600,可以发送的数据的序号从301到900。假定发送方发送了在发送窗口内的全部数据。这本来正好落入到接收窗口之内。但这些数据正在网络中传输时,接收方却缩小了接收窗口,只接收序号从501到800之间的数据。这就导致最后的一些数据(编号从801到 900)落到接收窗口之外了,使得接收方只能丢弃这些数据(编号从801到 900)。因此,这种情况(在发送时数据是在发送窗口之内,但当到达接收端时,这些数据却落到接收窗口之外)必须避免。总之,我们要记住,接收窗口的前沿是不允许后退的。

练习题:


计算机网络功能组成:通信子网、资源子网

组成部分:硬件、软件、协议

工作方式:核心部分、边缘部分

【边缘部分:进行通信和资源共享;核心部分:提供连通性和交换服务】


OSI参考模型中,提供端到端的透明数据传输服务、差错控制和流量控制的层是(C)。

A.物理层
B.网络层
C.传输层
D.会话层

资源子网
应用层:用户与网络的接口,服务于用户的应用要求
表示层:规定遴信系统中交换信息的表示方式
会话层:管理主机间的会话进程

承上启下

传输层:端到端之间报文的正确交付、分用/复用

通信子网
网络层:路由选择、结点间数据报分组的正确交付
数据链路层:成帧、相邻结点间帧的正确交付
物理层:正确、透明地传输比特流


传输层为(B)之间提供逻辑通信。

A.主机【结点,网络层负责】
B.进程
C.路由器【结点,网络层负责】
D.操作系统

网络层:结点间数据分组的正确交付

传输层【进程】:1、端到端之间报文的正确交付2、分用/复用4、差错控制、流量控制


关于传输层的面向连接服务的特性是(D)。

A.不保证可靠和顺序的交付
B.不保证可靠、但保证顺序的交付
C.保证可靠、但不保证顺序的交付
D.保证可靠和顺序的交付


可靠的传输协议中的“可靠”指的是( D )。

A.使用面向连接的会话
B.使用尽力而为的传输【数据可能丢失】
C.使用滑动窗口来维持丙靠性
D.使用确认机制来确保传输的数据不丢失
可靠协议:使用确认机制对传输数据进行确认
面向连接=>保证可靠【但保证可靠不一定使用面向连接这种方法】
滑动窗口:流量控制、拥塞控制【本质上还是确认机制还可以实现】


以下哪一项能够唯一确定一个在互联网上通信的进程( D )。
A.主机名
B.IP地址及MAC地址
C. MAC地址及端口号【MAC地址是直接连接,而不是互联网】
D.IP地址及端口号
套接字:IP地址【确认主机】+端口号【确认进程】


在(  )范围内的端口号被称为“熟知端口号”并限制使用。这就意味着这些端口号是为常用的应用层协议,如FTP、HTTP等保留的。
A.0~127 B.0~255 C.0~511 D.0~1023

服务端使用的端口号:熟知端口号、登记端口号

熟知端口号∶给TCP/IP最重要的一些应用程序,让所有用户都知道。0~1023
登记端口号:为没有熟知端口号的应用程序使用的。1024~49151

客户端使用︰仅在客户进程运行时才动态选择的端口号。49125~65535

应用程序+熟知端口号
FTP【21】
TELNET【23】
SMTP【25】
DNS【53】
TFTP【69】
HTTP【80】
SNMP【161】


以下哪个TCP熟知端口号是错误的?(D)

A . TELNET:23 B . SMTP:25 C . HTTP:80 D . FTP:24

服务端使用的端口号:熟知端口号、登记端口号

熟知端口号∶给TCP/IP最重要的一些应用程序,让所有用户都知道。0~1023
登记端口号:为没有熟知端口号的应用程序使用的。1024~49151

客户端使用︰仅在客户进程运行时才动态选择的端口号。49125~65535


关于TCP和UDP端口,下列哪种说法是正确的( A)。
A . TCP和UDP分别拥有自己的端口号,它们互不千扰,可以共存于同一台主机

B . TCP和UDP分别拥有自己的端口号,但它们不能共存于同一台主机
C .TCP和UDP的端口没有本质区别,但它们不能共存于同一台主机

D.当一个TCP连接建立时,它们互不干扰,不能共存于同一台主机


以下说法错误的是(B)。

A.传输层是OSI模型的第四层
B.传输层提供的是主机间的点到点数据传输【端到端】

C.TCP是面向连接的,UDP是无连接的
D.TCP协议进行流量控制和拥塞控制,而UDP协议既不进行流量控制,又不进行拥塞控制


如果用户程序使用UDP协议进行数据传输,那么(  D)层协议必须承担可靠性方面的全部工作。
A.数据链路层
B .网际层
C .传输层
D .应用层
传输层协议需要具有的主要功能包括:

1.创建进程到进程的通信
⒉提供流量控制机制
UDP使用端口号完成进程到进程的通信,但在传送数据时没有流量控制机制,也没有确认,而且只提供有限的差错控制。
UDP是一个无连接、不可靠的传输层协议


使用UDP的网络应用,其数据传输的可靠性由(B)负责。

A.传输层B.应用层C.数据链路层D.网络层
用户数据报协议UDP (User Datagram Protocol)
无连接、不可靠、开销小、实时好


以下关于UDP协议的主要特点的描述中,错误的是(B  ).
A . UDP报头主要包括端口号、长度、校验和等字段
B . UDP长度字段是UDP数据报的长度,包括伪首部的长度【临时工不发送】

C . UDP校验和对伪首部、UDP报文头以及应用层数据进行校验

D.伪首部包括IP分组报头的一部分

1)源端口号∶在需要对方回信时选用。不需要时可用全0。

2)目的端口号∶这在终点交付报文时必须要使用到。
3)长度:UDP数据报的长度(包括首部和数据),其最小值是8【仅有首部】

4)校验和:检测UDP数据报在传输中是否有错 有错就丢弃

【可选】当源主机不想计算校验和,则令该字段为0.


UDP数据报首部不包含(D)。

A. UDP源端口号
B. UDP校验和
C. UDP目的端口号
D. UDP数据报首部长度


UDP数据报中的长度字段(D) 。

A.不记录数据的长度
B.只记录首部的长度
c.只记录数据部分的长度
D.包括首部和数据部分的长度


UDP数据报比IP数据报多提供了(C)服务。

A.流量控制
B.拥塞控制

C.端口功能
D.路由转发


下列关于UDP的描述,正确的是( D )。

A.给出数据的按序投递【不可靠(只将数据投递至网络,不一定按序)】
B.不允许多路复用【在数据链路层就已经实现】
C.拥有流量控制机制
D.是无连接的
用户数据报协议UDP(User Datagram Protocol):无连接、不可靠、开销小、实时好


接收端收到有差错的UDP用户数据时的处理方式是( A ) 
A.丢弃.
B.请求重传
C. 差错校正
D.忽略差错


以下关于UDP校验和的说法中错误的是( B )。

A . UDP的校验和功能不是必需的,可以不使用
B.如果UDP校验和计算结果为0,则在校验和字段填充0【错误,填充全1】
C . UDP校验和字段的计算包括一个伪首部、UDP首部和携带的用户数据

D . UDP校验和的计算方法是二进制反码运算求和再取反

校验和:检测UDP数据报在传输中是否有错,有错就丢弃。
【可选】当源主机不想计算校验和;则令该字段为0。


下列关于UDP校验的描述中,(B)是错误的。
A . UDP校验和段的使用是可选的,如果源主机不想计算校验和,该校验和段应为全0

B﹒在计算校验和的过程中,需要生成一个伪首部,源主机需要把该伪首部发送给目的主机

C.如果数据报在传输过程中被破坏,那么就把它丢弃
D . UDP数据报的伪首部包含了IP地址信息

伪首部只用来计算校验和:使用二进制反码运算求和再取反


下列网络应用中,(D)不适合使用UDP协议。
A.客户-服务器领域
B .远程调用
C.实时多媒体应用
D.远程登录【依靠服务端的可靠操作】


下列关于UDP协议的叙述中,正确的是(B)。
Ⅰ .提供无连接服务
II ﹒提供复用/分用服务
Ⅲ ﹒通过差错校验,保障可靠数据传输

A.仅I B .仅I、IIC.仅II、IIID.I、II、III
传输层协议需要具有的主要功能包括:

1.创建进程到进程的通信
⒉提供流量控制机制
UDP使用端口号完成进程到进程的通信,但在传送数据时没有流量控制机制,也没有确认,而且只提供有限的差错控制。
UDP是一个无连接、不可靠的传输层协议

多路复用(针对发送主机)︰从不同套接字【IP地址+端口号】收集数据块,并为每个数据块封装上首部信息,生成报文段,传给网络层。

多路分用(针对接收主机):将报文段中的数据交付到正确的套接字。


UDP协议实现分用时所依据的头部字段是(B )

A.源端口号
B.目的端口号
C.长度
D.校验和
分用:将数据正确的交付到目的应用进程

复用:不同进程使用同一个传输层协议传送数据


为什么要使用UDP?让用户进程直接发送原始的IP分组不就足够了吗?
因为
IP是网络层协议,它仅负责将分组交到目的结点,并没有目的结点端口的信息,无法将分组交付至用户进程。②而UDP是传输层协议,它的数据报中包含了端口信息,能够实现端到端的通信,也就是用户进程间的通信。

所以
仅使用IP不能完成最终的数据传输,一定需要传输层协议才行。


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


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

【两次字段不一样,所以无法组装成为完整的数据报】

网络分层结构:上层完整协议块=下层数据块

IP首部的标识字段作用:判断报片是否属于一个分组


一个UDP首部的信息(十六进制表示)为OxF7 21 00 45 00 2CE8 27。UDP数据报的格式如下图所示。试问:

1)源端口、目的端口、数据报总长度、数据部分长度。
2)该UDP数据报是从客户发送给服务器还是服务器发送给客户﹖使用该UDP服务的程序使用的是哪个应用层协议?

UDP长度:总长度【首部+数据】【单位是1B】【长度固定8B】

UDP检验和出错直接丢弃

TCP首部:首部长度【单位是4B】、总长度【单位是1B】

源端口:F7 21(H)=63265

目的端口:00 45(H)=69【TFTP】

总长度:00 2C(H)=44

数据部分∶44-8=36B

(2)判断的时候看端口:服务器的端口固定、客户机的端口随意

目的端口:00 45(H)=69【TFTP】由此我们知道,该数据报就是客户机发给服务器的


一个UDP用户数据报的数据字段为8192B,要使用以太网来传送。假定IP数据报无选项。试问应当划分为几个IP数据报片?说明每一个IP数据报片的数据字段长度和片段偏移字段的值。
以太网的数据段的最大长度是1500B【使用CSMA/CD协议:最短帧长是46B】


下列关于传输层协议中面向连接的描述,( C)是错误的。
A.面向连接的服务需要经历3个阶段:连接建立、数据传输以及连接释放

B.当链路不发生错误时,面向连接的服务可以保证数据到达的顺序是正确的

C.面向连接的服务有很高的效率和时间性能
D.面向连接的服务提供了一个可靠的数据流


TCP协议规定HTTP (  C )进程的端口号为80。

A.客户B.解析C.服务器D.主机

客户端访问Web服务器的HTTP进程的端口号由客户端的操作系统动态分配。


下列(  D )不是TCP服务的特点。

A.字节流 B.全双工  C .可靠  D.支持广播
TCP:面向字节流

UDP:面向数据报

TCP是全双工


主机甲和主机乙已建立了TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是( A )。
A.10KB
B .12KB
c .14KB
D.15KB
拥塞窗口cwnd:发送方根据当前网络拥塞程度的估计而确定的窗口值

接收窗口rwnd:接收方根据自己缓存大小,动态地调整发送方的发送窗口大小。
实际发送窗口=min{接收窗口,拥塞窗口}

由题可知接受窗口为10KB,所以我们知道实际发送窗口一定小于等于10


( B )字段包含在TCP首部中,而不包含在UDP首部中。

A.目的端口号【均包含】
B.序列号【TCP有UCP无】
C.校验和【均包含】
D.目的IP地址【均不包含】



以下关于TCP报头格式的描述中,错误的是(D)。

A.报头长度为20~60字节,其中固定部分为20字节

B.端口号字段依次表示源端口号与目的端口号

C.报头长度总是4的倍数个字节
D.TCP校验和伪首部中IP分组头的协议字段为17【首部:4B,所以必须为4的整数倍】【17的时候代表UCP。6的时候TCP】

【TCP是首部固定20B+可变长度】


在采用TCP连接的数据传输阶段,如果发送端的发送窗口值由1000变为2000,那么发送端在收到一个确认之前可以发送(B)。
A . 2000个TCP报文段

B . 2000字节

C . 1000字节
D . 1000个TCP报文段
窗口的大小是字节。
窗口值表示你当前还能传多少东西出去。

图片中间两个部分就是发送窗口部分


A和B建立了TCP连接,当A收到确认号为100的确认报文段时,表示(C)。

A.报文段99已收到
B.报文段100已收到
C.末字节序号为99的报文段已收到
D.末字节序号为100的报文段已收到


为保证数据传输的可靠性,TCP采用了对(A)确认的机制。

A.报文段
B.分组
C.字节
D.比特

数据:无结构有序字节流


在TCP协议中,发送方的窗口大小取决于(  C )。

A.仅接收方允许的窗口
B.接收方允许的窗口和发送方允许的窗口
C.接收方允许的窗口和拥塞窗口
D.发送方允许的窗口和拥塞窗口

接收窗口rwnd:能接收的最大的数据大小

拥塞窗口cwnd:网络能容纳发出的最大的数据大小
发送窗口:能发送的最大的数据大小=min {接收端的rwnd,cwnd }


滑动窗口的作用是(A)。

A.流量控制
B.拥塞控制
C.路由控制
D.差错控制
 滑动窗口【流量控制】:发送窗口、接收窗口rwnd
拥塞窗口cwnd【拥塞控制】:由当前网络情况决定的数值


以下关于TCP工作原理与过程的描述中,错误的是(C ) 。

A. TCP连接建立过程需要经过“三次握手”的过程
B.当TCP传输连接建立之后,客户端与服务器端的应用进程进行全双工的字节流传输

C. TCP传输连接的释放过程很复杂,只有客户端可以主动提出释放连接的请求【双方都可以】
D.TCP连接的释放需要经过“四次挥手”的过程
建立:三次握手

释放:四次挥手


TCP的滑动窗口协议中规定重传分组的数量最多可以( )。
A﹒是任意的
B .1个
C .大于滑动窗口的大小

D .等于滑动窗口的大小

发送方滑动窗口大小规定了发送方最多能传送的分组数目。
收到确认——窗口滑动——继续发送
分组重传的最大值也是发送方能发送数据的最大值。


TCP中滑动窗口的值设置太大,对主机的影响是(A) 。
A.由于传送的数据过多而使路由器变得拥挤,主机可能丢失分组

B.产生过多的ACK【确认报文】
C.由于接收的数据多,而使主机的工作速度加快

D.由于接收的数据多,而使主机的工作速度变慢


以下关于TCP窗口与拥塞控制概念的描述中,错误的是() 。

A.接收端窗口(rwnd)通过TCP首部中的窗口字段通知数据的发送方

B.发送窗口确定的依据是:发送窗口=Min[接收端窗口,拥塞窗口]

C.拥塞窗口是接收端根据网络拥塞情况确定的窗口值【是发送端根据】
D.拥塞窗口大小在开始时可以按指数规律增长
接收窗口rwnd:能接收的最大的数据大小——TCP数据报告知对端
拥塞窗口cwnd:网络能容纳发出的最大的数据大小——拥塞控制
发送窗口:能发送的最大的数据大小= min {接收端的rwnd,cwnd }


TCP“三次握手”过程中,第二次“握手”时,发送的报文段中(D)标志位被置为1。

A. SYN
B. ACK
C.ACK和RST
D.SYN和ACK


A和B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ACK=201,数据部分有2个字节,那么在B对该报文的确认报文段中( C )。'
A . seq=202 , ack=200
B . seq=201 , ack=201
c . seq=201 , ack=202
D . seq=202,ack=201

序号字段︰指的是本报文段所发送的数据的第一个字节的序号。

确认号字段:期望收到对方的下一个报文段的数据的第一个字节的序号。

说明B期待下次发送的是201


TCP的通信双方,有一方发送了带有FIN标志的数据段后表示(  B ) 。

A.将断开通信双方的TCP连接
B.单方面释放连接,表示本方已经无数据发送,但可以接收对方的数据

C.中止数据发送,双方都不能发送数据
D,连接被重新建立
FIN为1的时候,虽然A不能再发送数据了,但是它仍可以接收结点B的剩余数据。

TCP现在这个时候是半关闭状态


一个TCP连接的数据传输阶段,如果发送端的发送窗口值由2000变为3000,意味着发送端可以(C).

A﹒在收到一个确认之前可以发送3000个TCP报文段
B .在收到一个确认之前可以发送1000字节
C .在收到一个确认之前可以发送3000字节
D.在收到一个确认之前可以发送2000个TCP报文段
TCP是面向字节的

发送窗口:指的是收到确认之前的大小


在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时发生了超时事件。如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文段均得到确认后,拥塞窗口的大小是( C )。
A .8KB
B .9KB
C . 16KB
D . 17KB
超时事件:【旧的拥塞控制】

连续3个确认报文:【新的拥塞控制】

【34KB:17KB之后是线型增长,之前是指数增长。但题目并没有超过17KB】


设TCP的拥塞窗口的慢开始门限值初始为8(单位为报文段),当拥塞窗口上升到12时发生超时,TCP开始慢启动和拥塞避免,那么第13次传输时拥塞窗口的大小为()。
A .4
B .6
C . 7
D . 8
【一开始初始窗口是指数增长的,增长到8后,变为线型增长】

【超时:旧的拥塞控制】

【旧的拥塞控制超时后会有两个变化:1、拥塞窗口变为1,重新开始指数增长2、新的门限值变为旧的门限值的一半】

【12:门限值】


在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时收到了3个冗余ACK报文。如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文段均得到确认后,拥塞窗口的大小是()。
A.8KB
B . 16KB
C . 20KB
D.21KB
【3个冗余ACK报文:新的拥塞控制】

【当看到三个冗余的确认报文后,有两个窗口会发生改变。1、新的拥塞窗口会变为原来的一半,并且开始线型增长。2、新的门限值变为原来的一半】



A和B建立TCP连接,MSS为1KB。某时,慢开始门限值为2KB,A的拥塞窗口为4KB,在接下来的一个RTT内A向B发送了4KB的数据(TCP的数据部分),并且得到了B的确认,确认报文中的窗口字段的值为2KB,那么请问在下一个RTT中,A最多能向B发送多少数据(B)。

A .2KB
B . 8KB
C . 5KB
D. 4KB
发送窗口twnd=min{ cwnd【拥塞窗口】,rwnd【接受窗口】 }

cwnd=5、rwnd=2


假设在没有发生拥塞的情况下,在一条往返时延RTT为10ms的线路上采用慢开始控制策略。如果接收窗口的大小为24KB,最大报文段MSS为2KB。那么发送方发送出第一个完全窗口需要(B)时间。
A . 30ms
B . 40ms
C . 50ms

D . 60ms
根据慢开始算法,发送窗口的初始值是拥塞窗口的初始值。

实际发送窗口=min{接收窗口【24KB】,拥塞窗口}


主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300字节和500字节的有效载荷,第一个段的序列号为200,主机乙正确接收到这两个数据段后,发送给主机甲的确认序列号是(D)。
A . 500 B . 700 c . 800D . 1000

序号字段︰指的是本报文段所发送的数据的第一个字节的序号。

200。。 。。。。499                        500。。。 。 。。999
确认号字段:期望收到对方的下一个报文段的数据的第一个字节的序号。


一个TCP连接总是以1KB的最大段长发送TCP段,发送方有足够多的数据要发送,当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT时间内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是(C)。
A . 7KB B . 8KB c .9KB D . 16KB


主机甲和主机乙之间已建立了一个TCP连接,TCP最大段长度为1000字节。若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000字节,则此时主机甲还可以向主机乙发送的最大字节数是(A)。
A . 1000
B . 2000
c . 3000

D. 4000
实际发送窗口=min{接收窗口,拥塞窗口}

MIN{4000,2000}=2000B
1确认,2未确认


主机甲向主机乙发送一个( SYN=1 , seq=11220 )的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能(  C)。
A . ( SYN=O,ACK=0 , seq=11221,ack=11221)
B . ( SYN=1,ACK=1,seq=11220,ack=11220 )

C . ( SYN=1,ACK=1,seq=11221,ack=11221)

D . ( SYN=O,ACK=0 , seq=11220,ack=11220 )
确认位ACK︰只有当ACK=1时确认号字段才有效。

当ACK=0时,确认号无效【TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。】
同步位SYN:同步SYN=1表示这是一个连接请求或连接接收报文。
当SYN=1,ACK=0时,表明这是一个连接请求报文。
对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。
选择题喜欢考查(关于连接和释放的题目,ACK、SYN.FIN—定等于1),请牢记。

seq︰指的是本报文段所发送的数据的第一个字节的序号。
ack:期望收到对方的下一个报文段的数据的第一个字节的序号。


主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了3个连续的TCP段,分别包含300字节、400字节和500字节的有效载荷,第3个段的序号为900。若主机乙仅正确接收到第1和第3个段,则主机乙发送给主机甲的确认序号是( B )。
A . 300 B . 500 c . 1200 D . 1400

确认号ack:期望收到对方的下一个报文段的数据的第一个字节的序号。


主机甲与主机乙之间已建立一个TCP连接,双方持续有数据传输,且数据无差错与丢失。若甲收到1个来自乙的TCP段,该段的序号为1913、确认序号为2046、有效载荷为100字节,则甲立即发送给乙的TCP段的序号和确认序号分别是(B)。
A. 2046、2012 B . 2046、2013 c . 2047、2012 D .2047、2013
序号seq:指的是本报文段所发送的数据的第一个字节的序号。
确认序号ack:期望收到对方的下一个报文段的数据的第一个字节的序号。乙给甲: seq=1913,ack=2046
甲给乙: seq=2046,ack=seq (乙)+100=2013


如果主机1的进程以端口x和主机2端口y建立了一条TCP连接,这时如果希望再在这两个端口间建立一个TCP连接,那么会( A)。
A.建立失败,不影响先建立连接的传输
B .建立成功,并且两个连接都可以正常传输

C.建立成功,先建立的连接被断开
D.建立失败,两个连接都被断开
套接字:(主机IP地址,端口号)

(1,x) - (2, y)

但是:TCP——有三次握手,有确认,有流量控制——面向连接、可靠


主机甲和主机乙新建一个TCP连接,甲的拥塞控制初始阈值为32KB,甲向乙始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙为该连接分配16KB接收缓存,并对每个数据段进行确认,忽略段传输延迟.若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发送超时的情况下,经过4个RTT后,甲的发送窗口是( A )。
A . 1KB B . 8KB C . 16KB D . 32KB
1、2、3、4

4个RTT后,接收缓存只剩下1KB
接收缓存>接收窗口>接收未确认字节

实际发送窗=min{接收窗口,拥赛窗口}


若甲向乙发起一个TCP连接,最大段长MSS=1KB,RTT = 5 ms,乙开辟的接收缓存为64KB,则甲从连接建立成功至发送窗口达到32 KB,需经过的时间至少是(A )。
A .25 ms
B . 30 ms
C . 160 ms

D.165 ms
实际发送窗口=min{接收窗已、拥塞窗口}

5*5=25ms
这里假定乙能及时处理接收到的数据空闲的接收缓存≥32KB。

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

这是因为:
1、只有超过了重传计时器的时间之后报文才会重传。
2、而本题中对端已经收到此报文,仅是确认报文段丢失。
3、且TCP能够进行累积确认,在TCP报文首部中的确认号字段为n则表示序号N之前的数据都已经收到了。
假设:
序号x的确认报文丢失了,但是比序号x大(比如x+800)的确认报文在重传计时器超时之前到达了,由于TCP的累积确认,它同时确认了在它之前的x已经收到了。所以,在此情况下并不会发生重传。


如果收到的报文段无差错,只是未按序号,则TCP对此未作明确规定,而是让TCP的实现者自行确定。试讨论两种可能的方法的优劣:
1)将不按序的报文段丢弃。【节约接收方缓冲资源占用更多的网络资源】
2)先将不按序的报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层。【节约网络资源,占用接收方缓冲资源】

第一种方法将不按序的报文段丢弃,会引起被丢弃报文段的重复传送,增加对网络带宽的消耗,但由于用不着将该报文段暂存,可避免对接收方缓冲区的占用。
第二种方法先将不按序的报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层然这样有可能能避免发送方对已经被接收方收到的不按序的报文段的重传,减少对网络带宽的消耗,但增加了接收方缓冲区的开销


一个TCP连接要发送3200B的数据。第一个字节的编号为10010。如果前两个报文各携带1000B的数据,最后一个携带剩下的数据,请写出每一个报文段的序号。
TCP:面向字节【字节流】

报文段序号=该报文段首字节的字节流编号
1:10010

2:10010+1000B=11010

3:11010+1000B=12010


设TCP使用的最大窗口尺寸为64KB,TCP报文在网络上的平均往返时间为20ms,问TCP协议所能得到的最大吞吐率是多少?(假设传输信道的带宽是不受限的)【不受限-带宽值无限大】

【注意:大小是2的十次方。速度是2的三次方】

【吞吐量:单位时间内成功传输的数据大小。吞吐率:单位时间内成功传输的数据速率】

【1个周期=4个=发送端的发送时延+发送端到接收端的传播时延+接收端的发送时延+接收端到发送端的传播时延。此题题目可知:发送时延几乎为0,可不计】

吞吐率=有效大小 / 周期=64kb / 20ms


已知:当前TCP连接的RTT值为35ms,连续收到3个确认报文段,它们比相应的数据报文段的发送时间滞后了27ms、30ms与21ms。设a=0.2。计算第三个确认报文段到达后的新的RTT估计值。

新估计RTT =(1-α)×(旧RTT)+α×(新RTT样本)

第五章 运输层[练习题+课后习题]相关推荐

  1. 第四章 网络层[练习题+课后习题]

    目录 课后练习题: 练习题 课后练习题: 网络层向上提供的服务有哪两种?试比较其优缺点. 网络层向上面的运输层提供的服务有两种,即面向连接服务(或虚电路服务)和无连接服务(或数据报服务).这两种服务的 ...

  2. python课本答案上海交大第五章_高等数学课后习题答案上海交大版完整版非常详细_.pdf...

    高等数学课后习题答案上海交大版完整版非常详细_ 一诺整理 一诺整理 一一诺诺整整理理 高等数学 高等数学 课后习题答案 课后习题答案 (上海交大版) (上海交大版) ((上上海海交交大大版版)) /w ...

  3. 计算机组成原理(第三版)唐朔飞-第五章输入输出系统-课后习题

    目录 第五章 5.1I/O设备有哪些编址方式,各有何特点? 5.2 简要说明CPU与I/O设备之间传递信息可采用哪几种联络方式,它们分别用于什么场合. 5.3I/O设备与主机交换信息时,共有哪几种控制 ...

  4. 《研究生素养课——积极心理与情绪智慧》第五章答案(课后习题+章节测试)

    第五章 第一节 第二节 情绪压力管理

  5. 《机器学习》 周志华学习笔记第五章 神经网络(课后习题) python实现

    1.神经元模型 2.感知机与多层网络 3.误差逆传播算法 (A)BP算法:最小化训练集D上的累积误差 标准BP算法:更新规则基于单个Ek推导而得 两种策略防止过拟合:(1)早停(通过验证集来判断,训练 ...

  6. 第六章 应用层[练习题+课后习题]

    练习题: 服务程序在Windows环境下工作,并且允许该服务器程序的计算机也作为客户访问其他计算机上提供的服务.那么,这种网络应用模型属于(B). A.主从式 B.对等式 C.客户/服务器模式 D.集 ...

  7. 《计算机组成原理》第五章指令系统 部分课后习题答案 清华大学出版_秦磊华_谭志虎

    5.1 指令:控制计算机执行某种操作(如加.减.传送.转移等操作)的命令. 指令系统:一台计算机中所有指令的集合. 操作码:指令中用于控制指令操作性质的字段. 扩展地址码:将指令的操作码字段向不用的地 ...

  8. Python核心编程第二版第五章数字(课后习题)----我的答案

    5-1.整型.讲讲Python普通整型和长整型的区别. 标准整型类型是最通用最基本的数字类型等价于C语言的长整型,一般以十进制表示. 长整型则是标准整型类型的超集,当需要用到比标准整型类型更大的整型时 ...

  9. 计算机网络教程第五版|微课版 - 第五章 运输层 - 习题【补充】

    第五章.运输层[补充] 本章的习题 在 "滑动窗口" 概念中,"发送窗口" 和 "接受窗口" 的作用是什么?如果接受方的接受能力不断地发生变 ...

最新文章

  1. ORACLE安装启图形界面与oracle安装介质解压后缺jar包
  2. win10 连接android,win10系统连接安卓手机usb没反应的解决方法
  3. Python入门100题 | 第028题
  4. 机器学习算法加强——回归
  5. 利用「接口」做产品时我们该如何思考?
  6. pythonfind_python实现find -name的功能
  7. WordPress标签(tag)url自动转化插件
  8. 提前还贷的python计算程序
  9. 静态方法、静态内部类和抽象方法的注意问题
  10. 【luogu4185】 [USACO18JAN]MooTube [并查集]
  11. HTML5新增的表单类型
  12. Mac 安装mysql5.7.29
  13. linux越狱连接不了设备,Checkra1n 越狱常见问题汇总
  14. IB驱动包下载 : Ubuntu 16.04 的 IB驱动 iso、source包、tgz包
  15. java redis令牌桶_redis实现的简单令牌桶
  16. python百度贴吧发帖签到_百度贴吧签到脚本
  17. 计算机专业有没有3D打印,3D打印技术属于哪个专业_招生问答
  18. 广播与点播、单播与组播
  19. 最新win10安装版激活方法 一键激活win10
  20. UVA - 12235 Help Bubu 概率dp 状态压缩 记忆化搜索

热门文章

  1. 数据库改名系列(数据库名,逻辑名,物理文件名)
  2. 关于Nginx有没可能漏记请求日志或Nginx重复向后端发请求
  3. 通过输入方式在Android上进行微博OAuth登录
  4. 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways
  5. anaconda 创建,激活,退出,删除环境
  6. 【SICP练习】151 练习4.7
  7. 用busybox制作文件系统
  8. 软考笔记第九天之多媒体基础
  9. Python中list,tuple,dict,set的区别和用法
  10. 三种方法实现二分查找