ARP协议

一、概念

        APR协议,全称Address resolution protocol,地址解析协议,属于TCP/IP协议簇中的网际层,但与MAC紧密相连,所以也有人说是属于2.5层。

二、目的

        已知IP地址,获取其MAC地址。

三、原理

        主机想要知道某个IP的MAC地址,查询自身ARP高速缓存表后,发现并没有,则构建一个ARP数据包(ARP请求),以广播的形式发送,广播域中,所有主机都能收到这个广播帧,非目的主机收到后,发现其IP地址与自身不匹配,则丢弃该帧,目的主机收到后,先将源主机MAC与IP的对应关系存入自身ARP高速缓存表中,之后构建一个单播的ARP帧(ARP响应),发送给源主机。

        可以理解为,某个人站在广场,知道另一个人的名字但不知道地点,就大吼一声问“xxx你在哪儿”,这是ARP请求,另一个人大声回应“我在这儿”,这是ARP响应。

四、范围

        ARP只能在同一广播域中,若要跨网络,目的主机会向网关进行ARP交互,网关又和下一个路由器进行ARP交互,直到找到目的主机。

五、报文格式

        Hardware type 硬件类型(2字节):以太网是1;

        Protocol type 协议类型(2字节):IP协议是0800;

        Hardware size 硬件长度(1字节):MAC是6字节,所以这里一般是6;

        Protocol size 协议长度(1字节):IP是4字节,所以这里一般是4;

        Opcode 种类(2字节):1是请求,2是响应,3是RARP请求,4是RARP响应

        Sender MAC address 源MAC(6字节):发送方MAC

        Sender IP address 源IP(4字节):发送方IP;

        Target MAC address 目的MAC(6字节):目的方MAC;

        Target IP address 目的IP(4字节):目的方IP。

        注:以上的MAC或者IP没有的话则是填0。

六、ARP Probe(ARP探针)

        主要用于检测广播域中是否有与自己相同IP地址的主机,这时的发送发IP全部为0,是为了防止ARP污染广播域中其他主机的ARP池,具体流程会写在DHCP中。

七、ARP攻击

        由于ARP是建立在网络中各个主机都互相信任的前提下,主机收到ARP应答时,不会检验其真实性,所以如果攻击方主机不断地朝着目的主机发送ARP应答,将目的主机ARP高速缓存表中网关MAC与IP的映射关系改变,则可能导致目标主机不能上网或是所发出、接收的流量会经过攻击方主机,造成极大的安全性问题。

八、ARP攻击的防御及解决办法

        1、设置静态MAC对应表;

        2、定期检查ARP响应的真实性;

        3、若是已经中招,则清除ARP缓存,重新设立对应关系,或是切换网络。

<该文档为复习自用,如果能给你有什么启发,非常开心,如果能帮忙指出错误,万分感谢>

### 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、付费专栏及课程。

余额充值