锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【计算机网络】第五部分 传输层(24) 拥塞控制和服务质量

时间:2023-12-13 14:37:02 k4fecn6电容器

文章目录

  • 24.1 数据通信量
    • 24.1.1 通信量描述符
      • 1. 平均数据速率
      • 2. 峰值数据速率
      • 3. 最大突发长度
      • 4. 有效带宽
    • 24.1.2 通信量特征值
      • 1. 恒定比特
      • 2. 可变比特率
      • 3. 突发性数据
  • 24.2 拥塞
  • 24.3 拥塞控制
    • 24.3.1 开环拥塞控制
      • 1. 重传策略
      • 2. 窗口策略
      • 3. 确认策略
      • 4. 丢弃策略
      • 5. 许可策略
    • 24.3.2 闭环拥塞控制
      • 1. 背压
      • 2. 抑制分组
      • 3. 隐含信令
      • 4. 显式信令
  • 24.4 两个示例
    • 24.4.1 TCP拥塞控制
      • 1. 拥塞窗口
      • 2. 拥塞策略
        • (1) 慢启动:指数增长
        • (2) 避免拥塞:加性增加
        • (3) 拥塞检测:乘性降低
        • (4) 总结
    • 24.4.2 帧中继中的拥塞控制
  • 24.5 服务质量
    • 24.5.1 数据流特性
      • 1. 可靠性
      • 2. 延迟
      • 3. 抖动
      • 4. 带宽
    • 24.5.2 数据流类型
  • 24.6 改进QoS的技术
    • 24.6.1 调度
      • 1. 先进先出队列
      • 2. 优先权队列
      • 3. 加权公平队列
    • 24.6.2 通信量整形
      • 1. 漏桶
      • 2. 令牌桶
      • 3. 令牌桶与漏桶的结合
    • 24.6.3 资源预留
    • 24.6.4 许可控制
  • 24.7 综合业务
    • 24.7.1 信令
    • 24.7.2 数据流规范
    • 24.7.3 许可
    • 24.7.4 业务类型
    • 24.7.5 RSVP
      • 1. 多播树
      • 2. 基于接收方的预留
      • 3. RSVP报文
      • 4. 预留合并
      • 5. 预留方式
    • 24.7.6 综合业务存在的问题
  • 24.8 差分业务
      • 1. DS字段
      • 2. 逐跳行为
      • 3. 通信量调节器
  • 24.9 在交换网络中QoS
    • 24.9.1 帧中继中的QoS
      • 1. 访问速率
      • 2. 提交突发业务量
      • 3. 提交信息速率
      • 4. 超突发长度
      • 5. 用户速率
    • 24.9.2 ATM 中的QoS
      • 1. 类
      • 2. 用户相关属性
      • 3. 网络相关属性

拥塞控制和服务质量 congestion control and quality of service 这是两个紧密相连的问题:如果一个问题得到改善,另一个问题也会得到改善;忽视其中一个问题通常意味着另一个问题也被忽视在一个网络中,大多数防止或消除拥堵的技术也可以提高网络的服务质量

这些问题之所以推迟到现在才讨论,是因为它们不仅涉及一层,还涉及三层:数据链路层、网络层和传输层。现在讨论它们也是为了能够一次集中讨论这些问题、同一主题不需要多次讨论。这里还给出了一些不同层次的拥塞控制和服务质量的例子。


24.1 数据通信量

关注拥塞控制和服务质量的重要方面数据通信量 data traffic在拥塞控制中,尽量避免通信拥塞;在服务质量上,尽量为通信量创造合理的环境。因此,在讨论拥塞控制和服务质量之前,首先讨论数据通信本身。

24.1.1 通信量描述符

通信量描述符 traffic descriptors 描述数据流定性值。图24.用这些值描述通信量。
图24.1 通信量描述符

1. 平均数据速率

平均数据速率 average data rate 在一段时间内发送的数据位数除以该时间所包含的秒数。我们使用以下等式:
Averagedatarate = amountofdata time \textrm{Average data rate} = \dfrac{ \textrm {amount of data} }{ \textrm{time} } Averagedatarate=timeamount of data

平均数据速率是通信量的一个非常有用的特性,因为它表明通信量所需要的平均带宽

