From 1a538b107ebdb88918693715216a881ff979ad02 Mon Sep 17 00:00:00 2001 From: Didnelpsun <2675350965@qq.com> Date: Fri, 6 Aug 2021 23:21:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BA=94=E7=94=A8=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Computer-Network/4-transport-layer-ex.md | 257 +++++++++++++++++++++ Computer-Network/4-transport-layer.md | 2 + Computer-Network/5-application-layer-ex.md | 2 + Computer-Network/5-application-layer.md | 6 +- 4 files changed, 264 insertions(+), 3 deletions(-) create mode 100644 Computer-Network/5-application-layer-ex.md diff --git a/Computer-Network/4-transport-layer-ex.md b/Computer-Network/4-transport-layer-ex.md index d5b2d31..39a9898 100644 --- a/Computer-Network/4-transport-layer-ex.md +++ b/Computer-Network/4-transport-layer-ex.md @@ -60,4 +60,261 @@ $D.$远程登录 ## 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$个路由器。 diff --git a/Computer-Network/4-transport-layer.md b/Computer-Network/4-transport-layer.md index 4980018..b6730f6 100644 --- a/Computer-Network/4-transport-layer.md +++ b/Computer-Network/4-transport-layer.md @@ -145,6 +145,8 @@ TCP建立连接采用客户服务器方式。但是实际上任何一台计算 注释:其中$seq$表示序号,指本报文的随机编号;$ack$表示确认号,指期待对方发送的报文的第一个序号。 +若不指出为$1$,则代表其值为$0$。 + 1. 第一部分: + $SYN=1$:主机$A$要建立连接了。 + $seq=x$(随机):后面没有数据。 diff --git a/Computer-Network/5-application-layer-ex.md b/Computer-Network/5-application-layer-ex.md new file mode 100644 index 0000000..83e8385 --- /dev/null +++ b/Computer-Network/5-application-layer-ex.md @@ -0,0 +1,2 @@ +# 应用层 + diff --git a/Computer-Network/5-application-layer.md b/Computer-Network/5-application-layer.md index 7dd6986..3414f5f 100644 --- a/Computer-Network/5-application-layer.md +++ b/Computer-Network/5-application-layer.md @@ -24,14 +24,14 @@ 1. 与服务器通信,使用服务器提供的服务。 2. 间歇接入网络。 -3. 可能使用动态IP地址。 +3. 可能使用动态$IP$地址。 4. 不能直接与其他客户机通信。 -应用:Web、FTP、电子邮件等。 +应用:$Web$、$FTP$、电子邮件等。 ### P2P模型 -对等模型也可以看作C/S模型的变形 +对等模型也可以看作$C/S$模型的变形 对等模型的特点: