1.试说明运输层在协议栈中的地位和作用,运输层的通信和网络层的通信有什么重要区别?为什么运输层是必不可少的?
答:
运输层处于面向通信部分的最高层,同时也是用户功能中的最低层,向它上面的应用层提供服务向下兼容网络层,起到承上启下的中间作用 运输层为应用进程之间提供端到端的逻辑通信,但网络层是为主机之间提供逻辑通信(面向主机,承担路由功能,即主机寻址及有效的分组交换)。 各种应用进程之间通信需要“可靠或尽力而为”的两类服务质量,必须由运输层以复用和分用的形式加载到网络层。 2 . 网络层提供数据报或虚电路服务对上面的运输层有何影响?
答:网络层提供数据报或虚电路服务不影响上面的运输层的运行机制。 但提供不同的服务质量。
网络层所提供的服务越多,传输层协议就可以做得越简单。若网络层提供虚电报服务,那就能保证报文五差错、不丢失、不重复且按序地进行交互,因而传输协议就很简单。
但若网络层提供的是不可靠的数据报服务,则就要求主机上有一个复杂的传输协议。
3 .当应用程序使用面向连接的TCP和无连接的IP时,这种传输是面向连接的还是面向无连接的?
答:都是。这要在不同层次来看,在运输层是面向连接的,在网络层则是无连接的。
4.试用画图解释运输层的复用。画图说明许多个运输用户复用到一条运输连接上,而这条运输连接又复用到IP数据报上。
5. 试举例说明有些应用程序愿意采用不可靠的UDP,而不用采用可靠的TCP。
答:VOIP:由于语音信息具有一定的冗余度,人耳对VOIP数据报损失由一定的承受度,但对传输时延的变化较敏感。有差错的UDP数据报在接收端被直接抛弃,TCP数据报出错则会引起重传,可能带来较大的时延扰动。因此VOIP宁可采用不可靠的UDP,而不愿意采用可靠的TCP。
原理:有差错的数据报UDP直接丢弃,而TCP则要求重传,TCP会带来较大的时延
此外还有DNS、SNMP等都采用不可靠的UDP协议,而不愿意采用可靠的TCP
6 .接收方收到有差错的UDP用户数据报时应如何处理?
答:丢弃
7 .如果应用程序愿意使用UDP来完成可靠的传输,这可能吗?请说明理由答。
答:可能,但应用程序中必须额外提供与TCP相同的功能。
8.为什么说UDP是面向报文的,而TCP是面向字节流的?
答:发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。发送方TCP对应用程序交下来的报文数据块,视为无结构的字节流(无边界约束,课分拆/合并),但维持各字节。
UDP是面向报文的:发送方的UDP对应用程序交下来的报文,在添加了首部之后就向下交付,UDP对应用层交付下来的报文即不合并也不拆分,而是保留这些报文的边界,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,接收方UDP对下方交上来的UDP用户数据报,在去除首部之后就原封不动的交付给上层的应用程序,一次交付一个完整报文,所以是UDP是面向报文的
TCP是面向字节的:发送方TCP对应用程序交下来的报文数据块,视为无结构的字节流(无边界约束,可拆分/合并),但维持各字节流顺序(相对顺序没有变),TCP发送方有一个发送缓冲区,当应用程序传输的数据块太长,TCP就可以把它划分端一些再传输,如果应用程序一次只传输一个字节,那么TCP可以等待积累足够多的字节后再构成报文端发送出去,所以TCP的面向字节的
9 . 端口的作用是什么?为什么端口要划分为三种?
答:端口的作用是对TCP/IP体系的应用进程进行统一的标志,使运行不同操作系统的计算机的应用进程能够互相通信。
熟知端口号:数值一般为0~1023,标记常规的服务进程如FTP是21,DNS是53,HTTP是80等 登记端口号:数值为1024~49151,标记没有熟知端口号的非常规的服务进程 短暂端口号:数值为49152~65535,客户进程运行时动态选择 把端口划分为3类是因为:避免端口号重复,无法区分应用进程。二是因特网上的计算机通信都是采用C/S方式,在客户发起通信请求时,必须知道服务器的端口,对应一些重要的应用程序,必须让所有用户知道。
10.试说明运输层中伪首部的作用。
答:用于计算运输层数据报校验和。
伪首部(pseudo header),通常有TCP伪首部和UDP伪首部。在UDP伪首部中,包含32位源IP地址,32位目的IP地址,8位协议,16位UDP长度。通过伪首部的校验,UDP可以确定该数据报是不是发给本机的,通过首部协议字段,UDP可以确认有没有误传。
11.某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报。既然都是数据报,可否跳过UDP而直接交给IP层?哪些功能UDP提供了但IP没提提供?
答:IP数据报只能找到目的主机而无法找到目的进程。UDP提供对应用层的复用和分用功能,并提供对数据部分的差错检验。
12.一个应用程序用UDP,到IP层把数据报在划分为4个数据报片发送出去,结果前两个数据报片丢失,后两个到达目的站。过了一段时间应用程序重传UDP,而IP层仍然划分为4个数据报片来传送。结果这次前两个到达目的站而后两个丢失。试问:在目的站能否将这两次传输的4个数据报片组装成完整的数据报?假定目的站第一次收到的后两个数据报片仍然保存在目的站的缓存中。
答:不行 重传时,IP数据报的标识字段会有另一个标识符。 仅当标识符相同的IP数据报片才能组装成一个IP数据报。前两个IP数据报片的标识符与后两个IP数据报片的标识符不同,因此不能组装成一个IP数据报。
13 .一个UDP用户数据的数据字段为8192字节。在数据链路层要使用以太网来传送。试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值。
答:UDP报文的长度=8192+8=8200字节。由于以太网的MTU=1500字节,所以IP分组的数据部分长度为1500-20=1480字节。因此需要划分为6个IP数据片。
数据字段的长度:前5个是1480字节,最后一个是800字节。
片偏移字段的值分别是:0,185,370,555,740和925.。
14. 一UDP用户数据报的首部十六进制表示是:06 32 00 45 00 1C E2 17.试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器发送给客户?使用UDP的这个服务器程序是什么?
答:源端口0x0632=1586,目的端口0x0045=69,UDP用户数据报总长度0x001C=28字节,数据部分长度是28-8=20字节。 此UDP用户数据报是从客户发给服务器(因为目的端口号3),则将cwnd 设置为ssthresh若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。若收到了确认新的报文段的ACK,就将cwnd缩小到ssthresh。
乘法减小:
是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值ssthresh设置为当前的拥塞窗口值乘以0.5。当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。
加法增大:
是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口cwnd增加一个MSS大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
38.设TCP的ssthresh的初始值为8(单位为报文段)。当拥塞窗口上升到12时网络发生了超时,TCP使用慢开始和拥塞避免。试分别求出第1 次到第15 次传输的各拥塞窗口大小。你能说明拥塞控制窗口每一次变化的原因吗?
答:拥塞窗口大小分别为:1,2,4,8,9,10,11,12,1,2,4,6,7,8,9。
依照原理,首先执行TCP连接初始化,将拥塞窗口cwnd值置为1;其次执行慢开始算法,cwnd按指数规律增长,因此随后窗口大小分别为2,4,8。当拥塞窗口cwnd=ssthresh时,进入拥塞避免阶段,其窗口大小依次是9,10,11,12,直到上升到12为止发生拥塞;然后把门限值ssthresh设置为当前的拥塞窗口值乘以0.5,门限值ssthresh变为6,;然后进入慢开始,cwnd值置为1,cwnd按指数规律增长,随后窗口大小分别为1,2,4,6,当拥塞窗口cwnd=ssthresh时,进入拥塞避免阶段,其窗口大小依次是7,8,9。
39.TCP的拥塞窗口cwnd 大小与传输轮次n的关系如表5.1所示:
表5.1 拥塞窗口cwnd 大小与传输轮次n的关系
cwnd
1
2
4
8
16
32
33
34
35
36
37
38
39
n
1
2
3
4
5
6
7
8
9
10
11
12
13
cwnd
40
41
42
21
22
23
24
25
26
1
2
4
8
n
14
15
16
17
18
19
20
21
22
23
24
25
26
(1)试画出如教材中图5-25所示的拥塞窗口与传输轮次的关系曲线。
(2)指明TCP 工作在慢开始阶段的时间间隔。
(3)指明TCP 工作在拥塞避免阶段的时间间隔。
(4)在第16 轮次和第22 轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?
(5)在第1轮次,第18轮次和第24 轮次发送时,门限ssthresh分别被设置为多大?
(6)在第几轮次发送出第70 个报文段?
(7)假定在第26 轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd和门限ssthresh应设置为多大?
答:
40.TCP 在进行流量控制时是以分组的丢失作为产生拥塞的标志。有没有不是因拥塞而
引起的分组丢失的情况?如有,请举出三种情况。
答:
当IP数据报在传输过程中需要分片,但其中的一个数据报未能及时到达终点,而终点组装IP 数据报已超时,因而只能丢失该数据报;IP 数据报已经到达终点,但终点的缓存没有足够的空间存放此数据报;数据报在转发过程中经过一个局域网的网桥,但网桥在转发该数据报的帧没有足够的差错空间而只好丢弃。
41.用TCP传送512字节的数据。设窗口为100字节,而TCP报文段每次也是传送100字节的数据。再设发送端和接收端的起始序号分别选为100和200,试画出类似于教材中图5-31的工作示意图。从连接建立阶段到连接释放都要画上。
答:答案如图5.4所示。
图5.4 TCP传送数据的工作示意图
42.在图5-29中所示的连接释放过程中,主机B能否先不发送ACK=x+1 的确认? (因为后面要发送的连接释放报文段中仍有ACK=x+1 这一信息)
答:
如果B 不再发送数据了,是可以把两个报文段合并成为一个,即只发送FIN+ACK 报文段。但如果B 还有数据报要发送,而且要发送一段时间,那就不行,因为A 迟迟收不到确认,就会以为刚才发送的FIN 报文段丢失了,就超时重传这个FIN 报文段,浪费网络资源。
43.在图(5-30)中,在什么情况下会发生从状态LISTEN到状态SYN_SENT,以及从状态SYN_ENT到状态SYN_RCVD的变迁?
答:当A和B都作为客户,即同时主动打开TCP连接。这时的每一方的状态变迁
都是:CLOSED----→SYN-SENT---→SYN-RCVD--→ESTABLISHED
44.试以具体例子说明为什么一个运输连接可以有多种方式释放。可以设两个互相通信的用户分别连接在网络的两结点上。
答:设A,B建立了运输连接。协议应考虑一下实际可能性:
A或B故障,应设计超时机制,使对方退出,不至于死锁;
A主动退出,B被动退出
B主动退出,A被动退出
45.解释为什么突然释放运输连接就可能会丢失用户数据,而使用TCP的连接释放方法就可保证不丢失数据。
答:
当主机1和主机2之间连接建立后,主机1发送了一个TCP数据段并正确抵达主机2,接着主机1发送另一个TCP数据段,这次很不幸,主机2在收到第二个TCP数据段之前发出了释放连接请求,如果就这样突然释放连接,显然主机1发送的第二个TCP报文段会丢失。
而使用TCP的连接释放方法,主机2发出了释放连接的请求,那么即使收到主机1的确认后,只会释放主机2到主机1方向的连接,即主机2不再向主机1发送数据,而仍然可接受主机1发来的数据,所以可保证不丢失数据。
46.试用具体例子说明为什么在运输连接建立时要使用三次握手。说明如不这样做可能会出现什么情况。
答:
3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑A是否收到自己的连接请求分组,在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。而A发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
47.一个客户向服务器请求建立TCP连接。客户在TCP连接建立的三次握手中的最后一个报文段中捎带上一些数据,请求服务器发送一个长度为L字节的文件。假定:
(1)客户和服务器之间的数据传输速率是R字节/秒,客户与服务器之间的往返时间是RTT(固定值)。
(2)服务器发送的TCP报文段的长度都是M字节,而发送窗口大小是nM字节。
(3)所有传送的报文段都不会出错(无重传),客户收到服务器发来的报文段后就及时发送确认。
(4)所有的协议首部开销都可忽略,所有确认报文段和连接建立阶段的报文段的长度都可忽略(即忽略这些报文段的发送时间)。
试证明,从客户开始发起连接建立到接收服务器发送的整个文件多需的时间T 是:T=2RTT+L/R 当nM>R(RTT)+M或T=2RTT+L/R+(K-1)[M/R+RTT-nM/R] 当nM
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?