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 NTS2PDN.jpeg

  • 边缘 DN

NTS2MEC.jpeg