ARP协议

本文详细介绍了ARP协议的基本概念、格式及工作原理。通过具体场景演示了如何利用ARP协议获取局域网内其他主机的硬件地址,并提供了ARP命令的实际应用示例。

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

一、理解ARP协议
1、ARP协议的基本概念
(1)ARP协议就是地址解析协议;
(2)ARP协议是网络层的协议;
(3)ARP协议的用途是从网络层的IP地址解析出在数据链路层的硬件地址;
(4)每台主机都有一个ARP高速缓冲区,该缓冲区中存放了本局域网上各主机和路由器的IP地址到硬件地址的映射表。注意:该映射表经常动态更新。
2、ARP协议的格式
(1)格式如下图
这里写图片描述
说明:
(1)如果是ARP请求,则以太网目的地址的48个字节为全1,表示广播地址;如果是ARP应答,则以太网的目的地址为发送ARP请求的主机的硬件地址;
(2)哪台主机发送ARP请求/应答,就填哪台主机的硬件地址;
(3)帧类型填0x0806表示ARP帧;
(4)硬件类型填0X0001表示以太网;
(5)协议类型填0x0800表示IP协议;
(6)硬件地址长度为6;
(7)协议地址(IP协议)为4;
(8)op为0x0001表示ARP请求,op为0x0002表示ARP应答;
(9)发送端以太网地址表示发送ARP请求的主机的硬件地址;
(10)发送端IP地址表示发送ARP请求的主机的IP地址;
(11)目的以太网地址表示目的主机的硬件地址;
(12)目的IP地址表示目的主机的IP地址;
3、举例说明
场景一:主机A要向本局域网上的主机B发送IP数据报,主机A知道主机B的IP地址,目的是获得B主机的硬件地址。
步骤
前提:主机A先在其ARP高速缓存中查看有无B主机的IP地址;
情况一:如果找到了B主机的IP地址,就在自己的ARP高速缓存中查出B主机的硬件地址;

情况二:如果A主机没有在自己的ARP高速缓存区中查到B主机的IP地址,主机A就自动运行自己的ARP进程,然后按照以下步骤找出B主机的硬件地址
(1)主机A的ARP进程在本局域网上广播发送一个ARP请求,该请求的主要内容是:我的IP地址是192.168.0.55,硬件地址是00-05-5d-61-58-a8,我想知道IP地址为192.168.0.2的主机的硬件地址;
ARP请求格式如下:
这里写图片描述
(2)在本局域网上的所有主机运行的ARP进程都会接收到主机A的ARP请求,然后所有的主机都会将自己的IP地址与ARP请求中的IP地址对照,如果相同则接收这条ARP请求,否则不予理睬;
(3)主机 B的IP地址与ARP请求中的IP地址一致,就收下这条ARP请求,并向主机A发送ARP应答,该应答的主要内容是:我的IP地址是192.168.0.2,我的硬件地址是00-05-5d-a1-b8-40;
(4)主机A接收到主机B的ARP应答,就在其ARP高速缓存中写入主机B的IP地到硬件地址的映射。

主机A获得了主机B的硬件地址之后就将查到的B主机的硬件地址写入MAC帧,通过局域网将该MAC帧发给B主机;
4、几点注意事项
(1)当主机B接收到主机A的请求时,就将主机A的地址映射写到自己的ARP告诉缓存中,以后主机B向主机A发送数据报就很方便了;
(2)ARP高速缓存区总的每个映射地址都有生存时间,凡是超过生存时间的映射地址就会被删掉;
(3)ARP是解决同一局域网内的主机或者路由器的IP地址和硬件地址的映射问题的;
(4)从IP协议到硬件地址的解析是自动的,主机的用户对这种解析的过程是不知道的。
二、ARP脚本
介绍几个常用的命令
1、ifconfig命令
这里写图片描述
说明:
(1)eth0表示第一块网卡;
(2)Etherent表示连接的是以太网;
(3)HWadder:表示网卡的物理地址(MAC地址);
(4)inet addr:表示网卡的IP地址;
(5)Bcast:表示广播地址;
(6)Mask:表示掩码地址;
(7)第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节

(8)第四、五行:接收、发送数据包情况统计

(9)第七行:接收、发送数据字节数统计信息;
(10)lo 是表示主机的回环地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。
2、ping命令
(1)功能:Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性。
(2)命令格式:ping [参数] [主机名或IP地址]
(3)参考文章PING命令
3、arp -a 命令
功能:arp -a是用来查看地址解析表的,还有可以查看所有连接了我的计算机,显示对方IP和MAC地址
编写一个ARP脚本抓取对应主机硬件地址(MAC地址)
代码如下:
这里写图片描述
通过arp -a命令可以查看和当前设备有连接的所有IP地址和对应的MAC地址,可以发现有两个设备连接。
这里写图片描述

### ARP协议的工作原理 ARP(Address Resolution Protocol)是用于将IP地址解析为MAC地址协议。在网络通信中,数据传输依赖于MAC地址而非IP地址。每个设备在发送数据之前,必须知道目标设备的MAC地址。如果只知道目标设备的IP地址而不知道其MAC地址,则需要通过ARP协议进行查询。 当一个设备需要解析目标设备的MAC地址时,它会广播一个ARP请求帧。该请求帧包含自己的IP地址MAC地址作为源信息,以及目标设备的IP地址[^3]。所有接收到此广播的设备都会检查是否与请求中的目标IP地址匹配。如果匹配,则目标设备会向发起请求的设备发送一个单播ARP应答帧,其中包含其自身的MAC地址[^1]。 #### ARP缓存的作用 为了提高效率并减少网络中的广播流量,设备通常会维护一个ARP缓存。这个记录了已知IP地址MAC地址之间的映射关系。当设备需要解析某个IP地址对应的MAC地址时,首先会在本地ARP缓存中查找。如果找到匹配项,则直接使用缓存中的MAC地址;如果没有找到,则发起ARP请求[^5]。 #### ARP协议MAC地址的关系 ARP协议的核心功能就是建立IP地址MAC地址之间的映射关系。在网络通信中,IP地址用于标识主机的位置,而MAC地址用于标识主机的物理接口。当两台主机位于同一子网内时,它们可以直接通过ARP协议解析彼此的MAC地址并进行通信。如果两台主机不在同一子网内,则需要通过路由器转发数据包。在这种情况下,源主机首先需要解析默认网关(通常是路由器接口)的MAC地址,然后将数据包发送给路由器[^3]。 ```python # 示例代码:模拟ARP请求与应答过程 class ARP: def __init__(self): self.cache = {} def request(self, source_ip, source_mac, target_ip): print(f"Broadcasting ARP request: Who has {target_ip}? Tell {source_ip}") return {"type": "request", "source_ip": source_ip, "source_mac": source_mac, "target_ip": target_ip} def reply(self, source_ip, source_mac, target_ip, target_mac): self.cache[target_ip] = target_mac print(f"Sending ARP reply: {source_ip} is at {source_mac}") return {"type": "reply", "source_ip": source_ip, "source_mac": source_mac, "target_ip": target_ip} # 创建ARP实例 arp = ARP() # 发起ARP请求 request_packet = arp.request("192.168.1.10", "AA-BB-CC-DD-EE-FF", "192.168.1.1") # 接收ARP应答 reply_packet = arp.reply("192.168.1.1", "00-11-22-33-44-55", "192.168.1.10", "AA-BB-CC-DD-EE-FF") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值