第五章 传输层
5-01 试说明运输层在协议栈中的地位和作用,运输层的通信和网络层的通信有什么重要区别?为什么运输层是必不可少的?
答:运输层处于面向通信部分的最高层,同时也是用户功能中的最低层,向它上面的应用层提供服务。
运输层为应用进程之间提供端到端的逻辑通信,但网络层是为主机之间提供逻辑通信(面向主机,承担路由功能,即主机寻址及有效的分组交换)。
各种应用进程之间通信需要“可靠或尽力而为”的两类服务质量,必须由运输层以复用和分用的形式加载到网络层。
5-02 网络层提供数据报或虚电路服务对上面的运输层有何影响? 答:网络层提供数据报或虚电路服务不影响上面的运输层的运行机制。但提供不同的服务质量。
5-03 当应用程序使用面向连接的TCP和无连接的IP时,这种传输是面向连接的还是面向无连接的?
答:都是。这要在不同层次来看,在运输层是面向连接的,在网络层则是无连接的。
5-04 试用画图解释运输层的复用。画图说明许多个运输用户复用到一条运输连接上,而这条运输连接又复用到IP数据报上。
答:许多个运输用户复用到一条运输连接上:不同的端口号。
这条运输连接又复用到IP数据报上:不同的协议号,UDP:17,TCP: 6。
5-05 试举例说明有些应用程序愿意采用不可靠的UDP,而不用采用可靠的TCP。
答:VOIP(Voice over Internet Protocol)即网络电话,将模拟的声音讯号经过压缩与封包之后,以数据封包的形式在IP网络进行语音讯号的传输,通俗来说也就是互联网电话或IP电
话。
由于语音信息具有一定的冗余度,人耳对VOIP数据报损失由一定的承受度,但对传输时延的变化较敏感。有差错的UDP数据报在接收端被直接抛弃,TCP数据报出错则会引起重传,可能带来较大的时延扰动。因此VOIP宁可采用不可靠的UDP,而不愿意采用可靠的TCP。
5-06 接收方收到有差错的UDP用户数据报时应如何处理? 答:丢弃。
5-07 如果应用程序愿意使用UDP来完成可靠的传输,这可能吗?请说明理由。 答:可能,但应用程序中必须额外提供与TCP相同的功能。
5-08 为什么说UDP是面向报文的,而TCP是面向字节流的?
答:IDP是面向报文的。发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。接收方UDP,对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
TCP是面向字节流的。发送方TCP对应用程序交下来的报文数据块,视为无结构的字节流(无边界约束,可分拆/合并),但维持各字节的顺序----流(流入到进程或从进程流出的字节序列)。
5-09 端口的作用是什么?为什么端口要划分为三种?
答:端口的作用是对TCP/IP体系的应用进程进行统一的标志,使运行不同操作系统的计算机的应用进程能够互相通信。熟知端口号,数值一般为0~1023,标记常规的服务进程如FTP:21,DNS:53,HTTP:80等;登记端口号,数值为1024~49151,标记没有熟知端口号的非常规的服务进程;客户端口号(短暂端口号),数值为49152~65535,客户进程运行时动态选择。
5-10 试说明运输层中伪首部的作用。 答:仅用于计算运输层数据报校验和。
5-11 某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报。既然都是数据报,可否跳过UDP而直接交给IP层?哪些功能UDP提供了但IP没提提供?
答:不可跳过UDP而直接交给IP层。IP数据报IP报头承担主机寻址、报头检错,直接交给IP层只能找到目的主机而无法找到目的进程。
UDP提供对应用进程的复用和分用功能,以及提供对数据的差错检验。
5-12 一个应用程序用UDP,到了IP层把数据报在划分为4个数据报片发送出去,结果前两个数据报片丢失,后两个到达目的站。过了一段时间应用程序重传UDP,而IP层仍然划分为4个数据报片来传送。结果这次前两个到达目的站而后两个丢失。试问:在目的站能否将这两次传输的4个数据报片组装成完整的数据报?假定目的站第一次收到的后两个数据报片仍然保存在目的站的缓存中。
答:数据报片丢失重传时,IP数据报的标识字段会有另一个标识符。仅当标识符相同的IP
数据报片才能组装成一个IP数据报。前两个IP数据报片的标识符与后两个IP数据报片的标识符不同,因此不能组装成一个IP数据报。
5-13 一个UDP用户数据报的数据字段为8192字节。在数据链路层要使用以太网来传送。试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值。 答:6个。8192字节加上UDP首部8字节共8200字节。
数据字段的长度:前5个是1480字节,最后一个是800字节。
片偏移字段的值分别是:0,1480,2960,4440,5920和7400。
5-14 一UDP用户数据报的首部十六进制表示是:06 32 00 45 00 1C E2 17。试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器发送给客户?使用UDP的这个服务器程序是什么?
解:源端口1586,目的端口69,UDP用户数据报总长度28字节,数据部分长度20字节。 此UDP用户数据报是从客户发给服务器(因为目的端口号<1023,是熟知端口)、服务器程序是TFTP。
5-15 使用TCP对实时话音数据的传输有没有什么问题?使用UDP在传送数据文件时会有什么问题?
答:如果语音数据不是实时播放(边接收边播放)就可以使用TCP,因为TCP传输可靠。接收端用TCP接收讲话音数据接受完毕后,可以在以后的任何时间进行播放。但假定是实时传输,则必须使用UDP。UDP不保证可靠交付,但UCP比TCP的开销要小很多。因此只要应用程序接受这样的服务质量就可以使用UDP。
5-16 在停止等待协议中如果不使用编号是否可行?为什么?
答:不行。分组和确认分组都必须进行编号,才能明确哪个分组得到了确认。
5-17 在停止等待协议中,如果收到重复的报文段时不予理睬(即悄悄地丢弃它而其他什么也没做)是否可行?试举出具体的例子说明理由。
答:不行。收到重复帧不确认相当于确认丢失,会造成发送方重传已经发送并到达接收方的帧。
5-18 假定在运输层使用停止等待协议。发送方在发送报文段M0后在设定的时间内未收到确认,于是重传M0,但M0又迟迟不能到达接收方。不久,发送方收到了迟到的对M0的确认,于是发送下一个报文段M1,不久就收到了对M1的确认。接着发送方发送新的报文段M0,但这个新的M0在传送过程中丢失了。正巧,一开始就滞留在网络中的M0现在到达接收方。接收方无法分辨M0是旧的。于是收下M0,并发送确认。显然,接收方后来收到的M0是重复的,协议失败了。试画出类似于图5-9所示的双方交换报文段的过程。 答:见课本后答案。
5-19 试证明:当用n比特进行分组的编号时,若接收到窗口等于1(即只能按序接收分组),当仅在发送窗口不超过2n-1时,连接ARQ协议才能正确运行。窗口单位是分组。 解:见课本后答案。
5-20 在连续ARQ协议中,若发送窗口等于7,则发送端在开始时可连续发送7个分组。因
此,在每一分组发送后,都要置一个超时计时器。现在计算机里只有一个硬时钟。设这7个分组发出的时间分别为t0,t1…t6,且tout都一样大。试问如何实现这7个超时计时器(这叫软件时钟法)? 解:见课本后答案。
5-21 假定使用连续ARQ协议中,发送窗口大小事3,而序列范围[0,15],而传输媒体保证在接收方能够按序收到分组。在某时刻,在接收方,下一个期望收到序号是5。 试问:
(1) 在发送方的发送窗口中可能有出现的序号组合有哪几种?
(2) 接收方已经发送出去的、但在网络中(即还未到达发送方)的确认分组可能有哪些?说明这些确认分组是用来确认哪些序号的分组。 答:见课本后答案。
5-22 主机A向主机B发送一个很长的文件,其长度为L字节。假定TCP使用的MSS有1460字节。
(1) 在TCP的序号不重复使用的条件下,L的最大值是多少? (2) 假定使用上面计算出文件长度,而运输层、网络层和数据链路层所使用的首部开销共66字节,链路的数据率为10Mb/s,试求这个文件所需的最短发送时间。 解:(1)L_max的最大值是2^32=4GB,G=2^30。
(2)满载分片数Q={L_max/MSS}取整=2941758发送的总报文数: N=Q*(MSS+66)+{(L_max-Q*MSS)+66}=4489122708+682=4489123390
总字节数是N=4489123390字节,发送4489123390字节需时间为:N*8/(10*10^6)=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)确认号应为100 (3)80字节 (4)70
5-24 一个TCP连接下面使用256kb/s的链路,其端到端时延为128ms。经测试,发现吞吐量只有120kb/s。试问发送窗口W是多少?(提示:可以有两种答案,取决于接收等发出确认的时机)。
解:来回路程的时延等于256ms(=128ms×2)。 设窗口值为X(注意:以字节为单位),假定一次最大发送量等于窗口值,且发射时间等于256ms,那么,每发送一次都得停下来期待再次得到下一窗口的确认,以得到新的发送许可。这样,发射时间等于停止等待应答的时间。结果,测到的平均吞吐率就等于发送速率的一半,即: 8X÷(256×1000)=256×0.001 X=8192