计网


5-08 为什么说UDP是面向报文的,而TCP是面向字节流 的

发送方 UDP对应用程序交下来的报文,在添加首部后就向下交付 IP层。UDP对应用层交下来的 报文,既不合并,也不拆分,而是保留这些报文的边界。接收方 UDP对 IP层交上来的 UDP用户数据 报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。 发送方TCP对应用程序交下来的报文数据块,视为无结构的字节流(无边界约束,课分拆/合并 ),但维持各字节

5-09 端口的作用是什么?为什么端口要划分为三种?

端口的作用是对TCP/IP体系的应用进程进行统一的标志,使运行不同操作系统的计算机的应用 进程能够互相通信。熟知端口,数值一般为0~1023.标记常规的服务进程;登记端口号,数值为 1024~49151,标记没有熟知端口号的非常规的服务进程;

5-10 试说明运输层中伪首部的作用

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

5-13 一个UDP用户数据报的数据字段为8192字节。在链路层要使用以太网来传送。

试问应当划分为几个IP数据报片?说明每一个IP数据报片的数据字段长度和片偏移字段的值。

解答: UDP用户数据报的长度=8192 + 8= 8200 B
以太网数据字段最大长度是1500B。若IP首部为20B,则IP数据报的数据部分最多只
能有1480B。8200= 1480x5 + 800,因此划分的数据报片共6个。
数据字段的长度:前5个是1480字节,最后一个是800字节。
第1个数据报片的片偏移字节是0。
第2个数据报片的片偏移字节是1480 B。
第3个数据报片的片偏移字节是1480x 2= 2960 B.
第4个数据报片的片偏移字节是1480x 3 = 4440 B.
第5个数据报片的片偏移字节是1480x4= 5920 B.
第6个数据报片的片偏移字节是1480x5= 7400 B.

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

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

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

5-20 一分组发送后,都要置一个超时计时器。现在计算机里只有一个硬时钟。设这7个分组发出的时间分 别为t0,t1…t6,且tout都一样大。试问如何实现这7个超时计时器(这叫软件时钟法)?

用相对发送时间实现一个链表

5-22 主机 A向主机B发送一个很长的文件,其长度为L字节。假定TCP使用的MSS有1460字节。 在TCP的序号不重 复使用的条件下,L的最大值是多少? 假定使用上面计算出文件长度,而运输层、网络层和数据链路层所使用的首部开销共66字节, 链路的数据率为10Mb/s,试求这个文件所需的最短发送时间。

(1)L_max的最大值是 232=4GB,G=230.

(2)满载分片数Q={L_max/MSS} 取整=2941758 发送的总报文数 N=Q(MSS+66)+{(L_maxQMSS)+66}=4489122708+682=4489123390 总字节数是N=4489123390字节,发送4489123390字节需时间为:N8/(1010^6) =3591.3秒,即 59.85分,约1小时。

5—23 主机A向主机B连续发送了两个TCP报文段,其序号分别为70和100。

(1)试问: 第一个报文段携带 了多少个字节的数据?

(2) 主机B收到第一个报文段后发回的确认中的确认号应当是多少?

(3) 如果主机B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中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-28 主机A向主机B发送TCP报文段,首部中的源端口是m而目的端口是n。当B向A发送回信在使用TCP传送 数据时,如果有一个确认报文段丢失了,也不一定会引起与该确认报文段对应 时,其TCP报文段的首部中源端口和目的端口分别是什么?

n, m

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-34已知第一次测得TCP的往返时间RTT是30ms。接着收到了三个确认报文段,用它们测量出的往返时间样本RTT分别是: 26 ms, 32 ms和24ms。设a=0.1。

试计算每一次的新的加权平均往返时间值RTTs。讨论所得出的结果。

按教材上(5-4)式:新的RTTs=(1-a)x (旧的RTTs)+ax (新的RTT样本)
第一次算出: RTTs=(1-0.1)x30+0.1 x 26= 29.6 ms
第二次算出: RTTs=(1-0.1)x29.6+0.1 x32= 29.84 ms

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

5-35 - 试计算一个包括五段链路的运输连接的单程端到端时延。五段链路中有两段是卫星链路,有三段是广域网链路。每条卫星链路又由上行链路和下行链路两部

分组成。可以取这两部分的传播时延之和为250 ms。每- -个广域网的范围为
1500km,其传播时延可按150000km/s来计算。各数据链路速率为48kbi/s,
帧长为960位。

广域网的传播时延= (1500 km)/(150000 km/s)= 0.01 s= 10 ms .
每一个结点的传输时延= (960 bit)/ (48000 bit/s) = 0.02 s= 20 ms
可见总共需时630ms。

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

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

要传送的512B的数据必须划分为6个报文段传送,前5个报文段各100B,最后
一个报文段传送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的序号多了一个序号。

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首部:.

CB84000D001C001C

试问:
(1) 源端口号是什么?
(2) 目的端口号是什么?
(3) 这个用户数据报的总长度是多少?
(4)数据长度是多少?
(5) 这个分组是从客户到服务器方向的,还是从服务器到客户方向的?
(6)客户进程是什么?

