ARP协议概述--入门很好的文章

本文详细介绍了ARP协议,它用于将IP地址转换为以太网地址。阐述了ARP工作原理、报文格式及数据结构,还给出Linux下arp命令的使用示例,如显示缓存信息、设置静态或动态条目、删除条目等,同时提及不同系统中ARP静态与动态条目的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARP协议

1 ARP协议概述

IP数据包常通过以太网发送。以太网设备并不识别32IP地址:它们是以48位以太网地址传输以太网数据包的。因此,IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution ProtocolARP)就是用来确定这些映象的协议。

ARP工作时,送出一个含有所希望的IP地址的以太网广播数据包。目的地主机,或另一个代表该主机的系统,以一个含有IP和以太网地址对的数据包作为应答。发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。

如果有一个不被信任的节点对本地网络具有写访问许可权,那么也会有某种风险。这样一台机器可以发布虚假的ARP报文并将所有通信都转向它自己,然后它就可以扮演某些机器,或者顺便对数据流进行简单的修改。ARP机制常常是自动起作用的。在特别安全的网络上, ARP映射可以用固件,并且具有自动抑制协议达到防止干扰的目的。


1 以太网上的ARP报文格式

1是一个用作IP到以太网地址转换的ARP报文的例子。在图中每一行为32位,也就是4个八位组表示,在以后的图中,我们也将遵循这一方式。

 

 

 

 

ARP报格式说明:

1.硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1

2.协议类型字段指明了发送方提供的高层协议类型,IP080616进制)。可以看到ARP位于IP层和链路层之间,提供IP报向MAC帧的转换。

3.硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用。以太网硬件地址长度为48bitIP地址长度为32bit

4.操作字段用来表示这个报文的目的,ARP请求为1ARP响应为2RARP请求为3RARP响应为4

5.发送方首部是48bitMAC地址。发送方IP地址就是发送发32bitIP地址。

6.目的首部是48bitMAC地址,为NULL。目的IP地址就是目的端32bitIP地址。

当发出【ARP请求报文】时,发送方填好发送方首部(MAC)和发送方IP地址,还要填写目标IP地址。当目标机器收到这个ARP广播包时,就会在【ARP响应报文】中填上自己的48位主机地址(MAC)。

可以看到,请求报和应答报发生改变的就是首部和IP地址变化,其他均不变。封装成MAC帧的时候,目的MAC为广播MAC地址,FF:FF:FF:FF:FF:FF。

一个ARP报的数据结构实例(一共9项):

typedef struct arphdr
{
 unsigned short arp_hrd;   /*
硬件类型 */
 unsigned short arp_pro;   /*
协议类型 */
 unsigned char arp_hln;   /*
硬件地址长度 */ ―――MAC地址
 unsigned char arp_pln;  /*
协议地址长度 */  ―――IP地址
 unsigned short arp_op;   /* ARP
操作类型 */

 unsigned char arp_sha[6];  /* 发送者的硬件地址 */
 unsigned long arp_spa;  /*
发送者的协议地址 */
 unsigned char arp_tha[6];  /*
目标的硬件地址 */
 unsigned long arp_tpa;  /*
目标的协议地址 */
}ARPHDR, *PARPHDR;

==============================

2 ARP使用举例

我们先看一下linux下的arp命令(如果开始arp表中的内容为空的话,需要先对某台主机进行一个连接,例如ping一下目标主机来产生一个arp)

d2server:/home/kerberos# arp

Address          HWtype  HWaddress         Flags Mask            Iface

211.161.17.254   ether   00:04: 9A:AD: 1C: 0A      C                 eth0

Address:主机的IP地址

Hwtype:主机的硬件类型

Hwaddress:主机的硬件地址

Flags Mask:记录标志,"C"表示arp高速缓存中的条目,"M"表示静态的arp条目。

"arp --a"命令可以显示主机地址与IP地址的对应表,也就是机器中所保存的arp缓存信息。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。

d2server:/home/kerberos# arp -a

(211.161.17.254) at 00:04: 9A:AD: 1C: 0A [ether] on eth0

可以看到在缓存中有一条211.161.17.254相对应的arp缓存条目。

d2server:/home/kerberos# telnet 211.161.17.21

Trying 211.161.17.21...

Connected to 211.161.17.21.

Escape character is '^]'.

^].

telnet>quit

connetion closed.

在执行上面一条telnet命令的同时,用tcpdump进行监听:

d2server:/home/kerberos# tcpdump -e dst host 211.161.17.21

tcpdump: listening on eth0

我们将会听到很多包,我们取与我们arp协议相关的2个包:

1  0.0         00:D0:F8: 0A:FB:83      FF:FF:FF:FF:FF:FF  arp  60

                       who has 211.161.17.21 tell d2server

2  0.002344(0.0021)    00:E0: 3C:43:0D:24      00:D0:F8: 0A:FB:83  arp  60

                       arp reply 211.161.17.21 is at 00:E0: 3C:43:0D:24

                      

