ARP 原理
ARP(Address Resolution Protocol)地址解析协议,是根据 IP 地址获取物理地址的一个 TCP/IP 协议。
OSI 网络七层模型中,IP 地址在 OSI 模型第三层,MAC 地址在第二层,彼此不直接通信。
在通过以太网发送 IP 数据包时,需要封装第三层(32 位 IP 地址)和第二层(48 位 MAC 地址)的报头。由于发送数据包时,只知道目标 IP 地址,不知道其 MAC 地址,而又不能跨越第二、三层,所以需要使用 ARP 地址解析协议。
TCP/IP 协议栈加人 ARP 过程是给发送端设备提供一种询问机制,“ 谁的 IP 地址是这个地址,与它相关的物理地址(硬件 MAC )是什么?”
ARP 报文和 IP 报文不同。ARP 报文和 IP 报文一样可以嵌在以太网帧或任何 LAN 帧中。ARP 帧仅在特定的局域网网段中才有效,而且它也不会离开本地局域网(也就是说,ARP 报文不可以被路由)。
代理 ARP
代理 ARP 就是通过使用一个指定的设备(通常是路由器)使用其 MAC 地址来对另一设备的 ARP 请求作出应答。
路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。
ARP 请求是个广播包,它查寻的对象如果在同一个局域网内,就会收到应答,但如果不在同一个局域网该如何处理?
路由器就提供的代理 ARP 为该问题提供了解决方案。
举例:两台主机 A 和 B 处于同一网段但不同的广播段时,主机 A 发送 ARP 请求主机 B 的 MAC 地址时,因为路由器不转发广播包的原因,ARP 请求只能到达路由器。
如果路由器启用了代理 ARP 功能,并知道主机 B 属于它连接的网络,那么路由器就用自己接口的 MAC 地址代替主机 B 的 MAC 地址来对主机 A 进行 ARP 应答。主机 A 接收 ARP 应答,但并不知道代理 ARP 的存在。
ARP 报文格式
ARP 报文结构如图所示
上图中展示了 28 字节的 ARP 报文,因为其包括了 1 字节、2 字节、4 字节和 6 字节等不同长度的字段,因此不能直接以普通 32 位的方式显示。前五个字段构成了报文头部。紧接着的 4 个字段表示发送端和目的端 IP 地址与 MAC 地址。一般来说,目的 MAC 地址需要用地址解析得出。ARP 报文还可以由一串个数不定的 0 结尾。
在以太网局域网中,ARP 报文有自己的以太网类型值 (0x0806)。然而有些 ARP 实现使用了 IP 分组中 “常规的” 以太网类型 (0x0800),因为 IP 网络可以很容易地识别出帧内部是 IPv4 报文(报文以 0x04 开头),还是 ARP 报文(报文以 0x0001 开头)。
以下主要的字段在 ARP 请求和应答报文中都会出现。硬件类型 —— 用 2 字节的字段标识硬件地址的类型 (其常见的当然是以太网类型的 MAC 地址,其值 = 1)。
协议类型 —— 用 2 字节的字段标识第三层(网络层)所用到的协议类型(ARP 消息不是 IP 报文,不止用于 IP 地址解析)。这个值和以太网帧中字段的值是一样的,所以 IP 是 0x0800。
硬件地址长度 —— 6 字节,标识硬件以太网 MAC 地址的长度。
协议地址长度 —— 4 字节,标识第三层协议 IP 地址的长度。
操作 —— 2 字节,标识 ARP 报文的目的。
操作 op 共有 4 种类型
值为 1. ARP 请求
值为 2. ARP 应答
值为 3. RARP 请求
值为 4. RARP 应答
例如,当 ARP 发起一个请求(询问谁有这个 IPv4 地址),该字段的值就为 1,收到的应答报文的该字段值为 2。剩下的字段都没有固定的长度,其长度取决于硬件长度字段和协议长度字段的值。在以太局域网中,硬件地址长度是 6 字节(MAC 地址),协议地址长度是 4 字节(IPv4 地址)。在这种情况下,这些字段的长度和功能如下所示。
发送端的以太网地址 —— 6 字节,标识了发送端的以太网地址。它应该与以太网帧中的源地址相同。
发送端的 IP 地址 —— 4 字节,标识了发送端的以太网 IP 地址 (这是目的端可以在不请求更多 ARP 的情况下将信息填人 ARP 缓存的方式)。
目的端以太网地址 —— 6 字节,标识了目的端主机的以太网地址。该字段在发送请求的时候全置为 0,应答时才填入内容,并把操作字段改为 “应答”。
目的端 IP 地址 —— 4 字节,标识目的端主机的 IPv4 地址。
ARP 报文是广播帧,会被发送给所有站点。当目的端设备在数据包的 IP 层中看到目的 IP 地址与自己的 IP 地址匹配时,就直接响应发送端。目的端设备发送响应的时候,只是简单地把 ARP 数据包中的源 IP 地址和目的 IP 地址反转
。目的端设备在帧和报文中也使用自己的硬件地址作为源地址。
ARP 报文的封装
ARP报文被封装成一个数据链路帧
ARP 封装使用类型字段(Type field)标识为 0x0806,表示这是一个地址解析协议(ARP)数据包。不需要带有 Preamble 和 SFD。ARP 消息直接嵌套在以太网帧或其他局域网帧中,这些帧已经包含了前导码和帧起始定界符。
ARP 解析过程 by charsek
via: ARP 报文详解 - charseki - 博客园
https://www.cnblogs.com/chenshengkai/p/13936532.html
(1)当 PC1 想发送数据给 PC2,首先在自己的本地 ARP 缓存表中检查主机 PC2 匹配的 MAC 地址
(2)如果 PC1 缓存中没有找到响应的条目,它将询问主机 PC2 的 MAC 地址,从而将 ARP 请求帧广播到本地网络的所有主机。该帧中包括源主机 PC1 的 IP、MAC 地址,本地网络中的所有主机都接收到 ARP 请求,并且检查是否与自己的 IP 地址相匹配。如果发现请求中 IP 地址与自己 IP 不匹配,则丢弃 ARP 请求。
(3)主机 PC2 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 PC1 的地址和 MAC 地址添加到本地缓存表中。
(4)主机 PC2 将包含其 MAC 地址的 ARP 回复消息直接发送回主机 PC1(数据帧为单播)。
(5)主机 PC1 收到 PC2 发挥的 ARP 回复消息,将 PC2 的 IP 和 MAC 地址添加至自己 ARP 缓存表中,本机缓存是有生存期的,默认 ARP 缓存表有效期 120s。当超过该有效期后,则将重复上面过程。主机 PC2 的 MAC 地址一旦确定,主机 PC1 就能向主机 PC2 发送 IP 信息。
arp 报文总共 42 bytes。其中以太网首部 14 bytes,arp 字段 28 字节
ARP 返回报文
下一篇
ARP 原理详解 二 - CSDN博客
https://blog.csdn.net/u013669912/article/details/140080908