(1)源端口号是最前面的四位十六进制数字(CB8416), 算出十进制的源端口号是
12x16+11x 162+8x 16' +4x 16°=49152 + 2816+ 128 +4= 52100。
(2)目的端口号是第二个四位十六进制数字(000D16), 算出十进制的目的端口号是13。
(3)第三个四位十六进制数字(001C16) 定义了整个UDP分组的长度,算出是
1x16'+ 12x16°=28字节。
(4)数据的长度是整个分组的长度减去首部的长度,也就是28 -8-20字节。
(5)因为目的端口号是13 (熟知端口),所以这个分组是从客户到服务器的。
(6)从RFC 867可以得知,这个客户进程是Daytime。当Daytime服务器收到客户发送的
UDP用户数据报后,就把现在的日期和时间以ASCI码字符串的形式返回给客户。

5-58 TC)在4:30:20发送了一个报文段。它没有收到确认。在4:30:25它重传了前面

这个报文段。 它在4:30:27收到确认。若以前的RTT值是4秒,根据Karn算

法,新的RTT值是多少?

根据Karm算法,只要是TCP报文段重传了,就不采用其往返时间样本。本题中
收到的确认是在重传后收到的。因此RTT值没有变化,仍然是以前的数值(4秒)。

5-64 TCP连接处于FIN-WAIT-1状态。以下的事件相继发生:

收到ACK报文段。

(2)收到FIN报文段。
(3) 发生了超时。
在每一个事件之后,连接的状态是什么?在每一个事件之后发生的动作是
什么?

(1)处于FIN-WAIT-1状态的只有TCP的客户。当收到ACK报文段后,TCP客户不发送
任何报文段,只是从FIN-WAIT-I状态进入到FIN-WAIT-2状态。
(2) 在收到FIN报文段后,TCP客户发送ACK报文段,并进入到TIME-WAIT状态。
(3) 当发生了超时,也就是在经过了2 MSL时间后,TCP客户进入到CLOSED状态。
以上的状态转换可参考教材上的图5-30。

5-66 主机A通过TCP连接向B发送一个很长的文件,因此这需要分成很多个报文

段来发送。假定某一个TCP报文段的序号是x,那么下一个报文段的序号是否

就是x+1呢?

假定某一个TCP报文段的序号是x,那么下一个报文段的序号应当是x+n,这里
的n是这个报文段中的数据长度的字节数。如果n=400,那么下一个报文段的序号应当是x+400。若在此报文段中仅有一个字节的数据,则下一个报文段的序号才是x+ 1。

5-70假定用TCP协议在40 Gbit/s的线路上传送数据。

(1)如果TCP充分利用了线路的带宽,那么需要多长的时间TCP会发生序号

绕回? .
(2)假定现在TCP的首部中采用了时间戳选项。时间戳占用了4字节,共32
位。每隔一定的时间(这段时间叫做一个嘀嗒)时间戳的数值加1。假定
设计的时间戳是每隔859微秒,时间戳的数值加1。试问要经过多少时间
才发生时间戳数值的绕回?

(1) 40 Gbit/s的线路上传送数据,每秒可传送5x 109字节的数据。
TCP的序号字段有32位,共有232个不同序号,可以发送的时间是
23271 5000000000 = 0.859s= 859 ms
即经过859ms后序号就绕回,又重复以前的数值。
(2)时间戳数值绕回的时间是232x859x 10-s=3.69x 10°s=42.7天,比原来的绕回时
间大大增加了。
现在每一个TCP的数据报文段在其首部有两个字段用来标志这个报文段。一个是序号,
另一个是时间戳。但发送方发送了232个字节的数据后,序号又绕回到初始的数值了,但这时
的时间戳还没有绕回(因为在本例中,这需要经过42.7 天才绕回),而是指在某个数值,这
和一开始的时间戳初始值肯定是不一样的。这样,即使序号一样,接收方也能够根据时间戳
判断这是一个新的数据报文段,而不是以前发送过的旧的数据报文段。

5-72 己知TCP的接收窗口大小是600(单位是字节,为简单起见以后就省略了单位),已经确认了的序号是300。 试问,在不断地接收报文段和发送确认报文段的过程

中,接收窗口也可能会发生变化(增大或缩小)。请用具体例子(指出接收方发
送的确认报文段中的重要信息)来说明哪些情况是可能发生的,而哪些情况是不
允许发生的。

(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)。因此,这种情况( 在发送时数据是在发
送窗口之内,但当到达接收端时,这些数据却落到接收窗口之外)必须避免。总之,我们要
记住,接收窗口的前沿是不允许后退的。

5-73在上题中, 如果接收方突然因某种原因不能够再接收数据了,可以立即向发送发送把接收窗口置为零的报文段(即rwnd = 0)。 这时会导致接收窗口的前

沿后退。试问这种情况是否允许?

这种情况是允许的。当发送方收到这样的信息时,并不是把发送窗口缩回到零,
而是立即停止发送。什么时候可以再发送数据,就要等接收方重新开放接收窗口,即给出一
个非零的接收窗口。详细的过程见本章的常见问题与解答5-10的持续计时器部分。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM