UPGW 基本实现原理介绍
Overview
基于 DPDK 完成物理网卡资源的纳管和抽象,并将数据报文绕过 Linux 内核协议栈进入到用户态的 nes-daemon 中进行处理。
NES_IO 实现了数据报文的分类和收发。轮询监听所有被 NES 纳管的 Ports 的收发,当 NES_IO 从 Port 收到报文,就 scatter(分发)带各个业务逻辑 Ring 环中。
NTS_IO 实现了 GTP-U 数据报文的转发。轮询 NTS 相关的逻辑 Ring 环,将其中需要处理的报文,经过 match traffic rule,dns rule 处理后,重新导入至相应 port send ring 环,完成报文的转发流程。
NIS_IO 实现了 GTP-C 数据报文的解析。类似于 NTS_IO,区别在于两者关联的逻辑 Ring 环类型不同。
NES_IO 有三个端口承载数据流量,分别是 Upstream Port、Downstream Port 以及 LBP Port。
Upstream:UE 的上行流量从 Upstream 进入 NES_IO,经 NES_IO 的分流规则后,可以从 Downstream 或 LBP 转发。
Downstream:UE 的下行流量从 Downstream 进入 NES_IO,往往直通到 Upstream 转发。
LBP:经 NES 本地分流后的流量通过 LBP 转发出去,分流后的回包也从 LBP 进入 NES_IO。
核心在于 Ring 数据结构的构造,Ring 作为不同线程之间交互和处理的桥梁。
本地流量卸载示意图
大网 DN
边缘 DN