当前位置: 首页 > article >正文

arp代答观察

文章目录

    • 代答和代理简述
    • 实验前提
    • 先不开启proxy代答的配置
    • 开启代答
    • 总结

代答和代理简述

ARP(地址解析协议)是在局域网中用于将IP地址映射到MAC地址的协议。在理解 ARP 代答和 ARP 代理之前,让我们先澄清一下 ARP 的基本工作原理。

  • ARP 代答(ARP Reply):ARP 代答是指设备在收到 ARP 请求后向请求者发送的响应。当一个设备需要将 IP 地址解析为 MAC 地址时,它会在局域网上广播 ARP 请求,请求与目标 IP 地址对应的 MAC 地址。目标设备收到请求后,如果拥有对应的 IP 地址,会发送 ARP 代答,将自己的 MAC 地址发送给请求者,从而建立 IP 到 MAC 的映射关系。

  • ARP 代理(ARP Proxy):ARP 代理是指网络设备(通常是路由器或者交换机)在局域网内代表其他设备响应 ARP 请求。当一个设备无法直接解析某个IP地址的MAC地址时,它会向本地网络内的所有设备发送ARP请求。在某些情况下,网络设备可以充当 ARP 代理,接收到 ARP 请求后代替目标设备进行回应。这样可以在某些网络拓扑结构下提供更高效的 ARP 解析服务。

因此,ARP 代答和 ARP 代理的区别在于:

  • ARP 代答是指设备直接响应 ARP 请求,提供自己的 MAC 地址(具体请看文末的总结)。
  • ARP 代理是指网络设备代表其他设备响应 ARP 请求,帮助解析 IP 地址和 MAC 地址之间的映射关系。

实验前提

用namespace模拟vtep下挂的虚拟机,同时又尽可能模拟我们已有的环境中的配置

项目代码中arp代答部分的配置如下

  cmd = "ip link add %s mtu %s type vxlan id %s proxy %s %s %s" % \
          (tun_name, vxlan_mtu, tun_key, _nolearning, _l2miss, _l3miss)

以上配置中的proxy即为arp代答的配置。
注:arp代答和arp代理是不一样的两个东西勿混淆。

先不开启proxy代答的配置

  1. 准备对应的namespace和bridge等

    root@i-l185a7rl:~# cat test.sh
    #!/bin/bash
    sysctl -w net.ipv4.ip_forward=1
    ip netns add ns1
    ip link add veth1 type veth peer name eth0 netns ns1
    ip netns exec ns1 ip link set eth0 up
    ip netns exec ns1 ip link set lo up
    ip netns exec ns1 ip addr add 3.3.3.3/24 dev eth0
    ip link set up dev veth1
    ip link add br1 type bridge
    ip link set br1 up
    ip link set veth1 master br1
    ip link add vxlan100 type vxlan id 100
    ip link set vxlan100 master br1
    ip link set up vxlan100
    
    #!/bin/bash
    sysctl -w net.ipv4.ip_forward=1
    ip netns add ns1
    ip link add veth1 type veth peer name eth0 netns ns1
    ip netns exec ns1 ip link set eth0 up
    ip netns exec ns1 ip link set lo up
    ip netns exec ns1 ip addr add 3.3.3.4/24 dev eth0
    ip link set up dev veth1
    ip link add br1 type bridge
    ip link set br1 up
    ip link set veth1 master br1
    ip link add vxlan100 type vxlan id 100
    ip link set vxlan100 master br1
    ip link set up vxlan100
    

    左边为host1,右边为host2
    在这里插入图片描述
    这个时候在3.3.3.3上ping3.3.3.4,肯定ping不通
    在这里插入图片描述
    原因在于,Host1的3.3.3.3接口需要先发送ARP广播包查询3.3.3.4的MAC地址。ARP广播包到达接口vxlan100之后,根据FDB表项无法找到VTEP地址,因而ARP广播包无法发出。

    然后在Host1上手动增加VXLAN FDB表项:

    bridge fdb append 00:00:00:00:00:00 dev vxlan100 dst 192.168.100.2
    bridge fdb append 2a:e7:fc:de:91:f7 dev vxlan100 dst 192.168.100.2
    

    然后在Host2手动增加VXLAN FDB表项:

    bridge fdb append 00:00:00:00:00:00 dev vxlan100 dst 192.168.100.3
    bridge fdb append ea:ec:1b:c8:cb:07 dev vxlan100 dst 192.168.100.3
    

    在这里插入图片描述
    可以看到arp广播泛洪的流量到达了host2上的vtep口,这个时候没有开启代答,符合预期的。

