数据封装时,会封装自己的IP地址和目的IP地址还有自己的mac地址和目的mac地址
ARP - 地址解析协议作用:
将在已知IP地址的情况下,求与之对应的mac地址。
ARP协议 是基于数据链路层的2.5层协议。
同网段的情况下
首先主机会对比对方是否和自己在同一网段下
计算方法:
自己的IP和自己的掩码
对方的IP和自己的掩码
如果这俩计算在同一网段那么就查看本地的arp缓存表,看看是否有IP地址对应的mac地址,有的话进行数据封装,直接发送数据,没有的话发送ARP广播请求mac地址
地址都已经配置好并且在PC1的Ethernet0/0/1接口抓包
没有ARP缓存表的情况下(在主机上查看ARP表,没有看到)
例:主机192.168.1.1去ping另一台主机192.168.1.2,知道了源目IP(目的IP是你自己输入去ping的所以目的IP也知道)和源mac,但是不知道目的mac,所以发送ARP广播包去请求mac地址如下图
会发现该报文以broadcast(广播形式发送)其中目的mac(target-mac address)为FF-FF-FF-FF-FF-FF,代表暂时不知道mac地址,所以去请求mac地址【后面那段英文who has 192.168.1.2? tell 192.168.1.1(谁是192.168.1.2,请告诉192.168.1.1)】
接下来PC2收到该广播报文通过查看target-ip看是否是自己的接收端口的IP,如果是,则进行回复;如果不是,则丢弃,结果发现目的IP是自己就发送arp回复包(单播),如下
然后发现该报文中的源目IP和源目mac都已经封装好,回复给192.168.1.1【后面那段英文,192.168.1.2 at 54:89:98:fb:31:0a(192.168.1.2 在这个54:89:98:fb:31:0a mac地址下) 】
由于告诉了PC1 192.168.1.2的mac地址那二者就可以进行通信了
有ARP缓存表的情况下
此时去ping192.168.1.2
由于已经知道IP地址和mac地址对应的关系了所以直接进行数据封装(那个spanning tree是交换机发送的生成树报文,与本文无关)
不同网段的情况下:
首先主机会对比对方是否和自己在同一网段下
计算方法:
自己的IP和自己的掩码
对方的IP和自己的掩码
如果这俩计算在不同网段那么就查看本地的arp缓存表,看看是否有网关IP地址对应的mac地址,有的话进行数据封装,直接发送数据,没有的话发送ARP广播请求网关的mac地址
基础配置如下
此时arp表为空
在PC1去pingPC2并且在PC1的接口下抓包
会发现主机先去请求了网关的MAC地址,然后网关给它回了个arp回复包,然后主机直接发送数据(第一个ping包timeout是因为发ARP请求包,时间太长导致的)
免费ARP:
在本文中用于地址冲突检测:
配置了一个IP地址后,会发送免费IP地址(源目IP地址都是自己)在广播域内寻找有没有设备使用这个192.168.1.1地址,如果有设备收到并且回包(代表该设备使用该地址,这个是地址冲突),没有回包的情况是正常的
没有回包代表该广播域内没人使用这个IP地址,所以该设备可以使用这个地址
代理ARP(ARP欺骗)
实验环境:
AR1配置了接口IP地址
AR2配置了接口IP地址
AR2配置了静态路由(出接口):
[AR2]ip route-static 192.168.2.0 24 g0/0/0
AR3配置了接口IP地址
AR3配置了静态路由(出接口):
[AR3]ip route-static 192.168.1.0 24 g0/0/0
然后用AR2pingAR3
ping不通
此时在中间路由器AR1两个接口开启ARP代理
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]arp-proxy enable
[AR1-GigabitEthernet0/0/0]int g0/0/1
[AR1-GigabitEthernet0/0/1]arp-proxy enable
接下来用AR2pingAR3
图中R2和R3处于不同的广播域中,R2和R3在相互通信时,R2先发送了一个ARP广播数据包,请求R3的mac地址,但是由于R2是192.168.1.0网段,而R3是192.168.2.0网段,R2和R3之间是跨网段访问的,也就是说R2的ARP请求会被R1拦截到,然后R1会封装自己的接口mac地址为目的地址发送一个ARP回应数据报给R1 (骗AR2说你要寻找的目的IP地址是这个mac地址),然后R2就会代替R1去访问R3。
在路由器AR2上查看arp表:
查看AR1的g0/0/0的接口mac:
可以发现去192.168.2.0 网段对应的mac地址是AR1的g0/0/0接口下的mac地址
这个过程R2以为自己访问的是R3,实际上真正去访问R3的是R1,R2却并不知道这个代理过程
这就是所谓的ARP代理,通常用于跨网段访问。