快速读懂ARP

一、ARP概述

已经知道一台主机的IP地址,需要找出其相应的硬件地址(物理地址)才能进行通信,ARP协议
就是解决这种问题的。
网络层使用的是IP地址,但是在实际网络链路上传送数据时,必须使用该网络的硬件地址。所以
要进行IP地址与硬件地址之间的映射。
ARP协议为IP地址到对应的硬件地址之间提供动态映射。

二、二层地址

MAC地址由48位组成,表示方法为12位十六进制地址,MAC地址在固定网卡中。
MAC地址也叫硬件地址或物理地址,而IP地址是一种逻辑地址。
真正实现通信物理寻址的是MAC地址

三、ARP协议工作原理

某主机需要发送数据报时,首先在其ARP高速缓存表中查看是否有目的IP地址对应的MAC地址,
如有,则将MAC地址写入数据帧中,然后将该帧发送到目的MAC地址的主机。
若没有,则在本局域网上广播一个ARP请求分组
在本局域网上的所有主机都会收到此ARP请求分组。
(1)主机收到此ARP请求分组首先检查分组中的IP地址是否与自己的IP地址一致
(2)地址不一致,就丢弃该ARP请求分组,不予以回应。
(3)地址一致,将请求分组中的源IP地址与源MAC地址写入自己的ARP高速缓存表中,如
果已经存在,则覆盖。然后将自己的MAC地址写入ARP响应分组中,单播发送给源主机。
源主机收到ARP响应分组后,就在其ARP高速缓存表中写入目的主机的IP地址到硬件地址的映
射。

四、ARP协议工作例子

1.首先主机A想要向主机B通信,但是主机A不知道主机B的MAC地址,只知道IP地址,此时主机A会向本局域网广播一个ARP请求分组(请求分组中目的MAC地址为全F)

在这里插入图片描述
2.本局域网中的所有主机都收此ARP请求分组,主机C收到此ARP请求分组,检查分组中的目的IP与自己的不一致,丢弃,不回应。主机B收到此ARP请求分组,检查分组中的目的IP与自己的IP一致,将自己的MAC地址写入ARP回应分组中,单播给主机A。
在这里插入图片描述

五、ARP高速缓存表

ARP高效运行的关键是因为每一台主机里都有一个高速缓存表。表里存放了最近IP地址到MAC地址之间的映射记录。表中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。
在这里插入图片描述
常用arp命令:
arp -a:查看ARP缓存表中记录
arp -d:清除记录

六、ARP的分组格式

在以太网上解析IP地址时,ARP请求和应答分组格式:
在这里插入图片描述
以太网目的地址:全为1,是广播地址。
以太网源地址:发送ARP请求的主机的MAC地址。
帧类型:表示后面数据的类型。对于ARP请求或者应答来说,该字段的值为0x0806。
硬件类型:网络接口硬件的类型,值是1表示以太网地址。
协议类型:要映射的协议地址类型,值为0x0800表示IP地址。
硬件地址长度:对于以太网,地址长度为6字节。
协议地址长度:对于IP协议,地址长度为4字节。
OP(操作)
1——ARP请求
2——ARP响应
3——RARP请求
4——RARP响应
后四个字段是发送端的硬件地址、发送端的IP地址、目的端的硬件地址和目的端的IP地址。
以太网首部中的以太网原地址和ARP请求分组中的发送端以太网地址是一致的。
对于一个ARP请求来说除了目的以太网地址外,其他字段均填充。

目的端收到ARP请求后,将硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,
并把操作字段置为2,然后发出。

7、代理ARP

所谓代理ARP(proxy ARP)就是路由器“假装”目标主机来回答ARP请求,所以源主机必须先把数据帧发给路由器,再由路由器转发给目标主机。
为什么要使用代理ARP?
因为广播包只能在本局域网内广播,路由器不转发广播包,当局域网中的主机要与另一个局域网中的主机通信时,需要获取到对方的MAC地址,就需要用到代理ARP来解决这个问题。
这种技术不需要配置默认网关,也不需要配置路由信息,即可实现子网之间的通信。

