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

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.mrgr.cn/news/57319.html

相关文章:

  • 网安加·百家讲坛 | 徐一丁:金融机构网络安全合规浅析
  • 【C++】C++中的线程
  • 【论文阅读】03-Diffusion Models and Representation Learning: A Survey
  • 成都跃享未来教育咨询有限公司抖音小店新生态
  • 羟基-聚乙二醇-羧基 HO-PEG-COOH的应用MW:3400 CAS:39828-93-8 纳米技术
  • 速盾:cdn能加速游戏吗?
  • 驱动开发系列23 - tasklet用法介绍
  • 如何将logism电路转为verilog(一)
  • 【建议收藏】大数据Flink入门专栏-v1.0,配套B站视频教程1小时速通
  • 【MyBatis】MyBatis-config标签详解
  • [COCI2015-2016#7] Prosti
  • 正则中的字符集
  • LeetCode 110. 平衡二叉树
  • 滑动窗口与TCP的缓冲区(buff)的关系
  • 四向车西门子PLC1200脉冲控制伺服与总线型控制方式思考
  • 【排序】快排思想以及例子
  • JavaScript 第30章:综合项目
  • “摄像机”跟随及攻击抖动实现
  • Linux基础IO
  • Android Handler(Looper.getMainLooper()),Kotlin
  • priority_queue (优先级队列的使用和模拟实现)
  • K折交叉验证代码实现——详细注释版
  • IPC 信号-Signal Linux环境
  • 栈的顺序存储总览
  • 关于风险系统解读最全最专业文章:一篇文章讲透风险,跨学科搞懂风险游戏规则,风险信任风险主观性客观性风险本质人格特质与风险态度技术风险系统风险社会新产品风险
  • 栈和队列代码