2. 峰值数据速率

峰值数据速率 peak data rate 定义了通信量的最大数据速率,如图24.1所示,它是 y y y 轴方向上的最大值。峰值数据速率是一个很重要的概念,因为它表明让通信量通过网络、且无须改变数据流的情况下,网络所需的峰值带宽

3. 最大突发长度

虽然峰值数据速率是很关键的,但是如果峰值持续时间很短,那么它通常可忽略不计。例如,如果数据正 1 Mbps 1\textrm{Mbps} 1Mbps 的速率稳定地传送,而突然以 2 Mbps 2\textrm{Mbps} 2Mbps 的峰值数据率传送了 1 ms 1\textrm{ms} 1ms ,网络也许可以处理这种情况。但是如果峰值速率持续 60 ms 60\textrm{ms} 60ms ,那么网络可能会出问题。最大突发长度 maximum burst size 一般是指以峰值速率传输通信量的最大时间长度 the maximum length of time the traffic is generated at the peak rate

4. 有效带宽

有效带宽 effective bandwidth 是指网络需要分配给通信流的带宽有效带宽是三个值的函数:平均数据速率、峰值数据速率和最大突发长度。有效带宽的计算过程非常复杂。

24.1.2 通信量特征值

根据需要,数据流可以用以下通信量特征值 traffic profiles 之一来表述:恒定比特率、可变比特率或突发性。如图24.2所示。

1. 恒定比特率

恒定比特率 constant-bit-rate, CBR 或固定速率的通信量模型中,具有恒定不变的数据速率。在这种类型的流中,平均数据速率和峰值数据速率是相同的,最大突发长度是无效的。对于一个网络而言,这种类型的通信量是可预知的,因而很容易处理。网络可以提前知道,要分配多少带宽给这种类型的流。

2. 可变比特率

可变比特率 variable-bit-rate, VBR 类型中,数据流的速率随时间发生平滑的、而非突然的或急剧的变化。在这种类型的流中,平均数据速率和峰值数据速率是不同的。最大突发长度通常是一个很小的值。与恒定比特率的通信量相比,这种类型的通信量更难处理,但是它一般不需要重新整形,这将在后面可以看到。

3. 突发性数据

突发性数据 bursty data 是指在很短的时间内数据速率突然发生了变化。例如,它可能在几微秒内从零猛增到 1 Mbps 1\textrm{Mbps} 1Mbps ,或从 1 Mbps 1\textrm{Mbps} 1Mbps 猛降为零。它也可能在这个值上保持一会儿。在这种类型的数据流中,平均比特率和峰值比特率非常不同,最大突发长度非常重要。对于网络,这是最难处理的一种通信量类型,因为其特征值是不可预知的。为了处理这种类型的通信量,网络通常需要使用重新整形技术 reshaping techniques ,对其进行重新整形。这种技术稍后将会看到。突发性通信量是网络中发生拥塞的主要原因之一


24.2 拥塞

拥塞 congestion分组交换网络 packet-switched network 中的一个重要问题。如果网络中的载荷 load(发送到网络中的分组数量),超过了网络的容量 capacity(网络中能处理的分组数量),那么在网络中就可能发生拥塞拥塞控制 congestion control 指的是控制拥塞、使载荷低于网络容量的机制和技术

为什么在网络中会发生拥塞?事实上,拥塞可能发生在任何涉及等待机制的系统之中 Congestion happens in any system that involves waiting 。例如,发生在高速公路上的拥塞是因为车流的某些异常,如在高峰期的事故,可能造成交通阻塞。在网络或者互联网络中也会发生拥塞,这是因为路由器和交换机中存在队列——在处理前、后保存分组的缓冲区。例如,路由器的每个接口中,都有输入队列和输出队列。当分组到达输入接口时,在将其转发前要经历三个步骤,如图24.3所示。

  1. 在等待检验时,将分组置于输入队列的尾部。
  2. 一旦分组到达了队列的前端,路由器的处理模块就将其从输入队列中移除,并运用路由表和目的地址来查找其路由。
  3. 将分组置于适当的输出队列中,等待发送。

    这里需要注意两个问题。第一 ,如果分组的到达速率高于分组的处理速率,那么输入列会变得越来越长。第二,如果分组的转发速率低于分组的处理速率,输出队列也会变得越来越长

