交换芯片简单剖析

什么是交换芯片?

交换机使用的芯片就是交换芯片。交换机分很多种,从部署的位置上看,有楼道交换机(边缘交换机)、核心交换机;从交换功能上看,有两层交换、三层交换。
理论上来讲,交换机处理L2/L3协议,路由器处理路由相关协议,但是现在芯片能力增强了,经常是两者合为一体,即既有两层表也有三层表。
学院派将路由或者交换机分为转发层与控制层,对于路由平台,转发层就是硬件转发表,控制层就是路由协议族(例如单播路由协议RIP、OSPF、BGP,组播路由PIM、IGMP、MLD,用于建立tunnel的虚拟路由VRF等)。L2/L3的网络协议有很多这篇文章不涉及了,为了实现这些协议,在硬件部分有几大逻辑功能:ACL、VLAN、L2-table、L3-table、QoS等,其物理实现本文不涉及了。


交换芯片本质是SoC。

芯片整体分为交换芯片、片上CPU(SoC)、外围接口,以及连接这些的总线。注意上图是片内的图,每个GMAC通过板级总线连出(例如GMII等)。
SoC部分和其他嵌入式CPU一样,这里用的是MIPS的芯片,就是MIPS公司卖的IP。这个SoC基本包括:MIPS结构的处理器MIPS-4Kec;片上存储,及其总线OCP bus;片上慢总线Lexra bus,及其连接的外围接口;片上的外围接口最后通过片上的pin脚引出(当然也可能不引出)。
通过Lexra bus连接到下面的是交换芯片(很多芯片厂商就卖这个,例如快倒闭的盛科网络),这张图只是画了交换芯片的模块,但是流程完全不是这样。


交换机的板级设计是怎样的?

在讨论交换芯片之前先看板级设计,这样也能基本了解需求,即交换芯片要设计成什么样的。
每一颗芯片(SoC+交换芯片)可以有多种mode。在没有软件uboot的情况下这些mode可以通过外围启动引脚选择、或者寄RO存器选择,然后设置好寄存器,这样内部软件也就知道是什么mode了。在有uboot的情况下可以通过uboot选择。
不同的mode在接口的速率组合上面不同,这个一般都是设置MAC的寄存器实现。另外交换芯片相除了中间几个port有内置PHY可以直接接到网口上,其他的port都需要外部PHY。
PHY只是负责处理物理层的东西,MAC负责MAC层的工作。


交换芯片要怎样设计?

交换芯片负责处理网络数据包,他的频率一般比CPU要快很多。如下是典型的交换芯片内部报文流程。
交换流程基本可以分为几个阶段:Per-port-ingress,Ingress,Lookup,Egress,Per-port-egress。对于不同的模块,例如ACL、VLAN、QoS等,在每个阶段都有不同的设计。所以后面的详细设计参考不同模块。


VLAN功能模块要怎样设计?

每个模块的设计都是根据standrd,vlan主要根据802.1Q,关于standard可以读RFC。
一个简单的楼道交换机的芯片的vlan流程主要包括(基本都在ALE中):
· (Parse阶段)vlan tag parse
· VLAN accept type check:检查in-pkt的vlan域与port的设定是否符合。
· port based vlan decision(也叫ingress vlan decision):无论是否设定是port-based vlan都检查,这厮ALE做的,当然如果后面是其他的设定这个结果可以不需要。
(· ingress-ACL)
· First VLAN look up(vlan forward and filter):看解释主要是做:ingress vlan filter、FID decision、vlan profile work等。这些工作就是vlan转发的工作。
(· L2 look up)其中包括mac+vlan learn,IVL
(· L3 look up)
· Second VLAN lookup:看解释主要做egress filter,就是根据vlan决定送到那个port上。
· Address Table VLAN translation:这个不太懂。
· (TX阶段)VLAN untag table lookup
· 另外还有可选的egress vlan tagging、egress vlan decision


数据包parse模块要怎样设计?

见ppt,基本是配置可以parse的深度,以及其中是否解析EFI bit。分为全局与per port。详细的可以看parse的spec。
关于accept frame type几方面:1.per port设置;2.是否带tag以及带几层;3.TPID、VLANID、PCP、CFI等。


Ingress vlan decision如何设计?

几个模块可以决定,优先级:ingress ACL > port based vlan = inner tagged vlan


还有哪些重要模块?
还有FDB、RDB、QoS、ACL等重要模块,后续再分析。


芯片为什么会有Apply Action与Write Action的区别?

以Ingress VLAN修改VID为例,Apply Action就是动作立即执行,同时在后续的Pipeline中使用修改后的VID;而Write Action就是动作在packet出去时候执行 ,在后续的Pipeline中使用origin VID。
在芯片内部实现的时候有多种方法,其中一种就是使用冗余的寄存器记住修改后的VID。
在SDN中有这两种动作。


有三层功能的交换芯片如何识别做tunnel或者路由的动作?

如果交换芯片有三层功能(例如ARP、路由、隧道例如MPLS、等功能),收到数据包后,如果DMAC是自己,那么芯片认为这个数据包想做L2以上的动作。
这个识别的过程是在TerminationMAC等类似的硬件表中,与L2、L3、隧道所用的表不同。在pipeline中,数据包先通过L2表然后TerminationMAC表然后L3或者某个隧道所用的表。
所以TerminationMAC这张表的功能就是用来识别DMAC是自己的报文想要去做哪件事情。


什么是QoS?

QoS就是传输质量保证,rate-limit是QoS的基础,RL的算法可以参考相关的文档,定义了rate与burst等概念。RL可以使用在port或者Q上,使用在P上,则对通过P的所有traffic综合进行限速,使用在Q上则是对通过Q的所有traffic总和进行限速。对P进行限速是流量整形的基本功能,但是这种方式不区分traffic,则不能称为QoS。
在网络中很多时候需要对traffic进行限速,这是就需要通过ACL或者Policy区分traffic,然后将不同的traffic进不同的Q,然后将Q进行限速。在实际使用中,一般有8个Q,0~7优先级从小到大。也就是说,当出口带宽恒定时,优先级高的队列中的traffic优先发出(或者带权优先)。在实际使用的时候,一般ftp、http等协议的traffic优先级低,video、audio等优先级较高。
traffic中可以使用PCP或者DSCP标志traffic的优先级,网络管理员通过PCP、DSCP到Q的映射关系控制traffic入哪个Q,一般情况是PCP对应Q,DSCP/8对应Q。也可以通过命令行修改这些映射关系。
如果出现拥塞,Q或者P中的RL需要进行丢包操作,如何丢包有很多算法,其中一种是color-based,也叫color-aware。
阅读更多

没有更多推荐了,返回首页