TCP/IP 学习笔记:ARP 地址协议

学习资料:《TCP/IP详解卷1:协议》

1# ARP 解决了什么问题

ARP 协议工作于同一 IP 子网中,主要工作是把 逻辑 Internet 地址 向对应的 物理硬件地址 进行转换。也就是把 IP 转换为 MAC 地址。
ARP 就是设计来查询一个 IP 所对应的 MAC 地址的。

2# ARP 广播

假设子网 128.32.1.0/24 中有一台主机 128.32.1.33 发送一个帧到另一台主机 128.32.1.77,两台主机都只知道对方的 IP 地址,那么就需要 ARP 去获取两个 IP 对应的 MAC 地址。
ARP通过 广播 来实现这个功能,原理如下:

182.32.1.1 发送一个称为 ARP请求链路层广播帧 到整个网段,整个 128.32.1.0/24 的所有主机都能收到这个帧。帧的内容为:“如果你的 IP 为 128.32.1.77 ,请向我回应你的 MAC 地址”。

那么子网内所有主机都会收到这个广播,然后根据要求检查自己的 IP 地址。IP 地址为 128.32.1.77 的主机发现要找的是自己,那么就把请求方 128.32.1.33 的 IP 地址和 MAC 地址记录到内存中供以后使用,并同时 直接(因为它的内存中已经有了请求方的 IP 和 MAC)向 128.32.1.33 返回响应,这个响应包含了 128.32.1.77 的 IP 地址和 MAC 地址。这样两台主机的内存中就都有了对方的 IP 和 MAC 地址。

而网段内其他收到这个 ARP 请求的主机发现自己的 IP 不匹配,则会丢弃这个帧。这里就出现问题了,假设另一台主机 128.32.1.123 伪装自己并对 ARP 请求发起了响应,这就叫 ARP 欺骗 ,了解即可。由于 ARP 过程发生在局域网内,一般企业内也不会有人做这种事。

3# ARP 缓存

上面提到,通过 ARP 请求获取到的 IP-MAC 对应关系会储存在内存中,这就称之为 ARP 缓存 。ARP 高效运行的关键就是维护每个主机上的 ARP 缓存 。这个缓存有一个到期时间,正常情况下是 20分钟
在 Linux 和 Windows 下都可以使用 arp 命令查看 ARP 缓存。
在 Linux 下得到的输出如下:

1
2
3
Linux% arp
Address HWtype HWaddress Flags Mask Iface
gw.home ehter 00:0D:66:4F:60:00 C eth1

分别是主机名、硬件地址类型、硬件地址、标志、本地网络接口。需要注意的是,在 Windows 中 MAC 地址是长这样的:00-0D-66-4F-60-00 ,用短横线分割。
标志 包含三种, C 由 ARP 协议动态学习, M 由手工录入, P 表示“发布”,这个选项用于配置代理 ARP。代理 ARP 也属于 ARP 欺骗的一种,并不常见,通常应该尽量避免使用它。

4# ARP 基本命令

arp -a 显示所有 ARP 缓存条目
arp -d 删除某个条目
arp -s 增加一个条目,需要 IP 地址和 MAC 地址。这个条目是半永久性的(在缓存中不会超时,但重启系统会消失)。

通常情况下,一些没有键盘但兼容以太网、TCP/IP协议的嵌入式设备,使用 DHCP 自动分配地址和其他信息,但也有可能使用 ARP 来设置 IP 地址的情况。这时候就会使用到 arp -s 命令。

ARP 是 TCP/IP 中的一个基本协议,在用户察觉不到的情况下运行。
ARP 用于确定本地可达的 IPv4 子网使用的 IPv4 地址所对应的硬件地址。
它在数据报的目的地与发送方处于同一子网时使用,还用于数据报的目的地不在本地时将其转发到一台路由器。
ARP 缓存是其运行的基础,可使用 arp 命令查看和处理缓存。缓存中的每个条目都有一个计时器,用于清除超时的条目。

0%