拥塞控制包括了两个测试网络性能的要素:延迟 delay吞吐量 throughput 。图24.4说明了作为载荷函数的这两个性能度量

  • 延迟和载荷:注意,当载荷比网络容量小得多时,延迟 delay 最小。最小延迟是由传播延迟处理延迟所组成的,并且它们都可以忽略不计。然而,当载荷达到网络容量时,延迟就会急剧增加,因为我们现在需要将 队列中的等待时间(对于路径中的所有路由器) 添加到总延迟中。注意,当载荷大于网络容量时,延迟会变为无穷大
    如果这还不能说明问题,请考虑一下,在「几乎没有分组到达目的端」或「经过无穷大的延迟到达目的端」时队列的长度,此时队列变得越来越长。延迟会加重载荷,并因此会导致拥塞现象发生。当分组被延迟时,源端就会在没有收到确认的情况下重发分组,这个过程则会加重延迟和拥塞。
  • 吞吐量和载荷:在【计算机网络】第二部分 物理层和介质(3) 数据和信号中,将吞吐量定义为在 1 1 1 秒内通过一个节点的位数。可以将位换成分组、将节点换成网络,从而扩展这个定义,将网络吞吐量 throughput 定义为单位时间内通过网络的分组数量
    注意,当载荷小于网络容量时,吞吐量随载荷的增加成比例地增长。当载荷达到网络容量后,期望吞吐量保持恒定。但是实际情况恰好相反,吞吐量会急剧下降。原因是路由器丢弃了分组。当载荷超过网络容量时,队列饱和了,此时路由器不得不丢弃一些分组。丢弃分组并不能减少网络中分组的数量,因为当分组没有到达目的端时,源端就运用超时机制重发它们。

24.3 拥塞控制

拥塞控制是指在拥塞发生之前预防拥塞、或在拥塞发生之后消除拥塞的技术和机制。通常,我们把拥塞控制分为两大类:开环拥塞控制(预防)和闭坏拥塞控制(消除)。如图24.5所示。

24.3.1 开环拥塞控制

开环拥塞控制 open-loop congestion control 中,在拥塞发生之前,应用某种策略来预防拥塞现象的发生。在这些机制中,源端或目的端都可以处理拥塞控制。下面简要列出能预防拥塞的几种策略。

1. 重传策略

有时重发是不可避免的。如果发送方认为一个发送分组丢失或损坏,则该分组就需要重发。重发一般在网络上会增加拥塞现象,然而一个好的重传策略 retransmission policy 能预防拥塞,必须优化设计重传策略和重传定时器,使之具有高效率,并用来预防拥塞。例如,TCP所用的重传策略被设计用来防止和减轻拥塞。

2. 窗口策略

发送方窗口的类型也会影响拥塞。对拥塞控制而言,选择性重复窗口 Selective Repeat window 要优于回退N帧窗口 Go-Back-N window。在回退N帧窗口中,当一个分组的计时器到时,可以重发多个分组,尽管其中一些分组可能已安全与可靠地到达接收方,但这种重复会使拥塞更加严重。而选择性重复窗口试图发送那些被丢失或损坏的特定分组。

3. 确认策略

接收方使用的确认策略 acknowledgment policy 也可能影响拥塞。

  • 如果接收方并不对它所接收的每一个分组进行确认,则它会使发送方放慢发送速度,从而有助于预防拥塞。有些协议就是采用这种办法。
  • 接收方有一个要发送的分组或一个特定的计时器到时,接收方才发送一个确认。
  • 接收端可以决定每次对 N N N 个分组仅发送一个确认。

我们要知道确认也是网络中负载的一个部分,发送确认越少意味着网络的负载 load 越轻

4. 丢弃策略

路由器使用好的丢弃策略 discarding policy 可以预防拥塞,同时不破坏传输的完整性。例如,在声音传输中,如果在可能发生拥塞时丢弃那些不敏感的分组,则仍可保证声音的质量,并且还能预防或减轻拥塞现象的发生。

5. 许可策略

