VXLAN 流量的 TX 丢包计数器计数两次

使用 Broadcom ASIC 的交换机在启用 VXLAN 的网桥上将 BUM 流量反映为 TX 丢包。当您使用启用 VXLAN 的网桥配置交换机时,此行为源于 ASIC 本身。

症状

当启用 VXLAN 的网桥收到广播、未知单播或多播 (BUM) 帧时,ASIC 会避免将帧发送回最初接收它的同一端口,以避免环路。这种水平分割校正会导致 HwIfOutNonQDrops 传输丢包计数器对于每个计数递增两次。

当您运行以下命令时,您会看到此双重计数的效果

  • sudo ethtool -S swpX
  • net show counters
  • cl-netstat

此行为不会发生在配置了非 VXLAN 端口的网桥上。但是,当您将 VNI 配置为网桥端口时,交换机不再将该网桥中的交换机端口视为常规端口。这些交换机端口容易受到此行为的影响,并且流量统计信息反映了这种水平分割校正。

您还会看到 HwIfOutNonQDrops 计数器在接收 VXLAN 封装数据包的路由上行链路端口上计数两次。

示例

Host11 直接连接到端口 swp11 上的 VTEP1,并与直接连接到端口 swp22 上的 VTEP2 的 Host2 通信。IP 路由网络分隔 VTEP1 和 VTEP2。

对于从 Host11 到 Host22 的单向流量

  • 入口 VTEP 在接收流量的边缘端口(VTEP1,swp11)上计算 TX 丢包,速率等于入口端口接收的 BUM 数据包数(来自流量源)。
  • 出口 VTEP 在路由的上行链路端口(VTEP2,swp22)上计算 TX 丢包,速率等于 BUM 数据包数乘以洪泛列表中远程 VTEP 的数量(每个 VNI)。

在以下示例中,主机发送 10000 个多播数据包

  • swp5 的 TX_DRP 列显示 10001,这表明由于水平分割校正行为,TX_DRP 计数器在哪里递增。
  • swp5 的 RX_OK 列显示 10005,swp1 的 TX_OK 列显示 20049。这些指示与此示例相关的流量的物理网络路径。
  • vni-1010 的 TX_OK 列显示 20007,这指示与此示例相关的逻辑端口上的网络路径。

在入口 VTEP 上

  • 边缘端口 (swp5) 接收 10005 个数据包。由于水平分割校正,入口端口上显示 10001 个数据包为 TX 丢包。
  • 路由的上行链路 (swp1) 向两个远程 VTEP(VTEP2 和 VTEP3)发送 20049 个数据包。vni-1010 在洪泛列表中有两个远程 VTEP,因此 20007 个数据包显示为 TX_OK;这是正常行为。
cumulus@vtep1:~$ net show counters

Kernel Interface table

Iface       MTU   Met    RX_OK   RX_ERR    RX_DRP   RX_OVR   TX_OK    TX_ERR   TX_DRP   TX_OVR Flg
--------  ----- -----  ------- --------  -------- -------- -------  -------- -------- -------- -----
bridge     1500     0    10011        0         0        0   50023         0        0        0 BMRU
eth0       1500     0       95        0         0        0      14         0        0        0 BMRU
lo        65536     0        0        0         0        0       0         0        0        0 LRU
swp1       1500     0       80        0         0        0   20049         0        6        0 BMRU
swp5       1500     0    10005        0         0        0      54         0    10001        0 BMRU
swp15      1500     0       13        0         0        0      23         0        0        0 BMRU
swp16      1500     0        3        0         0        0   20058         0        0        0 BMRU
swp51      1500     0        0        0         0        0       0         0        0        0 BMU
vni-1010   1500     0        3        0         0        0   20007         0        0        0 BMRU

对于出口 VTEP

  • 路由的上行链路端口 (swp5) 接收 10055 个数据包。由于水平分割校正,入口端口上显示 20009 个数据包为 TX 丢包(以及相应 VNI 的 20011 个数据包)。
  • 边缘端口 (swp49) 向目标发送 10061 个数据包。
cumulus@vtep2:~$ net show counters

Kernel Interface table

Iface       MTU   Met    RX_OK   RX_ERR    RX_DRP   RX_OVR   TX_OK    TX_ERR   TX_DRP   TX_OVR Flg
--------  ----- -----  ------- --------  -------- -------- -------  -------- -------- -------- -----
bridge     1500     0    10014        0         0        0   40027         0        0        0 BMRU
eth0       1500     0      133        0         0        0      25         0        0        0 BMRU
lo        65536     0        0        0         0        0       0         0        0        0 LRU
swp5       1500     0    10055        0         0        0      90         0    20009        0 BMRU
swp15      1500     0        3        0         0        0      14         0        0        0 BMRU
swp16      1500     0        3        0         0        0   10060         0        0        0 BMRU
swp49      1500     0        6        0         0        0   10061         0        0        0 BMRU
vni-1010   1500     0    10004        0         0        0   20011         0        0        0 BMRU
vni-1020   1500     0        1        0         0        0       1        0         0        0 BMRU