ARP终止(ARP Termination)功能通常是指在网络设备上配置静态的ARP条目,使得网络设备可以代表网络中的其他设备响应ARP请求。这意味着网络设备可以直接回复ARP请求,而不是让请求广播到整个网络,这有助于减少网络中的ARP流量,并且可以作为一种安全措施,防止ARP欺骗。
在云环境中广泛采用VXLAN(Virtual eXtensible Local Area Network)隧道技术,有效地解决了传统网络技术在云规模扩展中遇到的诸多挑战。在VxLAN(Virtual eXtensible Local Area Network)环境中,ARP Term功能发挥着重要的作用,尤其是在提高效率、减少广播风暴、增强安全性和简化管理方面。VxLAN是一种网络虚拟化技术,它通过将第二层(L2)网络封装在UDP/IP报文中,实现在第三层(L3)网络上的扩展,以克服传统VLAN数量限制并支持大规模数据中心部署。以下是ARP Term在VxLAN环境中的一些关键应用作用:
本文基于《learning vnet:L2 vSwitch shg 水平分割组 (3)》环境中组网图来学习arp term功能及业务转发流程。
arp term功能默认情况下是关闭,可以通过命令行set bridge-domain arp term 1 来开启arp term功能。下面是通过命令行 show bridge-domain 1查询配置。
然后通过命令行set bridge-domain arp term 1 来开启arp term。然后配置arp表。VPP的L2桥接域处理模块新增了一个API/CLI set bridge-domain arp entry <bridge-domain-id> [<ip-addr> <mac-addr>,允许用户为指定的桥接域提供IP与MAC地址的绑定关系。每条MAC地址会借助IP地址作为键,存储在名为mac_by_ip4的哈希表中。
#BD域 1中开启arp终止功能
dpdk-vpp源码分析: set bridge-domain arp term 1
#在BD域1 中配置MAC表
dpdk-vpp源码分析: set bridge-domain arp entry 1 192.168.1.3 56:8b:48:f8:a3:cc
dpdk-vpp源码分析: set bridge-domain arp entry 1 192.168.1.2 02:fe:8a:39:6b:6e
dpdk-vpp源码分析: set bridge-domain arp entry 1 192.168.1.1 02:fe:c7:62:52:7b
#查询BD域中arp 表
dpdk-vpp源码分析: show bridge-domain 1 arp
BD-ID Index BSN Age(min) Learning U-Forwrd UU-Flood Flooding ARP-Term arp-ufwd Learn-co Learn-li BVI-Intf
1 1 0 off on on flood on on off 4 16777216 N/A
IP4/IP6 to MAC table for ARP Termination
192.168.1.2 => 02:fe:8a:39:6b:6e
192.168.1.1 => 02:fe:c7:62:52:7b
192.168.1.3 => 56:8b:48:f8:a3:cc
dpdk-vpp源码分析:
接下来就来通过流量验证一下,在命名空间PC1中ping tap3接口的IP地址,在vpp中trace抓取业务转发流程。
root@learning-vpp:~# ip netns exec pc1 ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.370 ms
trace流程如下:
Packet 1
00:18:16:422628: virtio-input
virtio: hw_if_index 1 next-index 4 vring 0 len 42
hdr: flags 0x00 gso_type 0x00 hdr_len 0 gso_size 0 csum_start 0 csum_offset 0 num_buffers 1
00:18:16:422650: ethernet-input
frame: flags 0x1, hw-if-index 1, sw-if-index 1
ARP: 02:fe:c7:62:52:7b -> ff:ff:ff:ff:ff:ff
00:18:16:422666: l2-input
l2-input: sw_if_index 1 dst ff:ff:ff:ff:ff:ff src 02:fe:c7:62:52:7b [l2-learn arp-term-l2bd l2-flood ]
00:18:16:422672: l2-learn
l2-learn: sw_if_index 1 dst ff:ff:ff:ff:ff:ff src 02:fe:c7:62:52:7b bd_index 1
00:18:16:422677: arp-term-l2bd
request, type ethernet/IP4, address size 6/4
02:fe:c7:62:52:7b/192.168.1.1 -> 00:00:00:00:00:00/192.168.1.3
00:18:16:422685: l2-output
l2-output: sw_if_index 1 dst 02:fe:c7:62:52:7b src 56:8b:48:f8:a3:cc data 08 06 00 01 08 00 06 04 00 02 56 8b
00:18:16:422690: tap1-output
tap1 flags 0x00180005
ARP: 56:8b:48:f8:a3:cc -> 02:fe:c7:62:52:7b
reply, type ethernet/IP4, address size 6/4
56:8b:48:f8:a3:cc/192.168.1.3 -> 02:fe:c7:62:52:7b/192.168.1.1
00:18:16:422695: tap1-tx
buffer 0x9f848: current data 0, length 42, buffer-pool 0, ref-count 1, trace handle 0x0
l2-hdr-offset 0 l3-hdr-offset 14
hdr-sz 0 l2-hdr-offset 0 l3-hdr-offset 14 l4-hdr-offset 0 l4-hdr-sz 0
ARP: 56:8b:48:f8:a3:cc -> 02:fe:c7:62:52:7b
reply, type ethernet/IP4, address size 6/4
56:8b:48:f8:a3:cc/192.168.1.3 -> 02:fe:c7:62:52:7b/192.168.1.1
ARP终止功能对应arp-term-l2bd节点。在L2层业务转发流程中需确保arp-term-l2bd节点在l2-flood节点前执行。
在l2-input节点通过入接口查询到BD索引,判断当前BD域中是否启用ARP终止功能。此检查仅在目的MAC地址为广播MAC时中执行,不影响常规单播和多播包的性能。若包为广播ARP包且桥接域启用了ARP终止,则在特征位图中为此包设置ARP终止位。随后,该包按常规顺序经历L2特性处理流程,并触达ARP终止节点。对于其他包,或所在桥接域未启用ARP终止的情况,则清除包的ARP终止位,避免增加额外的处理开销。
在arp-term-l2bd节点解析ARP请求报文中的IP作为键,查询mac_by_ip4。如果找到MAC条目,将向输入接口发送ARP响应。若未找到条目,则遵循常规L2广播转发路径,正常泛洪ARP请求包。
最开始验证ARP 终止功能,是在内核基于tap3接口ping tap2接口IP地址,发现是无法ping通的,show trace查询流程是没有显示报文进入arp-term-l2bd,一时间没有找到思路,因为环境中没有其他流量。使用命令行show node l2-learn查詢了报文next统计技术信息。确认报文进入了arp term节点。
接下来只能通过阅读代码来解答疑问,很快便找到了答案,报文处理开头判断当前接口SHG不等于0时,直接跳过当前处理节点。
// Terminate only local (SHG == 0) ARP
if (vnet_buffer (p0)->l2.shg != 0)
goto next_l2_feature;
总结,arp term功能在VPP中提供了对ARP流量的精细控制能力,有助于提升网络的安全性和效率,特别是在需要严格控制二层通信或实施复杂网络策略的场景中。本文只是简单介绍了ARP终止功能基本配置逻辑及转发流程,希望后续可应用到实际业务场景中去,提升网络安全性及效率。
本文分享自 DPDK VPP源码分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!