在虚电路网络 virtual-circuit networks 中,许可策略 admission policy 是一种服务质量机制,也能预防拥塞。在允许数据流进入网络之前,与数据流通路相连的交换机首先检查其资源需求,如果网络有拥塞或可能出现拥塞,路由器将拒绝建立虚电路

24.3.2 闭环拥塞控制

在拥塞发生之后,采用闭环拥塞控制 closed-loop congestion control 可以缓解拥塞状况。不同的协议采用了多种机制,下面对这几种机制进行介绍。

1. 背压

背压 backpressure 技术是一种拥塞控制机制。在这种技术中,一个拥塞点停止接收来自直接上行节点、或一些近邻节点的数据。这会引起上行节点或一些近邻节点发生拥塞,它们依此拒绝它们的上行节点或一些近邻节点的数据,依此类推。

背压是点到点拥塞控制,它从一点开始,然后传播,沿着数据流反方向到达源端背压技术仅用于虚电路网络——在虚电路网络中,每个节知道数据的流是来自它的上行节点。图24.6表示了背压的思想。

在图24.6中,节点 III 有了超出它处理能力的输入数据,它停止将某些分组放入输入缓存区中,并通知节点 II 降低传输速率。节点 II 由于降低输出数据流的速率,可能会拥塞。如果节点 II 拥塞,则它通知节点 I 降低传输速率,它也可能会形成拥塞。如果是如此,则节点 I 通知源端降低数据传输速率。这样可以及时减轻拥塞。注意:为了消除阻塞,对节点 III 的压力反向移动到摞端。

我们讨论过的 一些虚电路网络不使用背压策略。但是,在第一个虚电路网络X.25,使用过这策略。这种技术在数据报网络不可能实现,因为在这种类型的网络中,一个节点(路由器)没有关于上行节点的知识

2. 抑制分组

抑制分组 choke packet 是一个分组,该分组由节点发送给源端,通知它发生拥塞的情况。注意背压和抑制分组方法的不同:

  • 在背压方法中,警告从一个节点到它的上行节点,虽然警告可能最后到达源端。
  • 在抑制分组方法中,警告从已经发生拥塞的路由器直接传到源端,该分组经过的那些中间节点没被警告。

在ICMP中已看到过这种控制类型。当因特网中一个路由器被大量的IP数据报淹没时,它可能丢弃一些数据报,但它使用一个ICMP源站抑制报文通告源主机。警告报文直接发送给源站点,中间的路由器不进行任何处理。图24 .7表示抑制分组的思想。

3. 隐含信令

隐含信令 implicit signaling 中,拥塞节点或节点们 the congested node or nodes 与源端之间没有通信。源端能从其他有关征兆中,察觉出在网络某处有拥塞。例如,当源端发送多个分组,暂时还没有收到确认时,一种设想是网络发生了拥塞。在接收确认过程中发生的延迟现象,就可以认为网络发生了拥塞:源端应该降低发送速率。在后面讨论TCP拥塞控制时,将看到这种类型的信令。

4. 显式信令

发生拥塞的节点能发送一种显式信令 explicit signaling 通知源端或目的端发生了拥塞。但是,显式信令方法与抑制分组方法是不同的

  • 在抑制分组方法中,有一个单独的分组用于此目的;
  • 而在显式信令方法中,信号包含在携带数据的分组中

就像在帧中继拥塞控制中所看到的那样,显式信令也具有前向或后向特征。

  • 后向信令 backward signaling :将一个位设置在分组中,并使之向与拥塞发生方向相反的方向移动。该位提示源端网络发生了拥塞,并提示它需要放慢发送速度,以避免分组的丢失。
  • 前向信令 forward signaling :将一个位设置在分组中,并使之向发生拥塞的方向移动。该位提示目的端网络发生了拥塞。在此情况下,接收端能使用诸如「放慢确认发送速度的策略」来减轻拥塞。

24.4 两个示例

为了更好地理解拥塞控制的概念,我们举两个例子:一个是TCP中的拥塞控制(重传、窗口、确认、隐含信令),另一个是帧中继中的拥塞控制(显式信令)。

24.4.1 TCP中的拥塞控制

在【计算机网络】第五部分 传输层(23) UDP、TCP和SCTP中已讨论过TCP,现在说明TCP如何利用阻塞控制,避免或减轻网络中的拥塞。

