ARP:地址解析协议

1. ARP的数据包格式

以太网的帧头部(橙色部分)
广播MAC地址(全1):其目标是网络上的所有主机
MAC地址:请求地址解析的主机MAC地址 
协议类型:0x0806ARP协议)

ARP协议报文 硬件类型:表明ARP实现在何种类型的网络上。一般为0x0001,表示以太网地址  协议类型:代表解析协议(上层协议)。一般为0x0800表示IP 硬件地址长度:MAC地址长度,此处为6个字节 协议地址长度:IP地址长度,此处为4个字节 操作类型:代表ARP数据包类型。0表示ARP请求数据包,1表示ARP应答数据包   MAC地址:发送端MAC地址 IP地址:代表发送端协议地址(IP地址) 目标MAC地址:目的端MAC地址(待填充) 目标IP地址:代表目的端协议地址(IP地址)

    对于一个ARP请求来说,除目的MAC地址外其他字段都有填充值。当系统收到一个目的端是本季的ARP请求时,就把本机MAC地址填充,然后用两个目的端的地址分别替换两个源端的地址,并把操作类型置为2,然后发送回去。

    下图是电脑上使用wireshark软件抓包的一个ARP请求数据包。

  ARP应答协议报文和ARP请求协议报文类似。不同的是,操作类型字段,请求协议为1,应答协议为2;以及源MAC、源IP、目的MAC、目的IP不同;

 

2. ARP高速缓存

      该高速缓存存放着最近Internet地址到硬件地址之间的映射记录。每个映射记录都设置了生存时间(通常为几分钟或几十分钟),凡超过生存时间的记录都会从映射记录中删除。
     可以通过arp -a查看ARP高速缓存中的所有内容。
     可以通过arp -s来增加高速缓存中的内容,通过命令只能增加静态ARP信息。

       可以通过arp -s来删除高速缓存中的内容,比如arp -d 157.55.85.212

3. 代理ARP

    如果A R P请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托A R PA R P代理(Proxy ARP)。这样可以欺骗发起A R P请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。


   上图是代理ARP的应用例子,路由器从E0/0端口出来的属于子网:192.168.1.16,从E0/1端口出来的属于子网:192.168.1.32PC1需要向PC2发送报文时,因为PC1不知道子网的存在,并且与PC2属于同一个主网络网段。所以PC1将发送ARP请求广播报文来请求PC2MAC地址。
   报文到达路由器时,路由器识别出报文的目标地址属于另一个子网,因此向请求主机回复E0/0接口的MAC。之后PC1将发往PC2的数据包都发往MAC地址为11:22:33:44:55:67,由路由器将数据包转发到目标主机PC2。同样,路由器为PC2做同样的代理发送数据包的工作。这种ARP使得子网化网络拓扑对于主机来说是透明的。

4. 免费ARP

   因为它不是经过其他主机的ARP请求广播后发出的ARP广播,所以叫无故ARP,无故(Gratuitous ARPGARPARP也称为无为ARP,免费ARP。主机有时会使用自己的IP地址作为目标地址发送ARP请求。这种ARP请求称为无故ARPGARP

主要有两个用途:   <1> 检查重复地址(如果收到ARP响应表明存在重复地址)。   <2> 用于通告一个新的数据链路标识。当一个设备收到一个arp请求时,发现arp缓冲区中已有发送者的IP地址,则更新此IP地址的MAC地址条目。 
### 地址解析协议 (ARP) 介绍 地址解析协议(Address Resolution Protocol, ARP)是一种用于将网络层地址(通常是IP地址)转换成链路层地址(如MAC地址)的通信协议。该协议在网络中的主要职责是在局域网内提供一种机制,使一台计算机能够找到另一台计算机的硬件地址。 #### 工作原理 当源设备想要向同一子网内的目的设备发送数据时,它会先查找本地缓存中的ARP表项以获取对应的目的端MAC地址。如果找不到,则发起一个广播形式的ARP请求消息给整个局域网上的所有节点询问谁拥有特定的目标IP地址,并等待接收方回复其对应的物理地址信息[^1]。 一旦接收到回应,即包含了被查询机器的MAC地址的信息后,源设备不仅可以直接利用这个新获得的知识构建帧头并继续传输过程;还会更新自身的ARP高速缓存以便未来再次遇到相同的寻址需求时不需重复上述操作,从而提高了整体性能和效率[^4]。 #### 功能特性 - **动态映射**:ARP实现了从逻辑层面到物理层面的身份识别转变,确保即使在网络拓扑发生变化的情况下也能维持有效的通讯连接。 - **优化资源利用率**:通过维护临时性的映射条目而非永久存储每一对关联关系的方式减少了不必要的内存占用以及降低了因频繁交互所带来的带宽消耗问题。 - **支持逆向解析**:虽然标准定义下主要是由高层调用底层服务来完成正向变换工作,但在特殊应用场景里也允许借助于rarp/rarpd等工具实现相反方向的操作——也就是基于已知的MAC定位相应的IPv4标识符[^2]. ```python import socket from scapy.all import * def get_mac(ip_address): arp_request = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip_address) answered_list = srp(arp_request, timeout=2, verbose=False)[0] for element in answered_list: return element[1].hwsrc if __name__ == "__main__": target_ip = "192.168.1.1" mac_addr = get_mac(target_ip) print(f"The MAC address of {target_ip} is {mac_addr}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值