开启代答

配置如下
host1调整如下

root@i-l185a7rl:~# cat test_arp.sh
#!/bin/bash
ip link del vxlan100
ip link add vxlan100 type vxlan id 100 proxy
ip link set vxlan100 master br1
ip link set up vxlan100
bridge fdb append 00:00:00:00:00:00 dev vxlan100 dst 192.168.100.2
bridge fdb append 2a:e7:fc:de:91:f7 dev vxlan100 dst 192.168.100.2

host2调整如下

!/bin/bash
ip link del vxlan100
ip link add vxlan100 type vxlan id 100 proxy
ip link set vxlan100 master br1
ip link set up vxlan100
bridge fdb append 00:00:00:00:00:00 dev vxlan100 dst 192.168.100.3
bridge fdb append ea:ec:1b:c8:cb:07 dev vxlan100 dst 192.168.100.3

图中的proxy即为新增的代答参数
在这里插入图片描述
先删除之前没有开启arp代答的时候,产生是arp条目
在这里插入图片描述
再来ping,可以看到开启代答后,只有本地的vtep才会收到arp广播包了,host2上的vtep已经没有收到广播包了。并且这个时候是ping不通3.3.3.4的
在这里插入图片描述
为啥ping不通3.3.3.4呢,因为host1上的vtep上没有3.3.3.4的条目
在这里插入图片描述
手动将3.3.3.4的arp信息加入到host1上的vtep上

ip neighbor add 3.3.3.4 lladdr 2a:e7:fc:de:91:f7 dev vxlan100
ip netns exec ns1 ip neigh delete 3.3.3.4 dev eth0
ip netns exec ns1 ip neigh flush all

host2

ip neighbor add 3.3.3.3 lladdr ea:ec:1b:c8:cb:07 dev vxlan100

再次ping可以看到arp泛洪广播,只停留在了本地vtep
在这里插入图片描述

总结

可以看到proxy用来让vtep代答。代答的主要目的是减少泛洪流量,将泛洪范围控制在本地vtep口,如果不用proxy,则需要将流量泛洪到所有相关的vtep口。但是要提前把将对应的arp配置到vtep上,这个动作可以用我们其它的辅助程序完成


http://www.kler.cn/news/363577.html

相关文章:

  • 消息会话—发送消息自动滚动到最底部
  • WEB前端使用标签制作网页
  • js(深浅拷贝,节流防抖,this指向,改变this指向的方法)
  • 【c++差分数组】P9583涂色
  • 检索报告怎么开具
  • 互联网摸鱼日报(2024-10-24)
  • LeetCode:第1290题 二进制链表转整数
  • 构建物联网智能项目的框架与实践
  • 短视频去水印小程序流量主最新接口带配音功能
  • Python 学习笔记(十二)—— 网络编程
  • Ai环境安装教程
  • 【进阶OpenCV】 (17)-- Dlib库 --实现人脸检测
  • 家庭宽带的ip地址是固定的吗?宽带ip地址怎么修改‌
  • 深入理解 Webpack:现代前端开发的模块打包器
  • 二叉树习题其五【力扣】【算法学习day.12】
  • 【Flutter】页面布局:层叠布局(Stack、Positioned)
  • 实战:大数据冷热分析
  • 探索音频在线剪辑工具的奇妙世界
  • 设计一个算法,使第一个链表中仅留下三个表中均包含的结点,且没有数据值相同的结点,并释放LA中其他结点。
  • WPF 学习:知识要点、学习资源推荐
  • Nuxt.js 应用中的 builder:generateApp 事件钩子详解
  • 鸿蒙前端-1. 层叠效果
  • Liunx挂载nfts盘数据方法
  • 电脑格式化了还能恢复数据吗?
  • 关于瑆箫新博客上线的通知
  • 前端开发:Vue中数据绑定原理