用以下例子说明代理ARP:
在这里插入图片描述
1.主机A与主机B属与两个不同的子网中,
2.主机A要需与主机B通信,主机A广播发ARP请求分组,请求主机B的MAC地址,但是路由器不
转发广播包,所以主机B无法收到广播包,主机A就收不到ARP请求分组的响应。
ARP请求分组如下:
在这里插入图片描述
3.路由器检查路由表,查看主机B在哪一个子网中,然后路由器就以自己的MAC地址回答主机A。
路由器发送得分组如下:
在这里插入图片描述
4.此时主机A中的arp缓存表为
在这里插入图片描述
此后主机A就把所有给主机B的的分组发给MAC地址为00-00-0c-94-36-ab的主机,这就是路由器的网卡地址

8.免费ARP

免费ARP有两个方面的作用:

  1. 一个主机可以通过它来确定另一个主机是否设置了相同的 I P地址。主机b s d i并不希望 对此请求有一个回答
  2. 如果发送免费A R P的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接 口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的 更新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARP(Address Resolution Protocol)是一种用于将IP地址解析为物理地址的协议。在ARP中,ARP请求和ARP响应是两个重要的概念。 - ARP请求:当主机A需要与主机B通信时,如果主机A不知道主机B的MAC地址,就会发送一个ARP请求广播,请求网络中的所有主机帮助它找到主机B的MAC地址ARP请求中包含了主机A的MAC地址和IP地址,以及目标主机B的IP地址。 - ARP响应:当主机B收到ARP请求后,如果发现自己的IP地址与请求中的目标IP地址相同,就会向主机A发送一个ARP响应,告诉主机A自己的MAC地址ARP响应中包含了主机B的MAC地址和IP地址,以及请求主机A的MAC地址和IP地址。 以下是一个简单的ARP请求和ARP响应的例子: ```python # ARP请求 import socket import struct # 构造ARP请求数据包 src_mac = b'\x00\x0c\x29\x4f\x8e\xea' # 发送方MAC地址 src_ip = b'\xc0\xa8\x01\x01' # 发送方IP地址 dst_ip = b'\xc0\xa8\x01\x02' # 目标IP地址 ethertype = b'\x08\x06' # 以太网类型为ARP hwtype = b'\x00\x01' # 硬件类型为以太网 ptype = b'\x08\x00' # 协议类型为IPv4 hwlen = b'\x06' # MAC地址长度为6字节 plen = b'\x04' # IP地址长度为4字节 opcode = b'\x00\x01' # 操作码为ARP请求 dst_mac = b'\xff\xff\xff\xff\xff\xff' # 广播地址 arp_packet = dst_mac + src_mac + ethertype + hwtype + ptype + hwlen + plen + opcode + src_mac + src_ip + dst_mac + dst_ip # 发送ARP请求 s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0806)) s.bind(('eth0', 0)) s.send(arp_packet) # ARP响应 import socket import struct # 构造ARP响应数据包 src_mac = b'\x00\x0c\x29\x4f\x8e\xea' # 发送方MAC地址 src_ip = b'\xc0\xa8\x01\x02' # 发送方IP地址 dst_mac = b'\x00\x0c\x29\x4f\x8e\xea' # 目标MAC地址 dst_ip = b'\xc0\xa8\x01\x01' # 目标IP地址 ethertype = b'\x08\x06' # 以太网类型为ARP hwtype = b'\x00\x01' # 硬件类型为以太网 ptype = b'\x08\x00' # 协议类型为IPv4 hwlen = b'\x06' # MAC地址长度为6字节 plen = b'\x04' # IP地址长度为4字节 opcode = b'\x00\x02' # 操作码为ARP响应 arp_packet = dst_mac + src_mac + ethertype + hwtype + ptype + hwlen + plen + opcode + src_mac + src_ip + dst_mac + dst_ip # 发送ARP响应 s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0806)) s.bind(('eth0', 0)) s.send(arp_packet) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值