路由器可以同时处理两个数据包吗?

网络工程 路由
2022-03-02 08:15:11

我是计算机网络的新手,正在阅读计算机网络的第 1 章(作者 James F. Kurose 和 Keith W.Ross)。他们提到节点延迟是排队、传输、传播和处理延迟的总和。我有以下疑问 - 如果数据包 1 当前正在路由器上处理(并说它还有 10 毫秒的处理时间)。此时,另一个数据包 2 到达此路由器。是否会立即开始处理此数据包?或者这个数据包会被存储 10 毫秒(直到数据包 1 完成处理)然后开始处理?

3个回答

硬件和CPU之间有很多交互,所以没有简单的答案,要看具体路由器的能力。许多路由器可以在硬件中转发数据包,因此根本不涉及 CPU。

请记住,接口是串行设备,因此您一次只能在一个接口上发送/接收一个数据包。

此外,“处理”可能意味着很多事情。数据包在传出接口上传输之前可以经过几个“步骤”。

在高端路由器上,如果数据包同时到达两个接口,是的,它们可以同时被“处理”。但是,如果它们都需要从同一个接口发送出去,则一个必须等​​待(放入队列中)直到另一个完成发送。

基本上没有一个正确的答案,这取决于实施。随着计算机网络的发展,对速度的需求变得至关重要,因此每个实施数据包处理数据平面的人都会蓬勃发展以提供最大的吞吐量。一些路由器数据平面是使用专用硬件(例如 BCM 芯片系列、EZ 芯片等)实现的一个数据包进入管道的下一个阶段,一个新的数据包可以进入管道开始处理。这也意味着每个时钟周期都有一个新数据包从最后的流水线阶段输出到线路中。一些路由器数据平面完全用软件实现。

通常是的,路由器可能能够同时处理多个数据包。通常,有多个接口,因此甚至可以同时接收和发送多个数据包。

然而,并不是所有的路由器实际上都可以同时转发多个数据包。这样做的资源可能是有限的,因此在任何给定时间仅有效地处理单个数据包。如果处理由 CPU 完成并且只有一个内核(= 在任何给定时刻执行的单个线程),则处理仅限于单个数据包。

请注意,数据包处理通常不是原子过程,可能分几个阶段进行。对于不同的数据包,这些阶段可能会重叠,因此这在很大程度上取决于您对“同时处理”的定义。

顺便说一句,10毫秒对于任何当前的硬件来说都是老化的,即使是非常低端的硬件。即使是消费级硬件转发的延迟也远低于 1 毫秒,严重的硬件很容易在微秒范围内运行(例如,延迟低于 2 微秒的路由 L3 交换机)。