向量封包处理器(VPP)特点

目录

功能详细信息:

基于ACL的转发

安全组的ACL

地址解析协议

邻接

双向转发检测

位索引显式复制

粘接

缓冲区元数据更改跟踪器

对静态http或https服务器的内置URL支持

警察

分类

数据平面对象

动态主机配置协议

GPRS隧道协议

通用路由封装

IP邻居数据库

IP安全

IP隧道中的IP

IPFIX探针

英特尔IPSecMB库提供的IPSec加密引擎

Openssl库提供的IPSec加密引擎

本机实现提供的IPSec加密引擎

IPv6邻居发现

互联网组管理协议

L2TPv3

第2层转发

第三层交叉连接

负载均衡器

定位器ID分离协议控制平面

定位器ID分离协议通用协议扩展

地址和端口的映射

多协议标签交换

NSH

Netmap设备

网络地址解读

网络延迟模拟器

PG

PPPoE

管道装置

QUIC协议

服务质量

SRv6-服务链接动态代理

SRv6-服务链接伪装代理

SRv6-服务链接静态代理

SRv6 Mobuile

IPv6的分段路由(SRv6)

MPLS的分段路由

会话层

源VRF选择

静态HTTP https服务器

TLS OpenSSL

点按设备

基于时间范围的MAC地址过滤器

传输控制协议

传输层安全

隧道基础设施

用户数据报协议

VNET GSO

VPP通讯库

Virtio PCI设备

虚拟路由器冗余协议

虚拟可扩展局域网

局域网

主机接口设备AF_PACKET

rdma设备驱动程序

vlib / unix

vmxnet3设备驱动程序


功能详细信息:

VPP版本:v20.09-rc0-77-g5bb3e81e7

基于ACL的转发

维护者:Neale Ranns [email protected]

  • 基于策略的路由
  • ACL匹配要转发的流量
  • ACL中的每个规则都有一个关联的“路径”,该路径确定如何转发流量。该路径被描述为FIB路径,因此使用ABF可以进行基本L3转发的任何可能(输出MPLS标签除外)
  • ACL分为策略
  • 策略中的ACL优先级确定优先匹配的流量
  • 策略附加到接口。
  • ABF在L3路径中作为输入功能运行

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/abf

安全组的ACL

维护者:Andrew Yourtchenko [email protected]

ACL插件允许在IP地址所有权级别(通过通过MACIP ACL锁定IP-MAC关联)以及在入站和出站ACL中使用网络和传输级别策略来实施访问控制策略。对于非初始片段,仅在网络层上进行匹配。有状态ACL中的会话状态按接口维护(例如,出站接口ACL创建会话,而入站ACL匹配会话),这简化了设计和操作。对于TCP处理,会话处理跟踪“已建立”(同时看到SYN段和可见的ACK)和“瞬态”(所有其他TCP状态)会话。

  • 入站MACIP ACL

    • 过滤源IP:MAC地址静态配置的绑定
  • 无状态入站和出站ACL

    • 根据其L3 / L4信息允许/拒绝数据包
  • 有状态的入站和出站ACL

    • 根据出站流量创建入站会话,反之亦然

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/acl

地址解析协议

维护者:Neale Ranns [email protected]

如RFC826中所述的地址解析协议(ARP)的实现

  • ARP响应者

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/arp

邻接

维护者:Neale Ranns [email protected]

邻接表示到达直接连接的邻居所需的下一跳信息。

  • 邻接表示如何向对等方发送不同的流量类型
  • 邻接的原则属性是接口和重写。重写将在数据包通过接口转发之前进行。
  • 重写由接口类型提供。它可以从固定接口属性(即P2P隧道上的src,dst IP地址)或解析协议(如以太网链路上的ARP)构造。
  • 如果存在重写,则称邻接关系是完整的,如果没有重写,则邻接关系是不完整的,
  • 在DPO图中作为叶的邻接是终端/正常(即在物理接口上)。如果不是终端,则称为中间链(即虚拟接口上的一个,例如GRE隧道)。中链邻接可以堆叠/加入到描述后续转发(即如何发送GRE隧道的目标地址)的DPO图上。
  • Glean邻接关系描述了如何将数据包广播到子网中

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/adj

双向转发检测

