每天掌握一个网络协议----ARP协议

ARP协议

ARP(Adress Resolution Protocol,地址解析协议)是一种用于将网络层协议(IP地址)解析为数据链路层地址(MAC地址)的协议

ARP的工作原理

核心功能是通过广播请求和单播响应,将IP地址解析为MAC地址

ARP请求-响应

当设备需要与目标设备通信时,如果不知道目标设备的MAC地址,它会发送一个ARP请求广播包,询问谁拥有这个IP地址,参考格式:

局域网非目标设备收到该ARP广播报文,不进行处理;目标设备收到了该请求报文,会将请求中的源地址记录并封装到ARP响应报文中,这样一个ARP交互流程就完成了

ARP响应是单播而非广播的,因为响应设备已经获取了设备的MAC地址和IP地址

ARP缓存

ARP协议把IP => MAC的映射关系记录到本机操作系统的ARP缓存中

以Linux为例,ARP记录在内核的ARP表中;除此之外,还会同步到邻居子系统 /usr/sbin/ip neigh

复制代码
guangjie.wang@SW-Build:~$ cat /proc/net/arp
IP address       HW type     Flags       HW address            Mask     Device
10.0.10.8        0x1         0x2         34:73:5a:a0:80:dd     *        eno1
10.0.10.174      0x1         0x2         2c:ea:7f:e7:73:07     *        eno1
10.0.10.27       0x1         0x2         2c:ea:7f:e7:73:05     *        eno1
10.0.10.1        0x1         0x2         e4:3e:c6:bf:48:c1     *        eno1
10.0.10.100      0x1         0x0         00:00:00:00:00:00     *        eno1
10.0.10.18       0x1         0x2         4c:76:25:fe:3d:3d     *        eno1
10.0.10.6        0x1         0x2         20:04:0f:f9:fb:14     *        eno1
10.0.10.11       0x1         0x2         4c:d9:8f:c1:ff:8b     *        eno1

也可以使用arp -n进行查看

复制代码
guangjie.wang@SW-Build:~$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.10.8                ether   34:73:5a:a0:80:dd   C                     eno1
10.0.10.174              ether   2c:ea:7f:e7:73:07   C                     eno1
10.0.10.27               ether   2c:ea:7f:e7:73:05   C                     eno1
10.0.10.1                ether   e4:3e:c6:bf:48:c1   C                     eno1
10.0.10.100                      (incomplete)                              eno1
10.0.10.18               ether   4c:76:25:fe:3d:3d   C                     eno1
10.0.10.6                ether   20:04:0f:f9:fb:14   C                     eno1
10.0.10.11               ether   4c:d9:8f:c1:ff:8b   C                     eno1

ARP表存在于内存中,系统重启会清空ARP记录

不仅如此,在Linux系统中,ARP表不只是一张,而是每个接口都会维护一个ARP/邻居表

一个ARP表最多存放的记录条目可以通过以下命令查看:

复制代码
guangjie.wang@SW-Build:~$ sysctl net.ipv4.neigh.default.gc_thresh1
net.ipv4.neigh.default.gc_thresh1 = 128
guangjie.wang@SW-Build:~$ sysctl net.ipv4.neigh.default.gc_thresh2
net.ipv4.neigh.default.gc_thresh2 = 512
guangjie.wang@SW-Build:~$ sysctl net.ipv4.neigh.default.gc_thresh3
net.ipv4.neigh.default.gc_thresh3 = 1024

这三个阈值的含义分别是:

|------------|---------------|------|
| 参数 | 意义 | 阈值 |
| gc_thresh1 | 小于此值时不回收 | 128 |
| gc_thresh2 | 超过此值开始触发回收 | 512 |
| gc_thresh3 | 最大值,超过立即丢弃新条目 | 1024 |

ARP的应用场景

ARP广泛应用于以下场景:

  1. 局域网通信:
  • 设备在局域网中通信时,需要获取目标设备的MAC地址
  1. 路由器转发:
  • 路由器在转发数据包时,需要直到下一跳的MAC地址
  1. 网络诊断:
  • 使用ARP命令查看本地ARP缓存,诊断网络问题

ARP的安全性

ARP本身是不安全的,因为它是广播报文且缺少安全校验,容易收到以下攻击

  1. ARP欺骗
  • 攻击者使用伪造的ARP响应,将自己的MAC地址与目标IP地址关联,从而截获网络报文
  1. ARP泛洪
  • 攻击者发出海量的ARP请求,将局域网中的网络资源耗尽

为了提高安全性,可以使用以下方式防止网络收到ARP攻击

  1. 静态ARP表,手动配置局域网的IP和MAC地址的映射关系,适用于小型且固定的网络
  2. ARP检测,监控网络中的ARP流量,检测局域网中的异常行为设备
  3. 网络隔离,使用VLAN或子网隔离设备,减少ARP攻击的影响

ARP的替代方案

在某些场景下,可以使用以下替代方案:

  1. NDP(Neighbor Discovery Protocol)邻居发现协议

IPv6使用NDP协议替代ARP协议实现ip与mac的映射

相关推荐
wheeldown15 小时前
【Linux网络编程】 Linux TCP网络编程:客户端开发+守护进程实战
linux·网络·tcp/ip
Aaron158815 小时前
通信灵敏度计算与雷达灵敏度计算对比分析
网络·人工智能·深度学习·算法·fpga开发·信息与通信·信号处理
执笔论英雄15 小时前
【RL]分离部署与共置模式详解
服务器·网络·windows
拍客圈15 小时前
Discuz CC 防护规则
服务器·网络·安全
文章永久免费只为良心15 小时前
一站式综合查询工具:IP、企业信息与网络空间资产高效查询工具
网络·网络协议·tcp/ip
岳来15 小时前
网络小白理解容器网络endpointid
网络·docker·endpoint
若风的雨16 小时前
fence和barrier 的区别
网络
麻辣长颈鹿Sir16 小时前
TCP/IP四层架构通俗理解及功能介绍
网络协议·tcp/ip·tcp/ip协议四层架构·网络通信介绍
云边云科技_云网融合17 小时前
AIoT智能物联网平台:架构解析与边缘应用新图景
大数据·网络·人工智能·安全
若风的雨17 小时前
NCCL 怎么解决rdma 网卡本地send的时候需要对端recv要准备好的问题,或者mpi 怎么解决的?
网络