18 KiB
传输层习题
基本概念
例题 可靠传输协议中的“可靠”指的是()。
$A.$使用面向连接的会话
$B.$使用尽力而为的传输
$C.$使用滑动窗口来维持可靠性
$D.$使用确认机制来确保传输的数据不丢失
解:$D$。如果一个协议使用确认机制对传输的数据进行确认,那么可以认为它是一个可靠的协议;如果一个协议采用“尽力而为”的传输方式,那么是不可靠的。例如,$TCP$对传输的报文段提供确认,因此是可靠的传输协议;而$UDP$不提供确认,因此是不可靠的传输协议。
例题 若用户程序使用$UDP$进行数据传输,则()层协议必须承担可靠性方面的全部工作。
$A.$数据链路层
$B.$网际层
$C.$传输层
$D.$应用层
解:$D$。传输层协议需要具有的主要功能包括:创建进程到进程的通信;提供流量控制机制。$UDP$在一个低的水平上完成以上功能,使用端口号完成进程到进程的通信,但在传送数据时没有流量控制机制,也没有确认,而且只提供有限的差错控制。因此$UDP$是一个无连接、不可靠的传输层协议。如果用户应用程序使用$UDP$进行数据传输,那么必须在传输层的上层即应用层提供可靠性方面的全部工作。
UDP协议
UDP协议概念
例题 下列网络应用中,()不适合使用$UDP$协议。
$A.$客户机/服务器领域
$B.$远程调用
$C.$实时多媒体应用
$D.$远程登录
解:$D$。$UDP$的特点是开销小,时间性能好且易于实现。在客户/服务器中,它们之间的请求都很短,使用$UDP$不仅编码简单,而且只需要很少的消息;远程调用使用$UDP$的理由和客户/服务器模型一样;对于实时多媒体应用,需要保证数据及时传送,而比例不大的错误是可以容忍的,所以使用$UDP$也是合适的,而且使用$UDP$协议可以实现多播,给多个客户端服务﹔而远程登录,需要密码和账户,必须保证安全性,需要依靠一个客户端到服务器的可靠连接,使用$UDP$是不合适的。
UDP帧格式
例题 一个$UDP$首部的信息(十六进制表示)为$0xF7,21,00,45,00,2C,E8,27$。
1)源端口、目的端口、数据报总长度、数据部分长度分别是什么?
2)该$UDP$数据报是从客户发送给服务器还是从服务器发送给客户?使用该$UDP$服务的程序使用的是哪个应用层协议?
解:
1)第$1$、$2$个字节为源端口,即$F7,21$,转换成十进制数为$63265$。第$3$、$4$个字节为目的端 口,即$00,45$,转换成十进制数为$69$。第$5$、$6$个字节为$UDP$长度(包含首部和数据部分),即$00,2C$,转换成十进制数为$44$,数据报总长度为$44B$,数据部分长度为$44-8=36B$。
2)由1)可知,该$UDP$数据报的源端口号为$63265$,目的端口号为$69$,前一个为客户端使 用的端口号,后一个为熟知的$TFTP$协议的端口,可知该数据报是客户发给服务器的。
TCP协议
考的基本上都是连接管理与拥塞控制。
TCP协议概念
例题 为保证数据传输的可靠性,$TCP$采用了对()确认的机制。
$A.$报文段
$B.$分组
$C.$字节
$D.$比特
解:$A$。$TCP$是面向字节的。对每个字节进行编号,但并不是接收到每个字节都要发回确认,而是在发送一个报文段的字节后才发回一个确认,所以$TCP$采用的是对报文段的确认机制。
例题 一个$TCP$连接使用$256kb/s$的链路,其端到端时延为$128ms$。经测试发现吞吐率只有$128kb/s$。问窗口是多少?忽略$PDU$封装的协议开销及接收方应答分组的发送时间(假定应答分组长度很小)。
解:来回路程的时延$128ms\times2=256ms$。设窗口值为$X$,单位为字节。
使用$256kb/s$的链路,测到的平均吞吐率就等于发送速率的一半,即$128kb/s$,且应答分组忽略,则可以认为其一般的时间来发送,另一半的时间等待应答而不进行数据传输。
一般默认一次最大发送量等于窗口值,即一次性发送$XB$的数据。从而单位时间吞吐量/吞吐率=单位时间:
8\times X\div(128\times2\times1000)= 256\times0.001
x=256\times1000\times256\times0.001/8= 256\times32=8192
所以,窗口值为$8192B$。
TCP协议帧格式
例题 假定$TCP$报文段载荷是$1500B$,最大分组存活时间是$120s$,那么要使得$TCP$报文段的序列号不会循环回来而重叠,线路允许的最快速度是多大?(不考虑帧长限制)
解:目标在$120s$内最多发送$2^{32}B$个$TCP$报文数据(序列号为$32$位),即$35791394B/s$的载荷。$TCP$报文段载荷是$1500B$,因此可以发送$35791294\div1500=23861$个报文段。$TCP$开销是$20B$,$IP$开销是$20B$,以太网开销是$26B$($18B$的首部和尾部,$7B$的前同步码,$1B$的帧开始定界符)。这就意味着对于$1500B$的载荷,必须发送$1566B$。$1566\times8\times23861=299Mb/s$,因此允许的最快线路速率是$299Mb/s$。比这一速度更快时,就会冒在同一时间内不同的$TCP$报文段具有相同序号的风险。
连接管理
连接概念
例题 如果主机$1$的进程以端口$x$和主机$2$的端口$y$建立了一条$TCP$连接,这时如果希望再在这两个端口间建立一个$TCP$连接,那么会()。
$A.$建立失败,不影响先建立连接的传输
$B.$建立成功,且两个连接都可以正常传输
$C.$建立成功,先建立的连接被断开
$D.$建立失败,两个连接都被断开
解:$A$。一条连接使用它们的套接字来表示,因此$(1,x)-(2,y)$是在两个端口之间唯一可能的连接。而后建立的连接会被阻止,所以还有可能接收到数据。
数据传输
例题 $A$和$B$之间建立了$TCP$连接,$A$向$B$发送了一个报文段,其中序号字段$seq=200$,确认号字段$ack=201$,数据部分有$2$个字节,那么在$B$对该报文的确认报文段中()。
A.seq=202,ack=200
B.seq=201,ack=201
C.seq=201,ack=202
D.seq=202,ack=201
解:$C$。在$A$发向$B$的报文中,$seq=200$表示$A$发送给$B$的数据从$200$开始,一共$2B$,从而$A$给$B$的数据序号从$200$到$202$,$ack=201$表示$A$对$B$的消息已经确认了$200$之前的数据,希望$B$给$A$发送$201$号开始的数据。从而$B$给$A$发送的数据应该从$201$开始,即$seq=201$,且$B$对$A$的$202$数据已经确认,所以$ack=202$。
流量控制
发送窗口含义
例题 在采用$TCP$连接的数据传输阶段,如果发送端的发送窗口值由$1000$变为$2000$,那么发送端在收到一个确认之前可以发送()。
$A.2000$个$TCP$报文段
B.2000B
C.1000B
$D.1000$个$TCP$报文段
解:$B$。$TCP$使用滑动窗口机制来进行流量控制。在 $ACK$应答信息中,$TCP$在接收端用$ACK$加上接收方允许接收数据范围的最大值回送给发送方,发送方把这个最大值当作发送窗口值,表明发送端在未收到确认之前可以发送的最大字节数,即$2000B$。
部分确认
在只收到部分报文的确认时,若接收窗口更改,要考虑到发送过但是没有确认的报文长度。
例题 主机甲和主机乙之间已建立一个$TCP$连接,$TCP$最大段长为$1000B$。若主机甲的当前拥塞窗口为$4000B$,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为$2000B$,则此时主机甲还可以向主机乙发送的最大字节数是()。
A.1000
B.2000
C.3000
D.4000
解:$A$。发送方的发送窗口的上限值取接收方窗口和拥塞窗口这两个值中的较小一个,于是此时发送方的发送窗口为$min{4000,2000}= 2000B$,由于发送方还未收到第二个最大段的确认,所以此时主机甲还可以向主机乙发送的最大字节数为$2000-1000= 1000B$。
跳跃确认
$TCP$首部的序号字段是指本报文段数据部分的第一个字节的序号,而确认号是期待收到对方下一个报文段的第一个字节的序号。
当收到一系列确认,中间有中断的,则确认号是没有中断的最后一个序号。
例题 主机甲与主机乙之间已建立一个$TCP$连接,主机甲向主机乙发送了三个连续的$TCP$段,分别包含$300B$、$400B$和$500B$的有效载荷,第三个段的序号为$900$。若主机乙仅正确接收到第一个段和第三个段,则主机乙发送给主机甲的确认序号是()。
A.300
B.500
c.1200
D.1400
解:$B$。第三个段的序号为$900$,则第二个段的序号为$900-400=500$,现在主机乙期待收到第二个段,因此发给甲的确认号是$500$。
报文段寿命
例题 网络允许的最大报文段的长度为$128B$,序号用$8$位表示,报文段在网络中的寿命为$30s$。求每条$TCP$连接所能达到的最高数据率。
解:具有相同编号的报文段不应同时在网络中传输,必须保证当序列号循环回来重复使用时,具有相同序列号的报文段已从网络中消失,类似于$GBN$原理$2^n-1$。现在序号用$8$位表示,报文段的寿命为$30s$,那么在$30s$的时间内发送方发送的报文段的数目不能多于$2^8-1=255$个,$255\times128\times8/30=8704b/s$。
所以,每条$TCP$连接所能达到的最高数据率为$8704b/s$。
拥塞控制
拥塞窗口
例题 设$TCP$的拥塞窗口的慢开始门限值初始为$8$(单位为报文段),当拥塞窗口上升到$12$时发生超时,$TCP$开始慢启动和拥塞避免,那么第$13$次传输时拥塞窗口的大小为()。
A.4
B.6
C.7
D.8
解:$C$。拥塞窗口分别为:
| 传输次数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 门限值 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 6 | 6 | 6 | 6 | 6 |
| 拥塞窗口 | 1 | 2 | 4 | 8 | 9 | 10 | 11 | 12 | 1 | 2 | 4 | 6 | 7 |
例题 若主机甲与主机乙已建立一条$TCP$连接,最大段长$MSS$为$1KB$,往返时间$RTT$为$2ms$,则在不出现拥塞的前提下,拥塞窗口从$8KB$增长到$32KB$所需的最长时间是()。
A.4ms
B.8ms
C.24ms
D.48ms
解:$D$。请注意这里没有多余的条件,也不告诉门限,只要求增长的最长时间,所以按拥塞算法来看,线性增长的速度最慢,从而增长的最长时间最长,即一秒增加一个$MSS$的方式下最长,所以一共需要$(32-8)\times2=48ms$。
发送窗口
发送窗口的上限值=$\min${接收窗口,拥塞窗口}。
例题 主机甲和乙建立了$TCP$连接,甲始终以$MSS=1KB$大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为$10KB$的确认段。若甲在$t$时刻发生超时的时候拥塞窗口为$8KB$,则从$t$时刻起,不再发生超时的情况下,经过$10$个$RTT$后,甲的发送窗口是()。
A.10KB
B.12KB
C.14KB
D.15KB
解:$A$。当$t$时刻发生超时时,把$ssthresh$设为$8$的一半,即$4$,把拥塞窗口重新设为$1KB$。然后经历$10$个$RTT$后,拥塞窗口的大小依次为$2$、$4$、$5$、$6$、$7$、$8$、$9$、$10$、$11$、$12$,而发送窗口取当时的拥塞窗口和接收窗口的最小值,接收窗口始终为$10KB$,所以此时的发送窗口为$10KB$,选$A$。实际上该题接收窗口一直为$10KB$,可知不管何时,发送窗口一定小于等于$10KB$,选项中只有$A$选项满足条件,可直接得出选$A$。
例题 主机甲和主机乙新建一个$TCP$连接,甲的拥塞控制初始阈值为$32KB$,甲向乙始终以$MSS=1KB$大小的段发送数据,并一直有数据发送;乙为该连接分配$16KB$接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未出现发送超时的情况下,经过$4$个$RTT$后,甲的发送窗口是()。
A.1KB
B.8KB
C.16KB
D.32KB
解:$A$。$4$个$RTT$后,乙收到的数据全部存入缓存,不被取走,接收窗口只剩下$16-1-2-4-8=1KB$缓存,使得甲的发送窗口为$1KB$。
例题 在一个$TCP$连接中,信道带宽为$1Gb/s$,发送窗口固定为$65535B$,端到端时延为$20ms$。可以取得的最大吞吐率是多少?线路效率是多少?(发送时延忽略不计,$TCP$及其下层协议首部长度忽略不计,最大吞吐率=一个$RTT$传输的有效数据/一个$RTT$的时间。)
解:由于收到接收方的确认至少需要一个$RTT$,因此在一个$RTT$内,发送的数据量不能超过发送窗口大小,所以吞吐率=发送窗口大小/$RTT$。
题目中告诉的是端到端时延,RTT =2x端到端时延,因此$RTT=2\times20=40ms$,所以吞吐率$=65535\times8/0.04=13.107Mb/s$。
线路效率=吞吐率/信道带宽。本题中,线路效率$(13.107Mb/s)/(1000Mb/s)=1.31%$。
本题在计算时要特别注意单位(是$b$还是$B$),要区分$Gb/s$和$GB/s$。
RTT
需要注意的是$RTT$比传输次数要减一。
例题 假设在没有发生拥塞的情况下,在一条往返时延$RTT$为$10ms$的线路上采用慢开始控制策略。如果接收窗口的大小为$24KB$,最大报文段$MSS$为$2KB$,那么发送方发送出第一个完全窗口需要()时间。
A.30ms
B.40ms
C.50ms
D.60ms
解:$B$。发送窗口初始为$2KB$,此时$RTT=0$,然后依次为$4$、$8$、$16$,第四个$RTT$到达$24KB$,所以一共$40ms$。
RTT估计
$RTT$计算公式:新估计$RTT$=(1-\alpha)$\times$(旧RTT)+$\alpha\times$新$RTT$。
例题 已知当前$TCP$连接的$RTT$值为$35ms$,连续收到$3$个确认报文段,它们比相应的数据报文段的发送时间滞后了$27ms$、$30ms$与$21ms$。设$\alpha=0.2$。计算第三个确认报文段到达后的新的$RTT$估计值。
解:$RTT_1=(1-0.2)\times35+0.2\times27=33.4ms$,$RTT_2=(1-0.2)\times33.4+0.2\times30\approx32.7ms$,$RTT_3=(1-0.2)\times32.7+0.2\times21\approx30.4ms$。
TCP协议与IP协议
主机$H$通过快速以太网连接$Internet$,$IP$地址为$192.168.0.8$,服务器$S$的$IP$地址为$211.68.71.80$。$H$与$S$使用$TCP$通信时,在$H$上捕获的其中$5$个$IP$分组如表一所示。
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 分组1 | 45 00 00 30 | 01 9b 40 00 | 80 06 1d e8 | c0 a8 00 08 | d3 44 47 50 |
| 0b d9 13 88 | 84 6b 41 c5 | 00 00 00 00 | 70 02 43 80 | 5d b0 00 00 | |
| 分组2 | 43 00 00 30 | 00 00 40 00 | 31 06 6e 83 | d3 44 47 50 | c0 a8 00 08 |
| 13 88 0b d9 | e0 59 9f ef | 84 6b 41 c6 | 70 12 16 d0 | 37 el 00 00 | |
| 分组3 | 45 00 00 28 | 01 9c 40 00 | 80 06 1d ef | c0 a8 00 08 | d3 44 47 50 |
| 0b d9 13 88 | 84 6b 41 c6 | e0 59 9f f0 | 50 f0 43 80 | 2b 32 00 00 | |
| 分组4 | 45 00 00 38 | 01 9d 40 00 | 80 06 1d de | c0 a8 00 08 | d3 44 47 50 |
| 0b d9 13 88 | 84 6b 41 c6 | e0 59 9f f0 | 50 18 43 80 | e6 55 00 00 | |
| 分组5 | 45 00 00 28 | 68 11 40 00 | 31 06 06 7a | d3 44 47 50 | c0 a8 00 08 |
| 13 88 0b d9 | e0 59 9f f0 | 84 6b 41 d6 | 50 10 16 d0 | 57 d2 00 00 |
1)表一中的$IP$分组中,哪几个是由$H$发送的?哪几个完成了$TCP$连接建立过程?哪几个在通过快速以太网传输时进行了填充?
2)根据表一中的$IP$分组,分析$S$已经收到的应用层数据字节数是多少。
3)若表一中的某个$IP$分组在$S$发出时的前$40B$如表二所示,则该$IP$分组到达$H$时经过了多少个路由器?
| 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|
| 45 00 00 28 | 68 11 40 00 | 40 06 ec ad | d3 44 47 50 | ca 76 01 06 |
| 13 88 a1 08 | e0 59 9f f0 | 84 6b 41 d6 | 50 10 16 d0 | b7 d6 00 00 |
解:
1)首先如何判断由$H$发出?已知$IP$地址为$192.168.0.8$,所以找$IP$地址后两位为$08$。因为取的是前$40B$,所以前$20B$是$IP$数据报内容,后$20B$是$TCP$报文内容,根据$IP$数据报格式,每组的第一行第四列就是源$IP$地址,第五列就是目的$IP$地址,所以找到所有第一行第四列最后两位是$08$的数据,从而得到$1$、$3$、$4$数据报都是$H$发出的。
如何判断哪个完成了$TCP$连接?就是考察$TCP$三次握手,找到对应的标志位,是每个分组的第二行的第四列的四个分段数据中的第二段。即第一个分组的数据为$02=0000,0010$,即$SYN=1$,$ACK=0$;第二个分组的数据为$12=0001,0010$,即$SYN=1$,$ACK=1$,第三个分组的数据为$f0=1111,0000$,即$URG=1$,$ACK=1$,$SYN=0$,此时同步已经完成了,从而$SYN=0$。所以$1$、$2$、$3$完成了连接建立。
最后要考虑什么样的数据需要进行以太网填充?因为以太网的最短帧长是$46B$,不满足长度的就需要以太网填充。需要找到总长度字段,其中总长度字段在$IP$数据报中,即每组数据第一行第一列的最后四位。分组一为$30H=48D$,分组二为$30H=48D$,分组三为$28H=40D$,分组四为$38H=56D$,分组五位$28H=40D$,其中分组三和分组五要小于$46D$的长度,所以需要填充。
2)如何找到收到应用层的数据?从$TCP$数据报中能找到,因为$IP$数据报中都是首部,不含有数据信息。进一步,如何找到数据呢?从确认号和序号中找到。序号在每组第二行第二列,确认号在每组第二行第三列,分组三开始建立连接,而分组四的确认号和分组号一样,所以直接考虑分组五的确认号,为$84,6b,41,d6$,而第三四组的序号为$84,6b,41,c6$,代表$d6$到$c6$的数据已经被确认了,从而一共有$d6H-c6H=16B$的数据。
3)如何找到路由多少路由器?通过$IP$数据报中的生存时间,每经过一个路由器$TTL$就减一。首先根据表二的数据的$IP$表示为第一行第二列的前四位为$68,11$,可以认定其是表一的分组五,生存时间在第一行的第三列的前两位数据,表一的生存时间为$31H=49D$,而表二的生成时间为$40H=64D$,所以$TTL=64-49=15$。从而经过了$15$个路由器。