1. 拥塞窗口

在(23) UDP、TCP和SCTP中,曾提到过流量控制,并试图讨论「如何解决接收方由于大量数据的到来而陷入瘫痪」的情况。须知,发送方窗口大小取决于接收方可用的缓冲空间 rwnd ,即假设只有接收方能够规定发送方的发送方窗口大小。在这里完全忽视了另一个实体——网络。如果网络无法以发送方创建的速度传递数据,它必须告诉发送方减慢发送速率。也就是说,除了接收方之外,网络应当是确定发送方窗口大小的第二个实体

现在,发送方窗口大小不仅取决于接收方,而且还取决于网络拥塞的情况。发送方有两种信息:接收方通告的窗口大小 receiver-advertised window, rwnd拥塞窗口大小 congestion window, cwnd ,实际的窗口大小是这两者中的最小者(实际的窗口大小 = min(rwnd, cwnd))。我们简要说明如何确定拥塞窗口大小

2. 拥塞策略

TCP处理拥塞的一般策略基于三个阶段:慢速启动(指数增长)、拥塞避免(加性增加)和拥塞检测(乘性减少)。在慢速启动阶段,发送方用很慢的传输速率开始,但迅速地增加到阈值 threshold 。在达到阈值时,为了避免拥塞而降低数据速率。最后,如果检测到拥塞,则发送方根据检测到拥塞的方式,返回慢启动或拥塞避免阶段 the sender goes back to the slow-start or congestion avoidance phase based on how the congestion is detected

(1) 慢速启动:指数增长

TCP拥塞控制所使用的一种算法称为慢速启动 Slow Start: Exponential increase 。这种算法也是基于「拥塞窗口的大小 cwnd 从一个最大段长度MSS开始」的思想。MSS是在连接建立期间,由「相同名称的选项 an option of the same name 」所确定的(最大段长度选项)。每次接收到一个确认时,窗口大小增加一个MSS值。正如其名,窗口是慢速启动,但是按指数规则增长的

为了说明这个思想,让我们观察图24.8。注意:为了使讨论更清晰,这里进行了三个简化。使用段的个数而不是字节的个数(好像每段仅有一个字节);假定 rwndcwnd 大得多,这样发送方窗口大小永远等于 cwnd ;还假定每段都是单独进行确认

  • 发送方以 cwnd= 1MSS 开始,这意味着发送方仅能发送一个段
  • 接收到段 1 1 1 的确认后,拥塞窗口增加 1 1 1cwnd 2 2 2 。这意味着现在可发送另外两个段。当接收到每一个确认时,窗口大小都增加 1MSS
  • 接收到段 2 , 3 2, 3 2,3 的确认后,拥塞窗口增加 2 2 2cwnd 4 4 4 。这意味着现在可发送另外四个段
  • 接收到段 4 , 5 , 6 , 7 4, 5, 6, 7 4,5,6,7 的确认后,拥塞窗口增加 4 4 4cwnd 8 8 8 。这意味着现在可发送另外八个段
  • 当所有 7 7 7 个段都被确认时,cwnd = 8MSS

如果我们按照(整个窗口中的所有段被确认的)传输次数观察 cwnd 的大小,则发现其速率是按指数规律增长如下所示:

需要指出的是,如果有被延迟的 ACK ,则窗口大小的增长小于 2 2 2 的幂 if there is delayed ACKs, the increase in the size of the window is less than power of 2

慢速启动不能一直继续下去,拥塞窗口大小按指数规律增长,直到到达阈值,就必须停止该阶段。发送方保存一个称为慢速启动阈值 slow-start threshold, ssthresh 的变量,当「拥塞窗口中的字节(这里简化为段数)」达到这个阈值时,慢速启动阶段结束、而下一个阶段开始。在大多数实现中,ssthresh 一直是 65535 65535 65535 字节。

(2) 拥塞避免:加性增加

如果我们以慢速启动算法开始,则拥塞窗口大小按指数规律增长。为了在拥塞发生之前避免拥塞,必须降低指数增长的速度。TCP定义了另一个算法,称为拥塞避免 congestion avoidance ,这个算法是加性增加 additive increase 、而非指数增加。当拥塞窗口的大小达到慢速启动的阈值时,慢速启动阶段停止,加性增加阶段开始。