在第1行中,源端主机(d2server)的硬件地址是00:D0:F8: 0A:FB:83。目的端主机的硬件地址是FF:FF:FF:FF:FF:FF,这是一个以太网广播地址。电缆上的每个以太网接口都要接收这个数据帧并对它进行处理。

1行中紧接着的一个输出字段是arp,表明帧类型字段的值是0x0806,说明此数据帧是一个ARP请求或回答。

在每行中,单词后面的值60指的是以太网数据帧的长度。由于ARP请求或回答的数据帧长都是42字节(28字节的ARP数据,14字节的以太网帧头),因此,每一帧都必须加入填充字符以达到以太网的最小长度要求:60字节。

1行中的下一个输出字段arp who-has表示作为ARP请求的这个数据帧中,目的I P地址是211.161.17.21的地址,发送端的I P地址是d2server的地址。tcpdump打印出主机名对应的默认I P地址。

从第2行中可以看到,尽管ARP请求是广播的,但是ARP应答的目的地址却是211.161.17.21(00:E0: 3C:43:0D:24)ARP应答是直接送到请求端主机的,而是广播的。tcpdump打印出arp reply的字样,同时打印出响应者的主机ip和硬件地址。

在每一行中,行号后面的数字表示tcpdump收到分组的时间(以秒为单位)。除第1行外,每行在括号中还包含了与上一行的时间差异(以秒为单位)。

这个时候我们再看看机器中的arp缓存:

d2server:/home/kerberos# arp -a (211.161.17.254) at 00:04: 9A:AD: 1C: 0A [ether] on eth0 (211.161.17.21) at 00:E0: 3C:43:0D:24 [ether] on eth0

arp高速缓存中已经增加了一条有关211.161.17.21的映射。

再看看其他的arp相关的命令:

d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00

d2server:/home/kerberos# arp

Address          HWtype  HWaddress        Flags Mask       Iface

211.161.17.254     ether   00:04: 9A:AD: 1C: 0A     C            eth0

211.161.17.21      ether   00:00:00:00:00: 00      CM           eth0

d2server:/home/kerberos# arp -a

(211.161.17.254) at 00:04: 9A:AD: 1C: 0A [ether] on eth0

(211.161.17.21) at 00:00:00:00:00:00 [ether] PERM on eth0

可以看到我们用arp -s选项设置了211.161.17.21对应的硬件地址为00:00:00:00:00:00,而且这条映射的标志字段为CM,也就是说我们手工设置的arp选项为静态arp选项,它保持不变没有超时,不像高速缓存中的条目要在一定的时间间隔后更新。

如果想让手工设置的arp选项有超时时间的话,可以加上temp选项

d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00 temp

d2server:/home/kerberos# arp -a

(211.161.17.254) at 00:04: 9A:AD: 1C: 0A [ether] on eth0

(211.161.17.21) at 00:00:00:00:00:00 [ether] on eth0

d2server:/home/kerberos# arp

Address        HWtype  HWaddress         Flags Mask      Iface

211.161.17.254   ether   00:04: 9A:AD: 1C: 0A     C            eth0

211.161.17.21    ether   00:00:00:00:00: 00       C            eth0

可以看到标志字段的静态arp标志"M"已经去掉了,我们手工加上的是一条动态条目。

请大家注意arp静态条目与动态条目的区别。

在不同的系统中,手工设置的arp静态条目是有区别的。在linuxwin2000中,静态条目不会因为伪造的arp响应包而改变,而动态条目会改变。而在win98中,手工设置的静态条目会因为收到伪造的arp响应包而改变。

如果您想删除某个arp条目(包括静态条目),可以用下面的命令:

d2server:/home/kerberos# arp -d 211.161.17.21 

d2server:/home/kerberos# arp -a

(211.161.17.254) at 00:04: 9A:AD: 1C: 0A [ether] on eth0

(211.161.17.21) at  on eth0

可以看到211.161.17.21arp条目已经是不完整的了。

还有一些其他的命令,可以参考linux下的man文档:

d2server:/home/kerberos# man arp

 

 

后面关于ARP地址欺骗参考

http://www.net130.com/2004/5-30/20201.html

 

 

