我是计算机网络新手,正在阅读“计算机网络”第一章(詹姆斯F.黑罗斯和基思W.Ross)。他们指出,节点延迟是排队、传输、传播和处理延迟的总和。我有以下疑问--如果一个包1目前正在路由器上进行处理(并且说它还有10毫秒的处理时间)。当时,另一个包2到达了这个路由器。这个包会立即开始处理吗?还是将此数据包存储10 to (直到包1完成处理),然后开始处理?
发布于 2021-02-01 17:38:04
硬件和CPU之间存在着大量的交互,所以没有简单的答案,这取决于特定路由器的能力。许多路由器可以在硬件中转发数据包,因此CPU根本不涉及。
记住,接口是串行设备,因此每次只能在单个接口上发送/接收一个数据包。
此外,“处理”可能意味着许多事情。一个包在输出接口上传输之前可以经过几个“步骤”。
在高端路由器上,如果数据包同时到达两个接口,是的,它们可以同时被“处理”。但是,如果它们都需要被发送出相同的接口,其中一个将不得不等待(被放入队列),直到另一个完成发送。
发布于 2021-02-02 06:27:38
基本上没有一个正确的答案,这取决于实施。随着计算机网络的发展,对速度的需求变得至关重要,因此实现数据包处理数据平面的每个人都能提供最大的吞吐量。一些路由器的数据平面是用专用硬件(如BCM芯片系列、EZ芯片等)来实现的。我最熟悉的是BCM芯片,它有一个包处理流水线,它有专门的块来处理以太网终端、路由、出口包处理,每一个时钟周期,一个数据包进入流水线的下一阶段,一个新的数据包可以进入流水线开始处理。这也意味着,每一个时钟周期,一个新的包正在排除最后的流水线阶段,进入线路。部分路由器数据平面完全在软件中实现。我知道一个新的改进软件实现,它支持在通用CPU上(几乎)同时处理多个数据包,它使用一个名为VPP ()的软件,该软件通常利用一种特殊的NIC驱动软件DPDK ( Development )覆盖内核中断模式处理,而是连续轮询NIC,以便直接将数据包发送到用户空间,以尽可能快地开始它们的处理。
发布于 2021-02-01 17:55:37
一般来说,路由器可以同时处理多个数据包。通常情况下,有多个接口,所以许多数据包甚至可以同时接收和传输。
然而,并不是所有的路由器都能同时转发多个数据包。用于这样做的资源可能是有限的,以便在任何给定的时间只有效地处理单个分组。如果处理是由CPU完成的,并且只有一个核心(=在任何给定时刻执行单个线程),则处理仅限于单个数据包。
请注意,数据包处理通常不是原子过程,可能在几个阶段发生。对于不同的数据包,这些阶段可能会重叠,因此这在很大程度上取决于您对“同时处理”的定义。
顺便说一句,对于任何当前的硬件,即使是非常低端,10 milli_seconds也是_ages。即使是消费者级硬件转发的延迟远远低于1ms,严重的硬件很容易运行在_micro_second范围内(例如路由L3交换机的延迟低于2平方英里S)。
https://networkengineering.stackexchange.com/questions/72373
复制相似问题