目录
ARP载荷报文结构:
Hardware type(硬件类型)[2字节]:表示硬件(二层)地址类型,通常是以太网的地址类型。
Protocol type(协议类型)[2]: 表示协议地址类型,通常是IPv4。
Hardware size(硬件地址长度)[1]:指示硬件mac地址的长度,对于以太网取值是6个字节。
Protocol size(协议地址长度)[1]:指示协议地址的长度,对于IPv4是4个字节。
Opcode(操作)[2]: 指示ARP请求request或应答reply。
Sender mac address(发送者mac地址)[6]: 发送ARP请求或应答的设备的MAC地址。
Sender ip address(发送者ip地址)[4]: 发送ARP请求或应答的设备的IP地址。
Target mac address(目标mac地址)[6]: 用于ARP请求中的虚拟字段,因为ARP请求时目标设备的MAC地址是未知的。
Target ip address(目标ip地址)[4]: 目标设备的IP地址。
ARP 应答过程:
![](https://i-blog.csdnimg.cn/blog_migrate/fcb2e9e9a4a7d9e672069e1e594838af.png)
1.R1广播寻找对端
假设192.168.1.100/24第一次向192.168.1.101/24发送数据包时,R1构造要发送的数据包,知道:源MAC:R1 E0/0接口MAC;源IP:R1 E0/0接口IP地址192.168.1.100;目的IP:R2 E0/1接口IP地址192.168.1.101 ,但目的MAC未知,于是R1在R2正式通信前,R1需要发一个ARP的request报文请求R2的mac地址,由于不知道192.168.1.101究竟是哪台设备,所以会向同网段内/同一广播域所有设备发出询问(广播)。
类比一下:公司老总开庆祝会,大屏幕随机抽取员工送冰箱,抽到的人包邮送到家,这时小彭被抽中了,老总认识小彭吗?不认识,所以他就广播询问大家,哪个是小彭?
好,收到小彭答复后,小彭附上自己的家庭住址,老总在发件人上填上自己名字和发货地点,再填上小彭的名字和家庭住址后才能发货是吧。
但不同的是,第一次报文里的目的mac不可或缺,所以用FFFF.FFFF.FFFF代替。
在三层IP地址中,广播地址是IP地址里的最后一个地址,故同理,二层广播mac地址就是FFFF.FFFF.FFFF(MAC地址的取值空间是48bit,换成十六进制数表示就是12位)
2.对端单播回发
R2收到R1ARP的request报文后学习到R1的mac地址、IP地址,再将自己的mac地址、IP地址填入ARP的reply报文中发回。
以下是ARP抓包报文情况:(ARP请求包和应答包)
ARP缓存表:
R1收到R2的ARP应答包,记录R2包中的源mac地址、源IP地址(R2的mac、IP地址),存入自己的缓存表里,到了下次R1和R2再次通信时,就可以通过查找缓存找到R2的IP对应的mac地址,不再需要发送ARP请求,从而减少网络流量和提高通信速度。
ARP缓存表通常是设备上的一个表格,其中列出了局域网中已知的IP地址与对应的MAC地址。该表具有一定的生存期,一段时间没有通信活动后,老化计时器到期,主机系统探测几次都没应答,表中的条目就会因过期并被删除(动态表)。(如若主机设备重启,ARP表也会立刻消失)。在某些情况下,设备也可以手动清除ARP缓存表,以便重新获取最新的MAC地址信息。
一般来说,不同操作系统的老化计时器互不相同:Windows10分钟;华为华三20分钟。但随着操作系统的不断更新和网络设备的改进,ARP老化计时器的默认值也可能被调整为更短的时间,如2分钟,具体了解建议查阅该设备型号的文档或手册。此外管理员也可以对设备进行自定义配置,修改缓存表老化时间。
ARP代理:
即路由器或三层交换机的接口代替主机(接收方)给ARP请求者发送ARP应答包
代理过程:(静态路由为例)
![](https://i-blog.csdnimg.cn/blog_migrate/e10c74686769030347cfd3445d3c2557.png)
直连网络路由器发送数据包前,首先会对目的IP地址进行ARP解析。
1.当静态路由配置成出接口时,路由器会认为目的网络是直连网络,连接在某个接口下。如R1配置一条ip route 25.1.1.0 255.255.255.0 e0/2,即在R1的路由表中会出现如下路由
![](https://i-blog.csdnimg.cn/blog_migrate/2ddbe1b3e3d9c2c74a954ac55e198eaa.png)
即代表R1拥有25.1.1.0/24的条目,并且R1认为25.1.1.0/24网络是直连网络,因此当R1发送数据包时,ARP报文直接请求IP是25.1.1.5的MAC地址。R2收到后,发现25.1.1.5并不在本地,但是自己本地有25.1.1.0/24的路由条目,因此R2这台路由器会响应ARP请求(这个过程就称之为ARP代理)。此过程结束后,可以发现R1的ARP表项中IP与MAC并不是真实映射。同时,当25.1.1.0/24有多个目的IP时,这些IP都将出现在ARP表项中,且对应的MAC地址均为R2的F0/0接口。
2.当静态路由配置成下一跳IP地址的时候,类似于网络,只要将该路由对应的数据包发送给下一跳IP地址即可。如R1配置一条ip route 26.1.1.0 255.255.255.0 12.1.1.2,在R1的路由表中会出现如下路由:
![](https://i-blog.csdnimg.cn/blog_migrate/336879c8cb8f902ce82fda75101bbc50.png)
如R1收到一个数据包ping 26.1.1.6且静态路由配置为下一跳IP地址的时候,路由器会认为,要去往26.1.1.0/24网络,只要将数据包发往12.1.1.2即可,因此当R1有去往12.1.1.0/24网络的数据包时,ARP报文请求12.1.1.2的MAC地址。R2收到后发现是本地的IP地址因此对其进行ARP响应。此时R3上12.1.1.2的ARP条目是真实映射,并且无论26.1.1.0/24内有多少IP地址,R1要去往该网络只需要这一个ARP条目。
故:配置静态路由以下一跳更好
应用场景:
1.同一网段不同广播域(用的比较少)
需要互通的主机(接收方)没有没有配置网关,并且这两台主机(发送方和接收方)处于同一网段,但在不同的物理网络里
- 同一广播域:连接到同一个交换机(或多台交换机直连)
- 同一网段:具有相同的网络前缀。
- 同一广播域:意味着设备可以通过广播消息相互通信;同一网段:意味着设备的IP地址处于同一个IP地址范围内,使它们可以直接通信而不需要通过路由器。
- 同一个网段的设备通常也属于同一个广播域,而一个网段可能包含多个广播域(通过使用VLAN等技术)。网段用于将IP地址划分为逻辑组,而广播域用于决定设备之间广播消息的传播范围。
2.vlan内的ARP代理 (用的更少)
需要互通的主机处于相同vlan,但又是同一网段(不同子网),如:
-
跨楼层或跨建筑的网络:当一个VLAN覆盖了多个楼层或建筑时,每个楼层或建筑可能有自己的子网,但它们都位于同一个VLAN中,以便实现直接通信。
-
虚拟局域网扩展(VLAN Extension):有时候为了实现特定的网络要求,需要将多个不同的子网划分到同一个VLAN中。
3.vlan内的ARP代理 (更更离谱)
需要互通的主机处于同一网段,但vlan不同,基本不会出现
免费VRP
不知道大家配置时,有没有遇到过“error:主机IP地址冲突”,就是免费ARP造成的。
原理:当一台主机刚配置好一个IP后,他会广播全网发送一个,目的mac地址全0、目的IP是自己的请求包,如果有设备回应,便证明IP地址冲突。