以太网发展到如今,已经出现了 400Gbps 的传输速度了。在这个传输速度下,实现无阻塞转发,需要达到的转发性能要达到 579.2Mpps x 端口数,要实现无阻塞转发所需要的背部带宽达到 800Gbps x 端口数。没有任何已知的系统总线能提供如此大的带宽。
那么,高速转发是如何实现的呢?
首先,将问题分解,一次转发分解成多个动作,然后看这些动作如何实现。
第一,网络接口收到数据包。这里,计算机主机的做法是使用中断进行通知。然而路由器是专门的硬件,它没有除了转发数据包以外的任务。因此它不需要使用中断。而是直接CPU不停的轮询。不仅仅如此,它为每一个端口分配一个CPU。为了降低成本,提高速度,这个专门的干活的CPU通常是一块 ASIC 而不是一块通用 CPU。这个专门的芯片就叫转发引擎吧。他就是专门设计的一个只用来干包转发这一个活的CPU。这样就解决了发收包的瓶颈。
第二,对每个收到的包,要进行查表,决定转发的目的端口。对交换机来说,是以 MAC 地址查表,对三层交换机或路由器来说,是以IP地址进行查表。那么查表速度就成了关键。对内存来说,他的输入是内存地址,输出是该地址的内容,但是,有另一种内存,叫 CAM , Content Addressable Memory,它的输入是内容,输出是内容的key。CAM 能实现硬件查操作,硬件单周期查表。不过 IP 地址和 MAC 地址有些许不同, MAC 地址使用的是精确匹配,而IP地址是用的最长前缀匹配。所以三层转发需要使用 TCAM。 TCAM 就是 三态CAM, 除了 0 和 1 还有个比较状叫 Don’t Care。这样 TCAM 的匹配结果是有多个的,但是只有第一个匹配结果会输出,只要匹配内容预先按照掩码长度排序就可以实现最长前缀匹配了。
完成查表,知道了目的转发端口后,这个数据就该通过 内部背板 发送到另一个端口了。最初背板带宽是一个总线结构,但是随着端口速率的上升,总线结构的背板早就无法支撑交换机需要的巨大带宽了。每个端口两两互联,倒是能解决了带宽问题,但是这意味着端口连线太多。
因此现在路由器使用的是 “交换式背板”。结构如下图所示:
交换式背板是一块纯电路。在每个交叉的位置使用了开关晶体管控制通断。从图片上可以看到 1 2 3 4 发和 1 2 3 4 收可以通过开关实现完全独立的互连。注意这里的 发和收是编号一样的。1 号发和1号收其实就是1号端口。
这样通过开关控制,所有的端口都可以在需要的时候建立点对点连接。由于是点对点链接,因此互联线路的带宽实际上并不会比以太网更高。设计难度就大大降低了。
然后到了发送端口,发送端口再根据 QoS 进行排队然后发出或者列队太长就丢弃。
这样,就可以完全在现有的技术条件下,完成超高速的交换。看起来几百 Tbps 的背板带宽实际上不如 PCIE x16 更有难度。
转发决策是分布式的,每个端口一个,因此每个转发引擎并不感受巨大的压力。同时压力最大的差路由表又通过 TCAM 硬件实现快速查找。
Comments