<think>好的,我现在需要回答用户关于网络层中ARP协议v1.1的工作原理与实现细节的问题。用户提到可能是关于版本v1.1的详细信息或实现,所以我要先确认ARP协议是否有v1.1这个版本。通常,ARP协议在RFC 826中定义,可能没有明确的v1.1版本,但可能存在一些更新或扩展,比如RFC 5227中的ARP改进。不过用户可能误将某个教材或资料中的版本号作为v1.1,所以需要先说明标准ARP协议的工作原理,并提及可能的扩展或改进版本。 首先,我需要整理ARP协议的基本工作原理。ARP协议负责将IP地址解析为MAC地址,以便在局域网中传输数据帧。当主机A需要向主机B发送数据时,如果不知道B的MAC地址,会发送ARP请求广播,询问哪个设备的IP地址对应目标IP。目标主机B收到后,会单播回复ARP响应,包含自己的MAC地址。主机A将这一映射存入ARP缓存,后续通信使用。 接下来,实现细节方面,需要考虑ARP报文结构。标准的ARP报文包括硬件类型、协议类型、硬件地址长度、协议地址长度、操作类型(请求或响应)、发送方和目标的MAC及IP地址。报文长度为28字节。在实现中,操作系统的网络栈处理ARP请求和响应,维护ARP缓存表,并处理超时机制,例如缓存有效期默认120秒,如引用[4]所述。 关于v1.1的可能改进,需要查看是否有相关RFC或资料提到。比如,RFC 5227中提出了IPv4地址冲突检测(ACD),这可能被视为ARP协议的扩展,但并非正式版本v1.1。因此,在回答中应指出标准ARP版本,并解释可能的改进或扩展,同时澄清版本号可能来自特定资料。 另外,用户提供的引用中有关于ARP攻击和防护措施的内容,如引用[3]和[4],需要在相关部分提及安全机制,如动态ARP检测、静态ARP表等,作为实现中的防护措施。 最后,生成相关问题,需要围绕ARP协议的工作原理、报文结构、缓存机制、安全问题和防护措施等方面展开。 现在需要确保回答结构清晰,分点说明,使用正确的中文和LaTeX格式,如行内公式用$...$,独立公式用$$...$$,并正确引用提供的参考资料。注意用户提到的v1.1可能需要说明版本信息,避免误导。</think>### 计算机网络 网络层 ARP协议 v1.1 工作原理与实现细节 #### 一、ARP协议基础 地址解析协议ARP)用于将网络层(IP地址)映射到数据链路层(MAC地址)。当设备需要在局域网内通信时,必须通过目标设备的MAC地址完成数据帧传输。如果发送方不知道目标MAC地址,则触发ARP协议进行解析[^1]。 #### 二、ARP v1.1 工作原理 1. **ARP请求广播** - 当主机A(IP:$IP_A$,MAC:$MAC_A$)需向主机B(IP:$IP_B$)发送数据时,若缓存中无$IP_B$对应的MAC地址,则发送**ARP请求报文**。 - 报文内容: ```plaintext 发送方IP: IP_A 发送方MAC: MAC_A 目标IP: IP_B 目标MAC: 00:00:00:00:00:00(全0表示未知) ``` - 该报文通过广播(目标MAC为`FF:FF:FF:FF:FF:FF`)发送至局域网内所有设备[^4]。 2. **ARP响应单播** - 主机B收到ARP请求后,若自身IP与目标IP匹配,则生成**ARP响应报文**,包含自身MAC地址$MAC_B$,并通过单播返回给主机A。 - 响应报文内容: ```plaintext 发送方IP: IP_B 发送方MAC: MAC_B 目标IP: IP_A 目标MAC: MAC_A ``` 3. **ARP缓存机制** - 主机A收到响应后,将$IP_B \rightarrow MAC_B$的映射存入ARP缓存表,默认有效期**120秒**(超时后需重新请求)。 - 缓存表可通过`arp -a`命令查看(Windows/Linux)。 #### 三、实现细节与v1.1扩展 1. **报文格式** ARP报文长度固定为28字节,结构如下: $$ \begin{array}{|c|c|c|c|c|} \hline \text{硬件类型} & \text{协议类型} & \text{硬件地址长度} & \text{协议地址长度} & \text{操作类型} \\ \hline 2字节 & 2字节 & 1字节 & 1字节 & 2字节 \\ \hline \end{array} \quad + \quad \text{发送方MAC(6字节) + 发送方IP(4字节) + 目标MAC(6字节) + 目标IP(4字节)} $$ 2. **v1.1可能的改进** - **版本说明**:标准ARP协议在RFC 826中定义,未明确划分版本号。“v1.1”可能指特定实现中的优化,如: - **冲突检测**:通过RFC 5227引入的IPv4地址冲突检测(ACD),防止IP重复分配[^3]。 - **安全性增强**:支持动态ARP检测(DAI)或静态ARP绑定,抵御ARP欺骗攻击。 3. **操作系统实现** - **请求处理**:网络驱动监听ARP广播,匹配目标IP后触发响应。 - **缓存管理**:使用哈希表存储ARP条目,超时后自动清理或更新。 - **命令工具**:如`arp`命令用于手动操作缓存(与ARP协议本身区分,见引用[2])。 #### 四、安全与防护 1. **ARP欺骗攻击** - 攻击者伪造ARP响应,篡改IP-MAC映射,导致流量劫持或中间人攻击。 2. **防护措施** - **静态ARP表**:手动绑定关键设备的IP-MAC映射。 - **动态ARP检测(DAI)**:交换机验证ARP报文合法性,阻止非法映射。 - **网络分段**:通过VLAN限制广播域,减少攻击面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值