因特网能够看成是一种基础设施,该基础设施为运行在端系统上的分布式应用提供服务。在理想情况下,我们希望因特网服务能够在任意两个端系统之间随心所欲地瞬间移动数据而没有任何数据丢失。然而,这是一个高级目标,实践中难以达到。与之相反,计算机网络必定要限制在端系统之间的吞吐量(每秒能够传送的数据量),在端系统之间引入延迟,而且实际上也会丢失分组。
分组交换网中的时延概述
分组从一台主机(源)出发,通过一系列路由器传输,在另一台主机(目的地)中结束它的历程。当分组从一个节点(主机或路由器)沿着这条路径到后继节点(主机或路由器),该分组在沿途的每个节点经受了几种不同类型的时延。这些时延最为重要的是节点处理时延(nodal processing delay)、排队时延(queuing delay)、传输时延(transmission delay)和传播时延(propagation delay),这些时延总体累加起来是节点总时延(total nodal delay)。
时延类型
- 处理时延:检查分组首部和决定将该分组导向何处所需要的时间是处理时延的一部分。处理时延也能够包括其他因素,如检查比特级别的差错所需要的时间,该差错出现在从上有节点向路由器A传输这些分组比特的过程中。高速路由器的处理时延通常是微秒或更低的数量级。在这种节点处理之后,路由器将该分组引向通往路由器B链路之前的队列。
- 排队时延:在队列中,当分组在链路上等待传输时,它经受排队时延。一个特定分组的排队时延长度决定于先期到达的正在排队等待向链路传输的分组数量。如果队列是空的,并且当前没有其他分组正在传输,则该分组的排队时延为0。另一方面,如果流量很大,并且许多其他分组也在等待传输,该队列时延将很长。我们将很快看到,到达分组期待发现的分组数量是到达该队列的流量的强度和性质的函数。实际的排队时延可以是毫秒级到微秒量级。
- 传输时延:假定分组以先到先服务方式传输——这在分组交换网中是常见的方式,仅当所有到达的分组被传输后,才能传输刚到达的分组。用L比特表示该分组的长度,用Rbps(即b/s)表示从路由器A到路由器B的链路传输速率。例如,对于一条10Mbps的以太网链路,速率R=10Mbps;对于100Mbps的以太网链路,速率R=100Mbps。传输时延是L/R。这是将所有分组的比特推向链路所需要的时间。实际的传输时延通常在毫秒到微秒量级。
- 传播时延:一旦一个比特被推向链路,该比特需要向路由器B传播。从该链路的起点到路由器B传播所需要的时间是传播时延。该比特以该链路的传播速率传播。该传播速率取决于该链路的物理媒介(即光纤、双绞铜线),其速率范围是$2\times 10^8$~$3\times10^8m/s$,这等于或略小于光速。该传播时延等于两台路由器之间的距离除以传播速率。一旦该分组的最后一个比特传播到节点B,该比特及前面的所有比特被存储于路由器B。整个过程将随着路由器B执行转发而持续下去。在广域网中,传播时延为毫秒量级。
传输时延和传播时延的比较:传输时延是路由器推出分组所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。另一方面,传播时延是一个比特从一台路由器传播到另一台路由器所需要的时间,它是两台路由器之间距离的函数,而与分组长度或链路传输速率无关。
排队时间和丢包
与其他3项时延($d_{proc}、d_{trans}和d_{prop}$)不同的是,排队时延对不同的分组可能是不同的。例如,如果10个分组同时到达空队列,传输的第一个分组没有排队时延,而传输的最后一个分组经受相对大的排队时延。因此,当表征排队时延时,人们通常使用统计量来度量,如平均排队时延、排队时延的方差和排队时延超过某些特定值的概率。
什么时候排队时延大,什么时候不大呢?该问题的答案很大程度取决于流量到达该队列的速率、链路的传输速率和到达流量的性质,即流量是周期性到达还是以突发形式到达。为了更深入地领会某些要点,令a表示分组到达队列的平均速度(a的单位是分组/秒,即pkt/s)。R是传输速率,即从队列中推出比特的速率(以bps即b/s为单位)。为了简单起见,假定所有分组都是由L比特组成的。则比特到达队列的平均速率是La bps。最后,假定该队列非常大,因此它基本能容纳无限数量的比特。比率La/R被称为流量强度(traffic intensity),它在估计排队时延的范围方面经常起着重要的作用。如果$La/R>1$,则比特到达队列的平均速率超过从该队列传输出去的速率。在这种不幸的情况下,该队列趋向于无限增加,并且排队时延将趋向于无穷大!因此,流量工程中的一条金科玉律是:设计系统时流量强度不能大于1。
现在考虑$La/R\leqq 1$时的情况。这时,到达流量的性质影响排队时延。例如,如果分组周期性到达,即每L/R秒到达一个分组,则每个分组将到达一个空队列中,不会有排队时延。另一方面,如果分组以突发形式到达而不是周期性到达,则可能会有很大的平均排队时延。例如,假定每(L/R)N秒同时到达N个分组。则传输的第一个分组没有排队时延;传输的第二个分组就有L/R秒的排队时延;更一般地,第n个传输的分组具有(n-1)L/R秒的排队时延。
到达队列的过程是随机的,即到达并不遵循任何模式,分组之间的时间间隔是随机的。在这种更为真实的情况下,量La/R通常不足以全面地表征时延的统计量。不过,直观地理解排队时延的范围很有用。特别是,如果流量强度接近于0,则几乎没有分组到达并且到达间隔很大,那么到达的分组将不可能在队列中发现别的分组。因此,平均排队时延将接近0。另一方面,当流量强度接近1时,当到达速率超过传输能力时将存在时间间隔,在这些时段中将形成队列。当到达速率小于传输能力时,队列的长度将缩短。无论如何,随着流量强度接近1,平均排队长度变得越来越长。
丢包
在上述讨论中,我们已经假设队列能够容纳无穷多的分组。在现实中,一条链路前的队列只有有限容量,尽管排队容量极大地依赖于路由器的设计和成本。因为该排队容量是有限的,随着流量强度接近于1,排队时延并不真正趋向于无穷大。相反,到达的分组将发现一个满的队列。由于没有地方存储这个分组,路由器将丢弃(drop)该分组,即该分组将会丢失(lost)。
从端系统的角度看,上述丢包现象看起来是一个分组已经传输到网络核心,但它绝不会从网络发送到目的地。分组丢失的比例随着流量强度增加而增加。因此,一个节点的性能常常不仅根据时延来度量,而且根据丢包的概率来度量。
端到端时延
前面的讨论一直集中在节点的时延上,即在单台路由器上的时延。我们现在考虑从源到目的地的总时延。假定在源主机和目的主机之间有N-1台路由器。我们还要假设该网络此时是无拥塞的(因此排队时延是微不足道的),在每台路由器和源主机上的处理时延是$d_{proc}$,每台路由器和源主机的输出速率是R bps,每条链路的传播时延是$d_{prop}$。节点时延累加起来,得到端到端时延:
$d_{end-end}=N(d_{proc}+d_{trans}+d_{prop})$
同样,式中$d_{trans}=L/R$,其中L是分组长度。
Traceroute
端系统、应用程序和其他时延
计算机网络中的吞吐量
除了时延和丢包,计算机网络中另一个至关重要的性能测度是端到端吞吐量。为了定义吞吐量,考虑从主机A到主机B跨越计算机网络传送一个大文件。例如,也许是从一个P2P文件共享系统中的一个对等方向另一个对等方传送一个大视频片段。在任何时间瞬间的瞬时吞吐量(instantaneous throughput)是主机B接收到该文件的速率(以bps计)如果该文件由F比特组成,主机B接收到所有F比特用去T秒,则文件传送的平均吞吐量(average throughput)是F/Tbps。对于某些应用程序如因特网电话,希望具有低延迟和在某个阈值之上的一致的瞬时吞吐量。对于其他应用程序,包括涉及文件传送的那些应用程序,时延不是决定性的,但是希望具有尽可能高的吞吐量。