在这个算法中,每次整个窗口所有段都被确认(一次传输)时,拥塞窗口才增加 1 1 1 。为了说明这个概念,将这个算法应用到与慢速启动相同的情况中,尽管我们将看到,拥塞避免算法通常在窗口的大小远远大于 1 1 1 时启动 the congestion avoidance algorithm usually starts when the size of the window is much greater than 1 。图24.9表示这个思想。在这种情况下,发送方接收到「对一个完整窗口大小段的那些确认」后,窗口大小才增加一个段。即在拥塞避免算法中,拥塞窗口大小是加性增加的,直到检测到拥塞

如果我们按照传输次数观察 çwnd 的大小,则发现其速率是按加性规律增长,如下所示:

(3) 拥塞检测:乘性减少

如果发生拥塞,拥塞窗口的大小必须减小发送方能推测出发生拥塞现象的唯一方法,是需要重传段 The only way the sender can guess that congestion has occurred is by the need to retransmit a segment 。可是重传是在两种情况下发生:重传计时器到时接收到了三个 ACK 。在这两种情况下,阈值就下降一半,即乘性减少 multiplicative decrease 。大多数TCP实现包含两个反应:

  1. 如果计时器到时,那么存在着非常严重的拥塞的可能性——一个段可能己在网络中丢失,并且没有关于该发送段的消息。在这种情况下,TCP做出强烈的反应:
    a. 设置阈值为当前拥塞窗口大小的一半 ssthresh = cwnd / 2
    b. 设置 cwnd 为一个段的大小 cwnd = MSS / 2
    c. 启动慢速启动阶段。
  2. 如果接收到三个 ACK ,那么存在着轻度拥塞的可能性——一个段可能已丢失,但自从接收到三个 ACK 后,有一些段可能已安全到达。这称为快速传送和快速恢复 fast transmission and fast recovery 。在这种情况下,TCP做出轻度的反应:
    a. 设置阈值为当前拥塞窗口大小的一半 ssthresh = cwnd / 2
    b. 设置 cwnd 为阈值(有些实现是阈值加上三个段),注意先后顺序
    c. 启动拥塞避免阶段。

用下列方法之一对拥塞检测做出反应:

  • 如果检测出计时器到时,那么一个新的慢速启动阶段开始。
  • 如果检测出三个 ACK ,那么一个新的拥塞避免阶段开始。

(4) 总结

在图24.10中,概括了TCP的拥塞策略与三个阶段之间的关系。

在图24.11中给出了一个例子。假定最大窗口大小 ssthresh 32 32 32 个段,阈值设置为 16 16 16 个段(最大窗口的一半)。在慢速启动阶段,窗口大小从 1 1 1 开始按指数规律增长,直到它达到阈值。当它达到阈值后,拥塞避免加性增加)过程允许窗口大小线性增长,直到计时器到时或到达最大窗口大小。

在图24.11中,当窗口大小为 20 20 20 时,计时器到时。此时,进入乘性减少过程,将阈值设置为当前窗口大小的一半。当计时器到时,当前窗口大小是 20 20 20 ,因此现在阈值是 10 10 10 。TCP再次进入慢速启动,并置窗口大小为 1 1 1 。当到达新的阈值时,TCP进入加性增加阶段。当窗口大小为 12 12 12 时,三个 ACK 事件发生。再次进入乘性减少过程,阈值和窗口大小设置为 6 6 6 ,这时TCP进入加性增加阶段,该阶段一直维持到另一个计时器到时、或者另外三个 ACK 事件发生为止。

24.4.2 帧中继中的拥塞控制

帧中继网络中的拥塞,会导致吞吐量降低和延迟增加,高吞吐量和低延迟是帧中继协议的主要目标。帧中继协议没有流量控制机制。另外,帧中继允许用户传送突发性数据。这意味着,帧中继网络有可能因为通信量过大、而发生拥塞现象,因此需要有拥塞控制机制。

