# 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](../../_static/NTS2PDN.jpeg) - 边缘 DN ![NTS2MEC.jpeg](../../_static/NTS2MEC.jpeg)