网络性能:时延、队列、丢包与吞吐量
时延
当从一个节点到后继节点,一个分组在沿途的每个节点都经受了几种不同类型的时延,包括节点处理时延(nodal processing delay)、排队时延(queuing delay)、传输时延(transmission delay)、传播时延(propagation delay)。
处理时延包括了检查分组首部和决定分组去向所需要的时间,以及检查差错的时间。
分组交换机的每条链路都有一个输出缓存/输出队列(output buffer / output queue)。如果到达的分组需要传输到某条链路,但发现该链路正忙于传输其它分组,该分组必须在输出缓存中等待。因此,除了存储转发时延以外,分组还要承受输出缓存的排队时延。由于缓存空间的大小是有限的,到达的分组可能发现该缓存已被填满,这种情况下将出现丢包(packet loss),到达的分组或已经排队的分组将被丢弃。
填满、排空与溢出分组队列
输出链路正在传输P0,后面有三个缓存位置。让分组到达、完成传输,或者运行一次过载:分组到达速度是输出发送速度的两倍。观察谁先离开,以及分组何时被丢弃。
P0正在输出链路上传输,缓存为空。让一些分组到达吧。
分组通常是以FCFS(First-Come-First-Served)的方式传输,只有当所有已经到达的分组被传输之后,才能传输新到达的分组。传输时延就是将所有分组推向输出链路所需的时间。
传播时延是指从链路的起点到下一个路由器传播所需的时间。
假设、、和分别表示处理时延、排队时延、传输时延和传播时延,那么节点总时延为
知识测验
吞吐量与瓶颈链路
时延回答“一个分组多久到达”,吞吐量(throughput)回答“单位时间有多少数据到达”。链路速率是链路能够发送比特的速度,端到端吞吐量则取决于整条路径,并不等于所有链路速率之和。
例如,一个持续传输经过20 Mbps、5 Mbps与10 Mbps三条链路。忽略其他流量与协议开销,最快也只能以5 Mbps持续交付数据。最慢的链路是瓶颈(bottleneck);把20 Mbps链路升级到100 Mbps,不能消除5 Mbps链路的限制。
这是理想上界,不是实际吞吐量的保证。共享链路上的其他流量、丢包以及协议开销都可能降低实际交付速度。也要区分单位:1字节等于8比特,5 Mbps不是每秒5 MB。
把一次升级用在瓶颈链路上
持续传输经过三条链路。你最多能把其中一条升级到10 Mbps,目标是端到端容量达到至少5 Mbps。更换升级位置时,原链路恢复原速率。忽略其他流量与协议开销。
2 Mbps链路仍限制整条路径。提高其他链路的速率不能消除这个限制。
知识测验
建立时延预算
一个12,000比特的分组使用3 Mbps链路,处理时延1 ms、排队时延7 ms、传播时延10 ms。计算传输时延与节点总时延。再只把链路速率加倍,计算新的总时延。
用Python估算传输时间
编写一个简短的Python程序,已知rates_mbps = [12, 4, 8]、file_bytes = 2_000_000。用min求理想瓶颈速率,将字节换算为比特,再打印速率与理想时间。Mbps按每秒1,000,000比特计算,忽略其他流量、启动时延与开销。预期输出:4 4.0。