为了避免拥塞,帧中继协议在帧中利用 2 2 2 个位,明确地提示源端和目的端拥塞的发生(显式信令)。

  • 后向显式拥塞通知 backward explicit congestion notification, BECN 位提示发送方网络中的拥塞情况。因为帧是从发送方传送出来的,有人可能问这是如何实现的。实际上有两种方法:交换机利用来自接收方的响应帧(全双工模式);或者为了特定的目的,交换机可使用一个预定义连接 DLCI=1023 来发送专门的帧。发送方仅通过减小数据速率,对该提示信息做出响应。图24.12说明了运用BECN的情况。
  • 前向显式拥塞通知 forward explicit congestion notification, FECN 位是用来提示接收方网络中拥塞的情况。有可能会出现「接收方不能采取任何措施来减轻拥塞」的情况。但是,帧中继协议假定:发送方和接收方能相互通信,并在较高层使用某种类型的流量控制机制。例如,如果在较高层有确认机制,接收方就能延迟发送确认,这样就可以迫使发送方放慢发送速度。图24.13说明了运用FECN的情况。

当两个端点运用帧中继网络进行通信时,可能会出现四种与拥塞有关的情况。图24.14说明了这四种情况、以及FECN和BECN的值。


24.5 服务质量

服务质量 quality of service , QoS 是一个网络互联问题,对该问题的讨论已经远远超出对它的定义。可以非形式地、将服务质量定义为数据流所追求的某种目标

24.5.1 数据流特性

按传统的观点,数据流具有四种特性:可靠性、延迟、抖动和带宽,如图24.15所示。

1. 可靠性

可靠性 reliability 是数据流所需要的一个特性。缺乏可靠性意味着分组或确认的丢失,这些都必须通过重传来弥补。然而,应用层程序对可靠性的敏感程度是不同的。例如,电子邮件、文件传输和因特网访问与电话或音频会议相比,保证其可靠传输更为重要。

2. 延迟

源端到目的端的延迟 delay 是另一个数据流特性。此外,不同的应用对延迟的容许程度是不同的。在此情况下,电话、音频会议、视频会议和远程登录都需要最小的延迟,但是在文件传输或电子邮件中,延迟并不那么重要。

3. 抖动

抖动 jitter属于同一数据流的分组延迟的变化。抖动被定义为分组延迟的变化,较高的抖动意味着在延迟之间的差异较大,而低的抖动意味着差异很小。

例如,如果 4 4 4 个分组离开的时间分别是 0 , 1 , 2 , 3 0, 1, 2, 3 0,1,2,3 ,而到达的时间分别是 20 , 21 , 22 , 23 20, 21, 22, 23 20,21,22,23 ,则它们都有相同的延迟为 20 20 20 。另一方面,如果上述 4 4 4 个分组的到达时间分别是 21 , 23 , 21 , 28 21, 23, 21, 28 21,23,21,28 。则它们延迟是不同的: 21 , 22 , 19 , 24 21, 22,19, 24 21,22,19,24 。对于音频和视频的应用,前者是完全可接受的,而后者是不能接受的。只要延迟对所有的分组都是相同的,分组以短或者长的延迟到达,无关紧要

在(29)中,将看到多媒体通信如何处理抖动。如果抖动高,那么为了使用接收到的数据,就需要执行一些动作。

4. 带宽

不同的应用需要不同的带宽。在视频会议中需要发送数百万比特率来刷新彩色屏幕,但在一封电子邮件中的全部位的个数,甚至都不到一百万。

24.5.2 数据流类型

基于数据流的特性,可将数据流分成不同的组,每组都有相似的特性。这种分类方法既不够规范也不够普遍。一些诸如ATM之类的协议定义了类型的概念,稍后可以看到这一点。


24.6 改进QoS的技术

在第24.5节中,根据数据流的特性对QoS进行了定义。本节将讨论一些用于改进服务质量的方法。这里简要地讨论四种常用方法:调度、通信量整形、许可控制和资源预留

24.6.1 调度

来自不同数据流的分组到达交换机或路由器,并由它进行处理。一种好的调度技术,会以公平合理的方式来对待不同的数据流。现在已经设计了多种调度技术用来改进服务质量,在这里讨论其中的三种技术:FIFO队列、优先权队列和加权公平队列

1. 先进先出队列