维护者:Klement Sekera [email protected]

双向转发检测(BFD)的实现。

  • BFD协议实现

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/bfd

位索引显式复制

维护者:Neale Ranns [email protected]

位索引显式复制(BIER)的实现

  • 使用位索引显式复制进行多播(https://tools.ietf.org/html/rfc8279)
  • MPLS和非MPLS网络中的位索引显式复制(BIER)封装(https://tools.ietf.org/html/rfc8296)

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/bier

粘接

维护者:Steven Luong [email protected]

绑定实施

  • 具有以下选项的接口绑定支持-模式活动备份-模式lacp-负载平衡l2 | l23 | l34-仅限于numa-模式xor-负载平衡l2 | l23 | l34-模式循环-模式广播

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/bonding

缓冲区元数据更改跟踪器

维护者:Dave Barach [email protected]

缓冲区元数据更改跟踪器(mdata)使用图形节点之前/之后的主循环性能回调挂钩捕获缓冲区元数据,然后比较和总结每个节点的结果。回答问题“特定图形节点会更改哪些缓冲区元数据?” 通过直接观察。启用前对性能的影响为零。

  • 缓冲区元数据更改跟踪器

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/mdata

对静态http或https服务器的内置URL支持

维护者:Dave Barach [email protected]

(builtinurl)插件将一组URL添加到静态http / https服务器。当前URL,所有URL返回.json fmt中的数据:/version.json-vpp版本信息 /interface_list.json-接口列表 / interface_stats-通过HTTP POST的单个接口 / interface_stats-通过HTTP GET的所有intfcs。

  • 静态http / https服务器的内置URL

功能成熟度级别:开发
支持:API CLI MULTITHREAD
源代码:https ://git.fd.io/vpp/tree/src/plugins/builtinurl

警察

维护者:Dave Barach [email protected]

一个非常简单/快速的源地址白名单功能

  • v4,v6非默认FIB src地址查找
  • 丢弃未达到接收邻接关系的数据包
  • 没有广泛使用

功能成熟度级别:实验
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/cop

分类

维护者:Dave Barach [email protected]

掩码/匹配包分类器

  • 瑞士军刀面罩匹配引擎,用于对数据包进行分类
  • 使用128位SIMD向量运算来提高性能
  • 许多用例,包括数据包跟踪/ pcap捕获过滤

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/classify

数据平面对象

维护者:Neale Ranns [email protected]

数据平面对象(DPO)

  • DPO是对象的通用术语(又称抽象基类),它对数据平面中的数据包执行[一组]操作
  • DPO类型的具体示例是;邻接,mpls-imposition,复制。
  • DPO堆叠/合并以形成一个处理图,数据包将遍历该处理图以描述数据包应经历的全部操作。
  • DPO图可以植根于VLIB图中的任何点-值得注意的例子是L3 FIB查找,ABF,L3XC。

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/dpo

动态主机配置协议

维护者:Dave Barach dave@ barachs.net,Neale Ranns [email protected]

动态主机配置协议(DHCP)客户端的实现

  • DHCP客户端(v4 / v6)
  • DHCPv6前缀委托
  • DHCP代理/选项82

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/dhcp

GPRS隧道协议

维护者:倪洪军[email protected]

GPRS隧道协议的实现

  • GTPU解封装
  • GTPU封装

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/gtpu

通用路由封装

维护者:Neale Ranns [email protected]

通用路由封装(GRE)的实现

  • L3隧道,IPv4和IPv6的所有组合
  • Encap / Decap标志用于控制DSCP,ECN,DF从覆盖图到参考图的复制,反之亦然。
  • L2隧道

功能成熟度级别:生产
支持:API CLI MULTITHREAD

尚未实施:
-GRE密钥

源代码:https : //git.fd.io/vpp/tree/src/vnet/gre

IP邻居数据库

维护者:Neale Ranns [email protected]

  • 独立于IP协议的邻居数据库(也称为对等数据库)
  • 限制同行数量,回收和老化

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/ip-neighbor

IP安全

维护者:Neale Ranns [email protected]

IPSec的实现

  • IPSec(https://tools.ietf.org/html/rfc4301)
  • 认证标题(https://tools.ietf.org/html/rfc4302)
  • 封装安全有效载荷(https://tools.ietf.org/html/rfc4303)

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/ipsec

IP隧道中的IP

维护者:Ole Troan [email protected]

如RFC2473中所述,通过IP {v4,v6}隧道实现IP {v4,v6}。该模块还实现了6RD(RFC5969)的边界中继。

  • IPv4 / IPv6上的IPv4 / IPv6封装

    • 碎片与重组
    • 可配置的MTU
    • 内到外交通等级/ TOS副本
    • 可配置的流量等级/ TOS
  • ICMPv4 / ICMPv6代理

  • 6RD(RFC5969)

    • 边境接力

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD

尚未实现:
-隧道PMTUD-跟踪隧道状态的FIB状态-IPv6扩展标头(“隧道封装限制”选项)

源代码:https : //git.fd.io/vpp/tree/src/vnet/ipip

IPFIX探针

维护者:Ole Troan [email protected]

IPFIX流量探头。适用于L2或IP输入功能路径。

  • L2输入功能
  • IPv4 / IPv6输入功能
  • 记录L2,L3和L4信息

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD

尚未实现:
-输出路径-通过IPv6导出-通过TCP / SCTP导出

源代码:https : //git.fd.io/vpp/tree/src/plugins/flowprobe

英特尔IPSecMB库提供的IPSec加密引擎

维护者:Neale Ranns [email protected]

  • SHA(1,224,256,384,512)
  • CBC(128、192、256)
  • GCM(128、192、256)

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/crypto_ipsecmb

Openssl库提供的IPSec加密引擎

维护者:Damjan Marion [email protected]

  • SHA(1,224,256,384,512)
  • CBC(128、192、256)
  • GCM(128、192、256)
  • 点阅率(128,192,256)
  • DES,3DES
  • MD5

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https ://git.fd.io/vpp/tree/src/plugins/crypto_openssl

本机实现提供的IPSec加密引擎

维护者:Damjan Marion [email protected]

本机加密引擎的实现

  • CBC(128、192、256)
  • GCM(128、192、256)

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/crypto_native

IPv6邻居发现

维护者:Neale Ranns [email protected]

如RFC4861和RFC4862中所述的IPv6邻居发现协议的实现。

  • 邻居发现。
  • ND自动地址配置
  • 多播侦听器发现-仅作为发送广告的主机角色
  • 路由器广告

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/ip6-nd

互联网组管理协议

维护者:Neale Ranns [email protected]

Internet组管理协议(IGMP)的实现

  • 仅限IGMPv3。

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/igmp

L2TPv3

维护者:未维护

L2TPv3(RFC3931)的初始和不完整实施。

  • 通过IPv6的L2TPv3

功能成熟度级别:试验性
支持:API CLI
源代码:https://git.fd.io/vpp/tree/src/vnet/

第2层转发

维护者:John Lo [email protected]

第2层桥接和交叉连接支持

  • 两个接口的第2层(L2)交叉连接(xconnect)
  • 第2层(L2)桥接域(BD)中多个接口的桥接

    • 通过报文的目的MAC地址转发
    • 在BD或每个接口上启用/禁用MAC学习
    • 具有指定的老化间隔的MAC老化启用/禁用
    • 接口关闭,BD删除或用户发现的MAC的MAC刷新
    • 用户添加了不会老化的静态MAC,也不会被MAC学习覆盖
    • 用户添加的MAC不会老化,但可以被MAC学习覆盖
    • 单播转发启用/禁用
    • 未知单播洪泛启用/禁用
    • 启用/禁用多播/广播泛洪
    • ARP终止以避免ARP请求泛洪
    • 启用/禁用ARP请求的单播而不是泛洪
    • BVI(桥接虚拟接口),用于从BD或向BD进行IP转发
    • 在BD中设置接口以发送未知的单播数据包而不是泛洪
    • 在BD接口上支持水平分割组(SHG)
  • 在L2桥接或xconnect接口上重写VLAN标记

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/l2

第三层交叉连接

维护者:Neale Ranns [email protected]

  • 将L3接口上的所有入口流量交叉连接到输出FIB路径。
  • 该路径可以描述任何输出(MPLS标签除外)
  • 通过为表使用专用的VRF并添加具有相同路径的默认路由,可以实现相同的功能。但是,L3XC在内存和CPU上效率更高

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/l3xc

维护者:Steven Luong [email protected]

链路聚合控制协议实现(LACP)

  • 支持LACP版本1规范,包括标记协议

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/lacp

维护者:Klement Sekera [email protected]

链路层发现协议(LLDP)实施

  • 链路层发现协议实现

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/lldp

负载均衡器

维护人员:Pfister [email protected],倪洪军hong [email protected]

  • GRE隧道模式
  • NAT模式
  • L3DSR模式
  • 一致的哈希
  • 连接轨迹

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/lb

定位器ID分离协议控制平面

维护者:Florin Coras [email protected]

定位器ID分离协议控制平面(LISP)的实现

  • ITR,ETR和RTR操作模式
  • 多租户
  • 多宿主
  • 源/目标地图缓存查找
  • RLOC探测
  • 支持以太网,IPv4,IPv6和NSH EID(有效载荷)
  • 映射解析器故障转移算法

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/lisp-cp

定位器ID分离协议通用协议扩展

维护者:Florin Coras [email protected]

定位器ID分离协议通用协议扩展(LISP-GPE)的实现

  • ITR,ETR和RTR模式
  • 支持以太网,IPv4,IPv6和NSH EID(有效载荷)
  • 源/目的地转发
  • IPv4和IPv6 RLOC

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/lisp-gpe

地址和端口的映射

维护者:Ole Troan [email protected]

地址和端口映射(MAP):IPv4作为一种服务机制。隧道或转换IPv4地址,IPv4子网或共享的IPv4地址。在共享IPv4地址模式下,仅支持UDP,TCP和受限的ICMP。

  • LW46 BR(RFC7596)

    • 碎片与重组
  • MAP-E BR(RFC7597)

  • MAP-T BR(RFC7599)

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/map

多协议标签交换

维护者:Neale Ranns [email protected]

多协议标签交换(MPLS)的实现

  • 标签拼版/处置-管道和统一模式
  • 隧道-单向

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/mpls

NSH

维护者:倪洪军 hongjun.ni @ intel.com,Vengada [email protected]

证监会的NSH

  • NSH分类器
  • NSH转发器
  • NSH SF
  • NSH代理
  • NSH OAM
  • NSH元数据

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/nsh

Netmap设备

维护者:Damjan Marion [email protected]

创建一个netmap接口,这是一个高速用户空间接口,该接口允许VPP在不使用DPDK的情况下修补到linux名称空间,linux容器或物理NIC。

  • L4校验和卸载

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD

尚未实现:
-API转储

源代码:https : //git.fd.io/vpp/tree/src/deprecated/netmap

网络地址解读

维护人员:Ole Troan ot @ cisco.com,Filip Varga [email protected]

网络地址转换(NAT)插件提供了多种地址转换功能。这些可以用于多种不同的情况。CPE,CGN等

  • NAT44

    • 1:1 NAT
    • 1:1 NAT与端口
    • VRF意识
    • 多个内部接口
    • 发夹
    • IPFIX
    • 系统日志
    • 端点相关的NAT
    • TCP MSS夹紧
    • 本地旁路(DHCP)
  • CGN-确定性NAT

  • NAT64

  • NAT66

  • DS-lite

  • 464XLAT

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/nat

网络延迟模拟器

维护者:Dave Barach [email protected]

引入了可配置的网络延迟和丢失

  • 网络延迟和损耗分数模拟器

功能成熟度级别:生产
支持:CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/nsim

PG

维护者:Dave Barach [email protected]

高速包发生器

  • 高速数据包生成
  • 数据包定义CLI
  • 支持pcap捕获重放
  • 多线程数据包生成
  • 数据包注入到任意图节点
  • 被“ make test”大量使用

功能成熟度级别:生产
支持:CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/pg

PPPoE

维护者:倪洪军[email protected]

以太网上的PPP

  • PPPoE控制平面数据包分派
  • PPPoE解封装
  • PPPoE封装

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/pppoe

管道装置

维护者:Damjan Marion [email protected]

创建一个管道设备接口,该接口可以将数据包在管道的一侧双向传递到管道的另一侧。尽管行为与UNIX管道相似,但它不是基于主机的管道。

  • L4校验和卸载

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD

尚未实现:
-不使用硬件地址-不支持标记流量-通过sw_if_index进行API转储过滤

源代码:https : //git.fd.io/vpp/tree/src/vnet/devices/pipe

QUIC协议

维护者:Aloys Augustin [email protected]

IETF QUIC协议实施

  • 通过会话层进行主机堆栈集成
  • 基于Quicly库:https://github.com/h2o/quicly

功能成熟度级别:实验
支持:API CLI STATS MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/quic

服务质量

维护者:Neale Ranns [email protected]

服务质量(QoS)的保证

  • 记录-从数据包标题中提取QoS位并写入元数据
  • Mapp-定义往返于每个数据包层的QoS位的简单转换
  • 标记-将[映射的] QoS位写入数据包头
  • 存储-在数据包元数据中写入固定的QoS值

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/qos

SRv6-服务链接动态代理

维护者:Francois Clad [email protected]

SRv6动态代理

  • SRv6-动态服务链代理(draft-ietf-spring-sr-service-programming-01)

功能成熟度级别:生产
支持:CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/srv6-ad

SRv6-服务链接伪装代理

维护者:Francois Clad [email protected]

SRv6伪装代理

  • SRv6-伪装服务链代理(draft-ietf-spring-sr-service-programming-01)

功能成熟度级别:生产
支持:CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/srv6-am

SRv6-服务链接静态代理

维护者:Francois Clad [email protected]

SRv6静态代理

  • SRv6-静态服务链代理(draft-ietf-spring-sr-service-programming-01)

功能成熟度级别:生产
支持:CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/srv6-as

SRv6 Mobuile

维护者:村上哲也[email protected]

SRv6移动端功能。支持GTP4.D,GTP4.E,GTP6.D,GTP6.D.Di和GTP6.E。

  • GTP4.D
  • GTP4.E
  • GTP6.D
  • GTP6D
  • GTP6.E

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/srv6-mobile

IPv6的分段路由(SRv6)

维护者:Pablo Camarillo [email protected]

完整的SRv6网络编程实现

  • 支持SRv6网络编程(draft-ietf-spring-srv6-network-programming-07)
  • SR头端行为(H.Encaps,H.Encaps.Red,H.Encaps.L2,H.Encaps.L2.Red)
  • 具有PSP支持的中间TE的SR端点行为(End,End.X,End.T)
  • 用于覆盖创建的SR端点行为(End.DX4,End.DX6,End.DT4,End.DT6,End.DX2)
  • BindingSID实例化的SR端点行为(End.B6.Encaps.Red)
  • 支持SRH插入(draft-filsfils-spring-srv6-net-pgm-insertion-01)
  • SR柜台
  • SR政策实施(draft-ietf-spring-segment-routing-policy-02)
  • 基于IP前缀/ L2接口分类的SR导向

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/srv6

MPLS的分段路由

维护者:Pablo Camarillo [email protected]

SR-MPLS

  • SR政策支持
  • 自动转向(基于NextHop / Color的SR转向)

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/srmpls

会话层

维护者:Florin Coras [email protected]

会话层促进了北向应用程序和南向传输协议之间的交互。为此,会话层通过应用程序接口子层向北,公开API供应用程序与抽象通信单元(即会话)进行交互。向南,通过传输协议接口,它公开了API,这些API允许传输协议与应用程序交换数据和事件(ctrl和io),而实际上并不知道该通信是如何进行的。

  • 管理会话的分配和跟踪(六元组查找表)
  • 限制应用程序访问网络资源的应用程序名称空间
  • 在传输协议和应用程序之间传送数据和通知(Ctrl和io)
  • 传输协议接口

    • 提供通用的传输协议模板
    • 在数据的传输和应用程序表示之间转换
    • 安排发送会话/连接
  • 应用界面

    • 维持每个应用程序的状态
    • 管理用于在应用程序和传输之间交换数据的共享内存资源的分配
    • 分别为内置和外部应用程序公开本机C和二进制API

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/session

源VRF选择

维护者:Neale Ranns [email protected]

  • 根据源IP地址确定输入的VRF /表
  • 路由被添加到表中。
  • 使用数据包的源地址执行路由查找
  • 使用该表对路由进行编程,在该表中将执行后续的目标地址查找
  • 表绑定到接口。
  • SVS在L3路径中作为输入功能运行

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/svs

静态HTTP https服务器

维护者:Dave Barach [email protected]

一个简单的静态静态http / https服务器缓存内置的vpp主机堆栈应用程序。支持HTTP GET和HTTP POST方法。

  • 具有缓存的可扩展静态http / https服务器

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/http_static

TLS OpenSSL

维护者:Florin Coras [email protected],俞平[email protected]

用于VPP主机堆栈的TLS OpenSSL插件

  • TLS的OpenSSL引擎
  • TLS异步框架
  • 为加密卸载启用QAT

功能成熟度级别:实验
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/tlsopenssl

点按设备

维护人员:[email protected] [email protected] [email protected]

创建一个Tap V2设备接口,该接口连接到主机系统上的Tap接口。

  • 维蒂奥
  • 坚持不懈
  • 附加到主机上的现有水龙头
  • 使用索引索引SW过滤数据包转储输出

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/devices/tap

基于时间范围的MAC地址过滤器

维护者:Dave Barach [email protected]

设备输入/输出弧驱动器级别MAC过滤器。检查是否允许流量往返于给定的MAC地址,并采取适当的措施。适用于家庭网关用例,其中按位计费WAN流量。

  • 基于静态/时间范围/数据配额的MAC地址过滤器

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/plugins/mactime

传输控制协议

维护者:Florin Coras [email protected]

高速和大规模传输控制协议(TCP)实现

  • 核心功能(RFC793,RFC5681,RFC6691)
  • 高性能扩展(RFC7323)
  • 拥塞控制扩展(RFC3465,RFC8312)
  • 丢失恢复扩展(RFC2018,RFC3042,RFC6582,RFC6675,RFC6937)
  • 检测和防止虚假重传(RFC3522)
  • 防御欺骗和泛洪攻击(RFC6528)
  • 部分实现的功能(RFC1122,RFC4898,RFC5961)
  • 投放速度估算(草稿-iccrg投放速度估算)

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/tcp

传输层安全

维护人员:Florin Coras [email protected],俞平[email protected]

传输层安全性(TLS)协议实现,由一组充当现有TLS实现的包装器的引擎组成,例如OpenSSL,Picotls和MbedTLS,以及将引擎集成到VPP主机堆栈的框架

  • 支持可插拔TLS引擎的框架
  • OpenSSL,Picotls和MbedTLS引擎

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/vnet/tls

隧道基础设施

维护者:Neale Ranns [email protected]

隧道基础设施

  • IP隧道的常见类型和功能

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/tunnel

用户数据报协议

维护者:Florin Coras [email protected]

用户数据报协议(UDP)实现

  • 通过会话层进行主机堆栈集成
  • 每个端口调度程序独立于隧道协议

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/udp

VNET GSO

维护者:[email protected] [email protected]

通用细分卸载

  • 基本的GSO支持
  • GSO用于VLAN标记的数据包
  • 用于VXLAN隧道的GSO
  • IP-IP隧道的GSO
  • IPSec隧道的GSO
  • 提供内联函数以获取标头偏移

功能成熟度级别:实验
支持:API CLI

尚未实施:
-全面测试,GRE,日内瓦

源代码:https : //git.fd.io/vpp/tree/src/vnet/gso

VPP通讯库

维护者:Florin Coras [email protected]

VPP通信库(VCL)通过公开与POSIX兼容但不兼容POSIX的API,简化了与会话层的应用交互。

  • 将vpp主机堆栈会话抽象为整数会话句柄
  • 公开自己的异步通信功能,即epoll,select,poll
  • 支持多工应用
  • 会话不能在多个线程/进程之间共享
  • VCL锁定的会话(VLS)

    • 通过锁定确保一次仅一个线程访问一个会话
    • 将派生的进程检测并注册为新的VCL工作者。它不会将线程注册为新工作线程。
  • LD_PRELOAD垫片(LDP)

    • 拦截系统调用并将其注入VLS。
    • 支持的应用程序可以与VCL一起使用,并且可以隐式与VPP的主机堆栈一起使用,而无需更改任何代码
    • 它不支持所有系统调用和系统调用选项

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vcl

Virtio PCI设备

维护人员:[email protected] [email protected]

Virtio实施

  • 驱动程序模式可模拟从主机接口提供给VPP的PCI接口。
  • 模拟从来宾VM呈现给VPP的vhost-用户界面的设备模式。
  • 支持多队列,GSO,校验和卸载,间接描述符,巨型帧和压缩环。
  • 在vhost中支持virtio 1.1压缩环

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD

尚未实现:
-通过sw_if_index进行API转储过滤

源代码:https : //git.fd.io/vpp/tree/src/vnet/devices/virtio

虚拟路由器冗余协议

维护者:马修·史密斯[email protected]

虚拟路由器冗余协议实施(VRRPv3)

  • 适用于IPv4和IPv6的VRRPv3(RFC 5798)

    • 信号/广告和选举主人
    • 回复ARP,NS对虚拟路由器地址的请求
  • VRRP虚拟MAC地址支持

    • DPDK通过rte_eth_dev_mac_addr_add(),rte_eth_dev_mac_addr_del()与PMD支持多个MAC地址的接口
    • 设置为混杂模式的其他接口可能会起作用
  • VRRP虚拟路由器的支持接口类型

    • 硬件接口
    • VLAN子接口
    • 绑定接口
  • RFC 5798中未指定的其他功能

    • 允许将广告发送到单播对等方,而不是组播
    • 允许根据上游接口的状态调整虚拟路由器的优先级。在RFC 8347中提到作为“跟踪接口或网络”的配置选项。

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/vrrp

虚拟可扩展局域网

维护者:John Lo [email protected]

虚拟可扩展LAN(VXLAN)隧道支持跨越L3网络的L2覆盖网络

  • VXLAN隧道,用于支持L2覆盖/虚拟网络(RFC-7348)
  • 支持IPv4或IPv6底层网络VTEP
  • 如果BD中的所有VXLAN隧道均为单播,则通过头端复制进行泛洪
  • 可以将多播VXLAN隧道添加到BD,以通过IP多播进行泛洪
  • VXLAN封装具有散列的源端口,可实现更好的底层IP负载平衡
  • 通过底层接口上的vxlan-bypass IP功能对VXLAN进行decap优化
  • 在Intel Fortville NIC上使用带有DPDK的Flow Director对VXLAN进行硬件卸载

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/vxlan

局域网

维护者:倪洪军[email protected]

VxLAN-GPE隧道处理

  • VxLAN-GPE解封装
  • VxLAN-GPE封装

功能成熟度级别:生产
支持:API CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vnet/vxlan-gpe

主机接口设备AF_PACKET

维护者:Damjan Marion [email protected]

创建一个主机接口,该接口将连接到veth对的一侧的linux AF_PACKET接口。veth对必须已经存在。创建后,新的主机接口将在VPP中存在,名称为“ host-',在哪里'是指定的veth对的名称。使用“ show interface”命令显示主机接口详细信息。

  • L4校验和卸载

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD

尚未实现:
-sw_if_index和名称以外的API转储详细信息

源代码:https : //git.fd.io/vpp/tree/src/vnet/devices/af_packet

rdma设备驱动程序

维护者:BenoîtGanne [email protected]

rdma设备驱动程序支持

  • 为Mellanox的ConnectX- RDMA驱动器4 / 5的适配器

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/rdma

vlib / unix

维护者:Dave Barach [email protected]

特定于Linux的支持例程

  • 基于epoll的文件I / O支持
  • Linux信号处理
  • Syslog支持
  • 启动配置处理,日志记录
  • 配置调试CLI寻呼机,横幅,主循环轮询间隔
  • 每线程堆栈分配,保护页面设置

功能成熟度级别:生产
支持:CLI MULTITHREAD
源代码:https://git.fd.io/vpp/tree/src/vlib/unix

vmxnet3设备驱动程序

维护者:Steven Luong [email protected]

vmxnet3设备驱动程序支持

  • vmxnet3设备驱动程序,用于连接到ESXi服务器,VMWare Fusion和VMWare Workstation

功能成熟度级别:生产
支持:API CLI STATS MULTITHREAD
源代码:https : //git.fd.io/vpp/tree/src/plugins/vmxnet3

 

你可能感兴趣的:(计算机网络)