一条数据包从收到发 -- 交换芯片篇 (一)
本文分享自天翼云开发者社区《一条数据包从收到发--交换芯片篇(一)》,作者:w****n
从程控交换设备的软处理到交换芯片的硬件 pipeline,从基于 dpdk 的软件转发到可编程的 pipeline 硬转发,从 Kbps 带宽能力到 Tbps 能力,网络转发设备的发展带来大带宽能力的同时,其技术架构也是经历了软-硬-软-硬的周期,可谓完美演绎了“十年河东十年河西”“各领风骚数年”的传奇。但对于底层网络而言,其七层架构、数据包结构、协议标准基本没有变化,即对于网络转发设备而言,数据报文处理架构可以做通用设计抽象,转发细节的差异与演进大多体现在报文处理逻辑的优化,内部报文高速传递的优化等。
本文通过介绍和借鉴主流数通交换芯片,开源软转发处理,可编程交换芯片通用 pipelile 设计等成熟商业化实现,谈一谈报文处理的转发架构抽象。
传统数通交换芯片
交换芯片在传统数通领域,覆盖了数通网络大多数的转发场景和业务需求。其主要应用在传统接入网、承载网、核心网,数据中心和云网络等,主要承载数据链路层、网络层等报文转发处理。
优势及其缺点
数通交换芯片的核心优势在于,可提供
高性能、低延时交换;低功耗、低成本;
成熟、丰富的协议栈转发架构;
成熟的接口抽象及灵活的端口配置;
可伸缩的吞吐量;
可伸缩的自定义功能;
完善的 QOS 和流量管理策略;
迁移到不同的平台而不改变架构;
虽然其强大的交换能力和丰富的协议栈使其在基础网络中举足轻重,但随着网络的演进,尤其云计算虚拟网络的兴起,其缺点也使得在灵活的虚机网络中不再受宠。
无按需定制的空间;
迭代演进困难;
协议集成的差异导致选型和成本无法平衡;
无法支持大规格;
通用模块抽象
为完成报文的处理与转发,需要设计和抽象不同网络分层的处理逻辑,设计报文管理与流量管理模块,支持报文解析与封装,支持丰富的运维功能。传统交换芯片经过多年的商用迭代,在功能模块抽象上,给出了比较完美的答案。下面主要介绍下通用报文处理中必要的模块设计与功能。
![](https://static001.geekbang.org/infoq/5c/5cf8f5c0a70d01eddd96129774e122ad.png)
1)接口模块:
物理接口:应对不同接入或转发带宽需求,设计支持 GE、XGE、25G、100G 等接口类型;
虚接口:为应对隧道报文处理,设计支持多种 vport;
BOND 接口:设计支持多种类型,主备链路、负载分担等;
CPU 接口:可应对慢路径的处理,也可自定义协议类型,弥补 pipe 流程缺陷;
作为报文处理周期的开始和结束,接口模块抽象中,可按需设计丰富的报文 check、分流处理等不同 feature 等。
2)协议集成:数据报文转发层面上,设计支持多种转发方式和协议类型,如数据链路层以太网二层转发、网络层 IP 路由三层转发、VPN 隔离和扩展、MPLS、Segment Route、VXLAN/GRE/IPIP tunnel 抽象等;链路诊断上,设计提供多种 OAM 功能,L2 OAM,MPLS OAM,BFD 等等;
3)QOS 模块:完备的 QOS 模块设计中,设计支持多队列、灵活流分类、流限速、流调度、流整形、流控,拥塞管理等;
4)运维模块:支持完善的统计,报文镜像,报文环回,报文重定向等。
5)报文解析器:支持报文不同深度的字段解析;
6)报文修改器:支持报文字段修改,封装信息修改等;
7)访问控制模块:设计支持报文字段的匹配规则及报文字段/流向的修改,可以应用于入方向,出方向,虚拟接口等。
8)精确时钟同步模块:设计支持 syncE、1588 等;
9)报文管理模块:MMU 模块、DMA 模块、buffer 管理等;
10)安全模块:可支持防攻/击策略的配置,防止网络攻/击的相关功能等。
报文在交换芯片的旅行
转发模块的抽象如同在动物园搭建了多种动物园区,参观路线的制订就是报文在交换芯片转发的旅途。
报文在网口的收包,可以形象的比喻为动物园入园的顺序人流,除了入口安检,参观顺序也很重要。从报文入口到出口,从报文解析到报文处理,传统交换芯片的 pipeline 模型给了很好的设计例子。
![](https://static001.geekbang.org/infoq/6b/6bcf28547a72788a5c95e428cec4ac01.png)
如上图的典型示例,端口收包后,此时报文作为入方向流程,先进行报文解析,然后进行以太网报文头的二层处理,识别 mac/vlan 等,进行二层转发处理,如果报文解析为 ip 报文且前置检查发现 ip 功能使能,则跳过二层进入三层的 ip 转发处理。诸如入方向 acl 规则,是否加入 BOND,入方向镜像均使能在入方向端口或者收包的前置处理中。QOS 流程一般处在转发中间环节,实现优先级队列映射,队列整形,调度,端口整形,限速等细致的流量控制与服务。对于组播报文还要在组播表项匹配后做报文复制才能进入出方向报文处理流程。在出方向报文处理中,实现报文的修改,比如内部队列到优先级的重新映射,部分报文字段,隧道报文的封装信息等。在发往端口前,要再次确认报文是否可发送,比如出接口状态,二层转发处理中 shg 是否 block 等,防止网络攻/击、环路等问题。发往出接口前,如果还需要内部再次处理,还可以有内部报文环回的“后悔操作”,将报文环回至入方向逻辑再次处理。
小回顾
报文在交换芯片中的旅行,路线清晰,层次分明。报文解析,报文修改,转发特征检查都是必要的,根据解析和检查的结果,按层次选择转发逻辑,比如 mac 转发还是 ip 转发,隧道终结还是 vpn 隔离等。具体每个转发结构,每个转发层次的具体描述,后续将慢慢揭开其面纱。
评论