这是程序员cxuan 的第 55 篇原创文章
更多文章见
https://www.php.cn/link/32c12acc9a2efc3fa896bb3ebcd47ee7
在确定了 IP 地址后,可以向该 IP 地址所在的主机发送数据报,这是众所周知的事情。然而,IP 地址仅是网络层的标识,那么在其下方的数据链路层是否也有一个地址来告知对方主机自己的位置呢?答案是肯定的,这个地址就是
MAC 地址
了解 MAC 地址MAC 地址的全称为
Media Access Control Address
MAC 地址主要用于识别数据链路中互联的节点,如下图所示
MAC 地址长度为 48 位,在使用
网卡(NIC)
MAC 地址中的 3 - 24 位表示厂商识别码,每个 NIC 厂商都有特定唯一的识别数字。25 - 48 位是厂商内部为识别每个网卡而用。因此,全世界不会有相同 MAC 地址的网卡。
什么是 ARPARP 协议的全称为
Address Resolution Protocol(地址解析协议)
简而言之,ARP 是一种解决地址问题的协议,它以 IP 地址为线索,定位下一个应接收数据分包的主机 MAC 地址。如果目标主机不在同一个链路上,会查找下一跳路由器的 MAC 地址。
ARP 的工作机制接下来我们探讨 ARP 的工作机制。假设 A 和 B 位于同一链路,不需要通过路由器转换,主机 A 向主机 B 发送一个 IP 分组,主机 A 的地址是 192.168.1.2,主机 B 的地址是 192.168.1.3,它们都不知道对方的 MAC 地址,主机 C 和 主机 D 是同一链路的其他主机。
主机 A 想要获取主机 B 的 MAC 地址,主机 A 会通过
广播
ARP 请求包
主机 A 发送的 ARP 请求包会被同一链路上的所有主机/路由器接收并解析。每个主机/路由器都会检查 ARP 请求包中的信息,如果 ARP 请求包中的
目标 IP 地址
通过 ARP,可以从 IP 地址获取 MAC 地址,实现同一链路内的通信。
这就需要使用
代理 ARP
ARP 缓存现在你知道了发送一次 IP 分组前通过发送一次 ARP 请求就可以确定 MAC 地址。那么每次发送都需要经过广播 -> 封装 ARP 响应 -> 返回给主机这一系列流程吗?
想想看,浏览器是如何做的呢?浏览器内置了缓存,可以缓存你最近经常使用的地址,ARP 也是如此。ARP 高效运行的关键在于维护每个主机和路由器上的
ARP 缓存(或表)
通过 ARP 缓存,降低了网络流量的使用,在一定程度上防止了 ARP 的大量广播。
一般来说,发送过一次 ARP 请求后,再次发送相同请求的几率较大,因此使用 ARP 缓存能够减少 ARP 包的发送,除此之外,不仅仅 ARP 请求的发送方能够缓存 ARP 接收方的 MAC 地址,接收方也能够缓存 ARP 请求方的 IP 和 MAC 地址,如下所示
不过,MAC 地址的缓存有一定期限,超过这个期限后,缓存的内容会被清除。
我们在 Linux 或者 Windows 中可以使用 arp 命令查看 ARP 缓存。选项 -a 用于显示两个系统缓存中所有的缓存项。
在 Linux 中使用 arp 查询缓存
主要包含五项
主机名 --- 对应一个 IP 地址硬件地址类型硬件地址标志本地网络接口标志主要分为
三类
发布
比如我们在 Windows 中进行 ARP 缓存查询
Windows 中的 ARP 程序显示了 IPv4 的地址,它的接口是十六进制数,Windows 版本还指出地址是手动输入还是 ARP 动态学习的。在上面的例子中,既有静态的也有动态的。48 位的 MAC 地址被显示为 6 个十六进制数,在 Linux 中使用
:
-
ARP 结构我们上面提到,ARP 对想要知道 MAC 地址的目标主机会首先发送 ARP 请求,那么这个请求中都携带哪些信息呢?下面 cxuan 就来和你聊一下。下面是在以太网中转换一个 IPv4 的地址常用的 ARP 请求或响应的报文格式。
前面 14 个字节构成标准以太网的首部,前两个字段 DST 和 SRC 分别表示
以太网的目的地址
以太网的源地址
ff:ff:ff:ff:ff:ff
0x0806
硬件类型
协议类型
0x0800
硬件大小
协议大小
Op
发送方硬件地址(MAC 地址)
发送方的协议地址(IPv4 地址)
目的硬件地址
目的协议地址
在 Mac 环境下,我这边使用的是
WireShark
https://www.php.cn/link/9a985e5d14e44dc2c97d12877dd7cd8c
下载完成后阅读安装说明的手册,阅读后会发现需要安装两个插件,根据提示安装即可,然后我们打开 WireShark,开始报文拦截,下面是我解惑的 ARP 数据包
这款软件很好的一个地方是对不同的数据包会有不同的颜色标识,这点非常好。
然后我们查看 ARP 请求
可以看到,这就是一个完整的 ARP 请求包,我们使用的硬件类型是以太网,协议类型是 IPv4,默认值是 0x0800,然后硬件大小是 6 个字节,协议大小占用 2 个字节,Op 的全称是 Opcode,Op = 1 表示这是一个 ARP 请求,然后是发送方的硬件地址和协议地址,接收方的硬件地址和协议地址。
ARP 响应如下
可以看到 Op = 2,表示这是 ARP 响应。
在 Linux 环境下,你可以使用
tcpdump
yum install -y tcpdump
使用
tcpdump -i ens33
更多关于 tcpdump 的用法,你可以参考这篇博客
https://www.php.cn/link/be6d9b9d8e0d77f5d77f534687f46691
大佬写的很详细,这里就不再说明了。
ARP 缓存超时缓存超时通常与 ARP 缓存中的项有关,arp 命令可以允许管理员设置永不超时。ARP 把保存在高速缓存中的每一映射地址都设置生存时间,一般为 20 分钟。如果是不完整的映射,那么缓存超时时间为 3 分钟,不完整的映射通常会强制发送一条不存在主机的 ARP 请求。
RARP与 ARP 相对的,
RARP(Reverse Address Resolution Protocol)
平常我们设置 IP 地址一般会有两种方式,
手动设置
DHCP 动态获取
但是对于嵌入式设备来说,它没有任何输入接口,也无法通过 DHCP 获取动态地址。
在这种情况下,就要使用到 RARP 了,你需要准备一个 RARP 服务器,在这个服务器上注册设备的 MAC 地址和 IP 地址,然后将设备接入网络,设备会发出一条 IP 和 MAC 地址的查询请求给服务器,服务器会告诉设备其 IP 地址和 MAC 地址。
ARP 攻击ARP 是一种非常不安全的协议,目前已经有很多涉及 ARP 的攻击,最主要的就是使用代理 ARP 功能假扮主机,对 ARP 请求作出应答,通过伪造 ARP 数据包来窃取合法用户的通信数据,造成影响网络传输速率和盗取用户隐私信息等严重危害。
ARP 攻击分类ARP 主要攻击方式分为下面这几种
ARP 泛洪攻击
ARP 欺骗主机攻击
欺骗网关的攻击
中间人攻击
IP地址冲突攻击
这篇文章我们主要讲了 ARP 的基本原理,ARP 的帧结构,ARP 的工作机制,以及 ARP 代理、ARP 攻击、RARP 和 ARP 的区别等
如果这篇文章读者们觉得还不错,跪求点赞、在看、留言、分享,你的支持将是我继续肝文的动力!
完
以上就是ARP,这个隐匿在计网背后的男人的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号