1. 试说明运输层的作用。运输层的通信和网络层的通信有什么重要区别?为什么运输层是必不可少的?网络层提供数据报或虚电路服务对上面的运输层有何影响?
答: (1)在TCP/IP协议栈中,运输层是面向用户功能的最低层,同时又是面向通信功能的最高层,是资源子网与通信子网的界面和桥梁,负责端到端的通信。
(2)运输层必须提供端到端的可靠的传输服务及流量控制、差错控制和拥塞控制服务,同时提供服务点寻址等其它运输层的服务;而网络层主要提供路由功能,只负责将分组送到目标主机,但它只是提供尽力传输服务,不能保证数据通信的正确性,同时也不进行拥塞控制。
(3)端到端之间的通信实际上是进程之间的通信,网络层不负责将分组送到目标主机,而不负责送到对应的目标进程,这项任务只能由运输层完成。运输层同时还提供“复用”和“分用”功能,可将上层不同进程发送来的数据使用同一运输层协议传送,在目标方,再将这些不同进程的数据分发到不同的目标进程,完成数据通信。
(4)若通信子网所提供的服务越多,运输协议就可以做得越简单。若网络层提供虚电路服务,那就能保证报文无差错、不丢失、不重复且按序地进行交付,因而运输协议就很简单。但若网络层提供的是不可靠的数据报服务,则就要求主机有一个复杂的运输协议。在极端情况下可以不需要运输层。
2. 当应用进程使用面向连接的TCP和无连接的IP时,这种传输是面向连接的还是无连接的?
答:当应用进程使用IP协议传输时,由于IP只是为TCP提供尽力而为的网络转发能力,是不可靠的,可能丢包或乱序,这时传输是无连接的。应用程序使用TCP协议时,TCP实现了端到端的可靠的传输控制、差错控制服务,这时传输便是面向连接的传输。 3. 接收方收到有差错的UDP用户数据报时应如何处理? 答:(1)丢弃;(2)附上差错警告信息,传给上层。
6. 解释为什么突然释放运输连接就可能丢失用户数据而使用TCP的连接释放方法就可保证不丢失数据。
答:当主机1和主机2之间连接建立后,主机1发送了一个TCP数据段并正确抵达主机2,接着主机1发送另一个TCP数据段,这次很不幸,,主机2在收到第二个TCP数据段之前发出了释放连接请求,如果就这样突然释放连接,显然主机1发送的第二个TCP报文段会丢失。而使用TCP的连接释放方法,主机2发出了释放连接的请求,那么即使收到主机1的确认后,只会释放主机2到主机1方向的连接,即主机2不再向主机1发送数据,而仍然可接收主机1发来的数据,所以可保证不丢失数据。
7. 试用具体例子说明为什么在运输连接建立时要使用三次握手。说明如不这样做可能会出现什么情况。
答:我们知道,3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机A和B之间的通信,假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑A是否收到自己的连接请求分组。在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。而A在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
8.一个 TCP 报文段中的数据部分最多为多少个字节?为什么?如果用户要传送的数据的字节长度超过TCP 报文段中的序号宇段可能编出的最大序号,问还能否用TCP 来传送? 答: IP 分组的最大值为65535 字节,IP 首部最少20个字节,TCP 首部最少20个字节,所以一个TCP报文段的数据部分最多为65535-20-20=65495字节。
当数据的累计字节长度超过TCP报文段中序号字段可编出的最大序号后,可通过循环使用序号(重复的序号的报文段早已到达接收端),仍能用TCP传送。 21. TCP 在进行流量控制时是以分组的丢失作为产生拥塞的标志。 有没有不是因拥塞而引起的分组丢失的情况?如有,请举出三种情况。
答:传统的TCP总是把分组丢失解释为拥塞,而假定链路错误造成的分组丢失是可以忽略的。但是(1)在高速网络中,当数据传输速率比较高时,链路错误是不能忽略的。(2)要求的窗口大小很容易超出最大允许的65 536字节。(3)较大的往返延迟偏差将导致不精确的往返时间估计,它最终将降低TCP的丢失检测机制的效能,可能导致拥塞崩溃。 23.为什么在TCP首部中的最开始的4个字节是TCP的端口号?
答:在ICMP的差错报文中要包含IP首部后面的8个字节的内容(如下图所示),而这里面有TCP首部中的源端口和目的端口,当TCP收到ICMP差错报文时需要用这两个端口来确定是哪条连接出了差错。
24. 为什么在 TCP 首部中有一个首部长度字段,而 UDP 的首部中就没有这个字段? 答:TCP首部除固定长度部分外,还有选项,因此TCP首部长度是可变的,而UDP首部长度是固定的。
26. 在TCP的拥塞控制中,什么是慢开始、拥塞避免、快重传和快恢复算法?这里每一种算法各起什么作用?“乘法减少”和“加法增大”各用在什么情况下?
答:慢开始:在主机刚刚开始发送报文段时可先将拥塞窗口cwnd 设置为一个最大报文段 MSS 的数值。在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值。用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
拥塞避免:当拥塞窗口值大于慢开始门限时,停止使用慢开始算法而改用拥塞避免算法。拥塞避免算法使发送端的拥塞窗口每经过一个往返时延RTT就增加一个MSS的大小。
快重传算法规定,发送端只要一连收到三个重复的 ACK 即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。 快恢复算法:(1) 当发送端收到连续三个重复的 ACK 时,就重新设置慢开始门限 ssthresh。 (2) 与慢开始不同之处是拥塞窗口 cwnd 不是设置为 1,而是设置为 ssthresh + 3 *MSS。 (3) 若收到的重复的 ACK 为 n 个(n > 3),则将 cwnd 设置为 ssthresh + n * MSS。 (4) 若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。
(5) 若收到了确认新的报文段的 ACK,就将 cwnd 缩小到 ssthresh。
“乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。 “加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
第八章课后习题参考答案