先进先出 first-in first-out, FIFO 队列中,分组在缓冲区(队列)中等待,直到节点(路由器或交换机)准备处理它们为止。如果平均到达速率高于平均处理速率,那么队列将被填满,新的分组将被丢弃。FIFO队列和那些必须在公共汽车站等待汽车的人类似。图24.16说明了FIFO队列的概念。

2. 优先权队列

优先权队列 priority queuing 中,首先给不同的分组分配一个不同的
到达的优先权类。每个优先权类都有自己的队列,在最高优先权队列中的分组首先得到处理,而最后才对最低优先权队列中的分组进行处理。注意:系统不停地为一个队列提供服务,直到它变空为止。图24.17说明了,具有两个优先权级别的优先权队列(为了简单起见)。

与FIFO队列相比,优先权队列能提供更好的QoS,因为具有较高优先权的通信量(如多媒体),能用较少的延迟到达目的端。但是,优先权队列也有潜在的缺点——如果在高优先权队列中有持续的通信量,那么处于较低优先权队列中的分组将永远得不到处理,这种情形称为"饥饿" starvation

3. 加权公平队列

较好的调度算法是加权公平队列 weighted fair queuing 。在这种技术中,分组仍然被分成不同的类,并且属于不同的队列。然而,队列是基于队列的优先权来分配权重的,较高的优先权就意味着具有较高的权重。系统以轮换方式来处理每个队列中的分组,所处理的分组的数量等于相应队列的权重。例如,如果这些权重是 3 , 2 , 1 3, 2, 1 3,2,1 ,那么就对第一个队列中的 3 3 3 个分组、第二个队列中的 2 2 2 个分组和第三个队列中的 1 1 1 个分组进行处理。如果系统并没有给不同类指定不同的权重,那么所有的权重就是相等的。这就是加权公平队列的原理。图24.18以三个类为例说明了这种技术。

24.6.2 通信量整形

通信量整形 traffic shaping 是一种控制「发送到网络中的通信量和速率」的机制。通信量整形有两种技术:漏桶和令牌桶。

1. 漏桶

如果桶在底部有一个小洞,只要桶中有水,水便从桶中以不变的速率漏下。如果桶中有水,水漏的速率并不依赖于将水倒入桶中的速率,即输入速率可以发生变化,但是输出速率保持恒定。同样,在网络中一种被称为漏桶 leaky bucket 的技术,能消除突发性通信量。将突发性大块数据存储到桶中,然后以平均速率发送出去。图24.19说明了漏桶和其效果。

在图24.19中,假设网络为每台主机都设定了 3 Mbps 3\textrm{Mbps} 3Mbps 的带宽。使用漏桶对输入通信量进行整形,是为了使通信量符合这个设定的带宽。在图24.19中,主机以 12 Mbps 12\textrm{Mbps} 12Mbps 的速率发送了 2 2 2 秒的突发性数据,数据一共是 24 M 24\textrm{M} 24M 位。主机在之后的 5 5 5 秒内没有任何反应,然后以 2 Mbps 2\textrm{Mbps} 2Mbps 的速率发送数据,持续时间为 3 3 3 秒,此时的全部数据为 6 M 6\textrm{M} 6M 位。主机在 10 10 10 秒内总共发送了 30 M 30 \textrm{M} 30M 位的数据。在这同样的 10 10 10 秒内,漏桶以 3 Mbps 3\textrm{Mbps} 3Mbps 的速率发送数据来使通信量保持平稳。

如果没有漏桶,因为该主机占用了比分配给它的更大的带宽,它开始所发送的突发性数据可能已经导致网络拥塞。漏桶还可以避免拥塞。做个类比,以高峰期间(突发性通信量)的高速公路为例,如果往返者们能错开他们的工作时间,那么高速公路上的拥塞状况就可以得到避免。

简单的漏桶实现过程如图24.20所示。FIFO队列保存了分组如果这个通信量由固定大小的分组(例如 ATM 网中的信元)组成,那么在每个时钟单位时间内,进程从队列中移除固定数量的分组

如果通信量是由变长分组组成的,那么固定输出速率必须是基于字节个数或位个数。以下是变长分组的算法:

  1. 在计时开始时,将计数器初始化为 n n n
  2. 如果 n n n 比分组的长度大,就发送分组,并将计数器的值减去分组的长度。重复该步骤,直

相关文章