这篇文章是学习中科大自动化系郑烇老师《计算机网络》MOOC的笔记。课程录像可以在 这里 观看,教材是《计算机网络-自顶向下方法(第7版)》,课件可以在 这里 下载。

本篇内容对应课程录像的 P8 1.6 分组延时、丢失和吞吐量,欢迎讨论交流。

分组交换相对于电路交换,是比较适合于计算机系统通信的数据交换方式。但是任何事物都有两面性,分组交换在成就了计算机网络的同时,也带来了分组丢失和延时等问题。

分组丢失和延时是怎样发生的?

路由器中分组队列的长度是有限的。如果路由器接收分组的速率超过了链路输出的能力,后来的分组就会在队列中等待前面分组发送之后再传输;如果等待的时间太长或队列满额,路由器将会放弃传输收到的分组。

分组延迟

分组延迟主要是指数据包在网络中必要的传输时间以及除此之外额外花费的时间。它主要可以分为四种:

  • 节点处理延迟:路由器收到分组后需要对其做一些必要的处理,会花费少量时间,一般不高于微妙级别;

  • 排队延迟:分组在路由器的输出链路上等待发送的时间,延迟的长短取决于网络拥塞的情况;

    • 排队延迟 tqueuet_{queue} 可以用流量强度 II 来刻画,其公式可以表示为

    I=LaRI=\frac{La}{R}

    其中a是分组到达队列的平均速率。II一般在[0,1][0, 1]范围内取值,tqueueIt_{queue}-I曲线随II的增加几乎呈现指数级增长,也就是说在流量强度大于1时,延迟趋向于无穷大,这回导致网络性能出现严重下滑甚至崩溃。因此,设计网络系统时要确保 II 尽可能不大于1.

  • 传输延迟传播延迟:想象路由器是一个个bit逐一发送的,假设带宽 R=1MbpsR = 1Mbps,就意味着发送一个bit需要 10610^{-6} 秒。分组长度为LL,则将分组全部发送出去所需时间即为 L/RL/R,就是正常的传输延迟。但是,在一个bit从路由器发出后,还需要跨过空间的距离到达接收方,这就产生了传播延迟。假设源端到目标端的空间距离为dd,电磁波在介质中的传播速度为vv,则传播延迟可以用 d/vd/v 计算,一般是几微秒到几百毫秒。

需要注意传输延迟(Transmition)和传播延迟(Propagation)的区别。
老师在讲课时举了一个十分形象的例子:高速公路上行驶的一辆辆汽车就相当于一个bit,收费站相当于链路上的节点。车在收费站缴费的时间代表路由器发送一个bit的传输延迟,车从一个收费站驶向下一个收费站的时间代表传播延迟。远距离传输就像是整个车队先后通过收费站之后,还要经过一段时间才能抵达下一个收费站;但是在局域网的范围内,两个收费站一般都相隔很近,有可能就会出现尾车还在前一收费站等候缴费,而头车已经抵达下一个收费站的情况。

Linux和Windows都有一个TraceRoute诊断工具可以用来测试网络延迟,它利用了ICMP协议以追踪测试分组在网络中的传输路径和时间。

具体来说,TraceRoute在测试时会发送若干测试数据包,数据包IP报文头部有一个TTL(Time To Live,生存时间)字段。每到一个节点,TTL将会递减,减为0时,路由器将抛弃分组并向源主机发送ICMP报文消息,包括路由器的IP地址和分组到达那里的时间。源主机发送一系列TTL从小到大的分组,就知道了在传输到目标主机路径上各个节点的地址和传输时间;最后发送一个TTL足够大,但端口号设置为无应用监听的分组,于是目标主机将抛弃这个分组,同样发送给源主机一个“目标端口不可达”的报文。这便是整个TraceRoute工作的基本流程。

分组丢失

绝大多数分组丢失的原因是链路节点的缓冲队列满被丢弃。丢失的分组可能会被上一个节点或源主机重传;但是也有可能不重传。这取决于链路和源主机在网络层和链路层的的可靠性。

吞吐量

在源主机和目标主机之间传输有效数据的速率。分为瞬间吞吐量和平均吞吐量。吞吐量存在“短板效应”,限制端到端吞吐的链路被称为瓶颈链路。