由于本人学艺不精,如有错误请各位看官也指出问题,互相学习
进入正题……
arp 基础
我们将数据发送到另一台设备时,会将数据进行封装,在IP层(网络层或网际层)是要知道对方的IP地址,也是网络层提供的IP,IP数据必须封装成数据帧(数据链路层)才会进行发送,数据链路层中包含mac地址,所以要获取目的mac地址才会将数据帧发送给目标设备,这获取的部分是由arp(地址解析协议 Address Resolution Protocol)解决
看下arp的报头
hardware type (硬件类型):
protocol type (协议类型):IP地址
hardware length(硬件长度):就是硬件地址(mac)一般是占48bit(6字节)
protocol length (协议长度):这里主要是指IP地址长度32bit(4字节)
operation code(运行代码):主要是标识这是一个arp请求还是一个应答包
请求是1,应答是2
source hardware address (源mac地址)
source protocol address(源IP地址)
destination hardware address(目标mac地址)
destination protocol address(目标IP地址)
!!!!注意:arp包是不能穿过路由器的也不能转发到其他广播域里面
工作流程:首先根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址假设是12.1.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
如果主机A在ARP缓存中没有找到映射,(arp去获取目标的mac地址时,目标mac会是全F
)它将找B:12.1.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。
主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存
( arp是单播包)
。本机缓存是有生存期的(默认是4小时单指华为),生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
arp代理:是为了解决跨网段通信问题
当图中路由器收到一个arp请求是10.2.0.1的mac地址,路由器拆到网络层发现不是找自己的,在正常情况下都是会丢弃(不回复),有两种方法让它们可以正常通信 1、当路由器知道10.2.0.1在那就会直接通信 2、如果路由器不知道,就在路由器上的g0/0/0上开启arp请求(手动)
开启arp代理的命令(路由器两个接口都要开启不然会出现问题)
代理arp工作流程:A主机去访问B时要去获取mac地址
,但是中间有一台路由器相当于是跨网段通信,跨网段获取不到arp(前面又说到arp不能穿越路由器),所以把路由器当做是一个代理或者是一个中介,把路由器的两个接口都开启arp代理,当A获取B的mac地址时,发送给路由器,这时路由器收到A发来的包就会给A回应并说明 路由器是B
,路由器也会创建一个缓存表将A加入到表中,
这时pc1会发一个icmp请求
路由器这时就会去找pc2:
pc2会发送一个回应:
这个时候路由器就会发送icmp请求,并且目标mac改为pc2的mac地址
PC2回应(注意mac地址)路由器的g0/0/02开启了代理所以目的mac填c
路由器回应A的icmp
PC1和PC2通信正常!!!
免费/无故arp:
主要是用于检测IP地址冲突问题
自己问自己,如果有人回应,说明本网段地址冲突
并且报文会表示这是一个免费arp还是代理arp