Address Resolution Protocol

来自osdev
Zhang3讨论 | 贡献2022年3月2日 (三) 07:46的版本 (创建页面,内容为“地址解析协议(Address Resolution Protocol),通常称为“ARP”,是一种允许主机在只有IPv4地址时获取远程主机的以太网地址(MAC)的协议。 从技术上讲,由于数据格式大小可变,ARP支持其它地址格式,但通常与Ethernet和IP地址一起使用。 应该注意的是,IPv6中通过不同的协议提供了类似的功能。 ==背景== ARP定义于[http://tools.ietf.org/html/rfc826 RFC826]。…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

地址解析协议(Address Resolution Protocol),通常称为“ARP”,是一种允许主机在只有IPv4地址时获取远程主机的以太网地址(MAC)的协议。 从技术上讲,由于数据格式大小可变,ARP支持其它地址格式,但通常与Ethernet和IP地址一起使用。

应该注意的是,IPv6中通过不同的协议提供了类似的功能。

背景

ARP定义于RFC826。 它运行在链路层上。

数据包格式

** 注 **

如果所有整数字面量都假定为小尾端表示。 那么发送数据包时,需要将16位和32位整数转换为big-endian。

C风格的数据包格式

struct arp
{
    u16 htype; //硬件类型
    u16 ptype; //协议类型
    u8  hlen; // 硬件地址长度(以太网=6)
    u8  plen; // 协议地址长度(IPv4=4)
    u16 opcode; // ARP操作码
    u8  srchw[hlen]; // 源硬件地址-hlen字节(见上文)
    u8  srcpr[plen]; // 源协议地址-plen字节(见上文)。如果IPv4只能是“u32”类型。
    u8  dsthw[hlen]; // 目标硬件地址-hlen长度字节(见上文)
    u8  dstpr[plen]; //目的协议地址——plen字节(见上文)。如果IPv4只能是“u32”类型。
};

描述

硬件类型 Hardware Type

发送ARP数据包的硬件层的类型。以太网是0x1,除非使用PPP或其它什么,否则不需要任何其它值。

协议类型 Protocol Type

ARP请求使用的协议地址的类型。 IP是0x0800。 同样,除非你有不寻常的需求,否则你不应该在这里需要另一个值(在这种情况下,你应该知道你在做什么)。

硬件长度 Hardware Length

硬件层类型的硬件地址长度。 MAC地址的长度为6字节。

协议长度 Protocol Length

协议层的协议地址长度。IPv4地址的长度为4字节。

操作代码 Operation Code

区别要执行的操作。

源/目的硬件地址 Source/Dest Hardware Address

源主机和目的主机的硬件地址。 对于ARP请求操作时,大多数实现将目标MAC地址归零。

源/目的协议地址 Source/Dest Protocol Address

源主机和目的主机的协议地址。

操作(Operations)

ARP Request (ARP请求)

ARP请求允许主机查找IP已知主机的MAC地址。 它的操作码是0x0001。

ARP Reply (ARP应答)

ARP应答是对ARP请求的响应。 它的操作码是0x0002。 de:Address Resolution Protocol