本次问题用到的命令
特权模式下
清楚arp表命令
clear arp-cache
查看路由表
show ip route
测试连通性
ping [IP地址]
重启设备
reload
全局模式下
配置静态路由
ip route [需要添加的网段] [子网掩码] [下一跳接口IP/接口]
关闭代理ARP
no ip proxy-arp
绑定MAC地址
arp [需要绑定的IP] [需要绑定的MAC地址] arpa
ARP全称为:(Address REsolution Protocol) 地址解析协议
ARP的作用:将已知的IP地址解析为MAC地址
这里主要说明两个问题
1. 在进行PING命令时,第一个包会丢失。这是为什么
2.静态路由只写出接口和写上下一跳接口IP的区别。
下面几张图都是通过cisco packet tracer 调试模式下抓出来的数据包
第一个问题拓扑图如下
第一种情况在用同一个广播域下
192.168.1.1 ping 192.168.1.2
红色的框代表192.168.1.1接口的MAC地址
绿色的框代表发送的广播请求MAC地址和目标接口的MAC地址
MAC地址是以16进制表示的,所以对MAC地址的广播就是16个F表示
简单小结
1.因为PING命令使用的是ICMP协议,该协议需要获取接口IP的MAC地址,所以需要先使用ARP协议获取MAC地址。(上图就是ICMP报文)
2.ARP通过广播发单播回的形式请求MAC地址,目标设备会单独回复一个ARP包给源路由器,源路由器将发回MAC地址记录到ARP表中。
3.下一次访问同一个IP时,就可以直接访问,不会出现第一个包丢失的情况了。
第二种情况在不同广播域下(写下一跳IP的情况)
以下是拓扑图
192.168.1.1 ping 192.168.2.2
简单小结
ARP表
路由表
得ICMP包
1.因为设备没有PING过,没有MAC地址,所以都在发送ARP包请求MAC地址。但是为什么PING完后只有两条MAC地址,而没有2.2的MAC地址。
2.因为ARP并不请求目标的MAC地址,是去请求下一跳的MAC地址,而且路由器是根据路由表去解析和转发,不会超出自己的广播域。
3.R2打开MAC层查看确定是同一个广播域发来的,再去查看IP层,可以转发就把MAC地址换成能转发的接口的MAC地址,IP层不会被动。
**4.**在网络中每经过一个路由器,ARP都要都要编写一个新的头目,都是同一个广播域一层一层递推。
第三种情况在不同广播域下(只有出接口的情况)
拓扑图如下
将下一跳改为接口
更改前路由表
更改前ARP表
更改后路由表
更改后ARP表
这里会涉及一个东西叫做代理ARP,在路由器中没有下一跳IP的时候就会触发这个东西,思科设备接口默认代理ARP都是开启的,如果没有开启代理ARP只写出接口不写IP是不能通的。最直观的现象就是PING一条IP,就会形成一条新的映射,对应的MAC地址很有可能是同一个MAC地址。
在没有下一跳IP的时候,在这个拓扑图里,根据ICMP包内容,路由器将会在1.0的广播域里,去解析2.2的MAC地址,当然是不可能成功的。
这个时候能听到的只有1.2能响应,前提是开始代理ARP,如果发现这个包解析的不是本段的IP地址,认为没有网关,看自己有没有能力访问,如果这个设备有这个访问的地址。
这个时候出口接口连接的那个那个路由器上的接口的MAC地址发给源路由器,源路由器就会将这些MAC添加到ARP映射表。
这就是为什么全部都是1.2的MAC地址的原因
另外说一句只写出接口的话,超过三个路由器,就算设置每个路由设置了正确的出口方向,都有两个包,一个成功一个失败。
描述一下整个过程先上图
首先R1发送一个ICMP包,因为ICMP包中没有MAC地址发送失败
R1发送ARP包请求MAC地址,会从下一跳接口发出
R2接收到R1的请求,将R1的MAC地址写入自己的ARP表中,再回发一个ARP包,告诉R1接口的MAC地址。
R1收到ARP包,将R2的MAC地址写入到自己的ARP表中。
R1再发送ICMP包,给R2,R2接收到R1发过来的信息,R2发送一个ICMP包,因为ICMP包中没有MAC地址发送失败。
R2和R3重复R1和R2的过程,获取到R3接口的MAC地址,保存到R2的ARP表中。
R1再发送ICMP包,给R2,R2再发送ICMP包给R3,R3接收到ICMP包。R3发送一个ICMP包,给R2,R2发送一个ICMP包给R1,这样就完成一环PING命令。
这张拓扑图是不怎么看的出效果的因为只有一条路,如果只有一条路的话,不过是只写出接口,还是下一跳,都是差不多的。只不过只写出接口会产生大量的映射列表,挤占内存空间
一个具体的例子说明其区别
如果是这个样的拓扑图只写了出接口,R1去PINGR6,如果R2只写下面的接口就会产生次优先路径,上下接口都写会产生大量广播,都回去帮R1寻找,浪费资源。且ARP遵循**“后到优先”**,后到的会顶替先到的MAC地址,一般情况都是次优先路径后道,这也是会有ARP攻击的原因。
ARP广播请求单播响应,LAN以外有的网段,有下一跳的解析下一跳,有网关的解析网关,都没有就触发代理。
简单总结一下
1.在下一跳接口为IP时路由表中记录了下一跳接口IP,其ARP表只记录了1.1和1.2接口的ARP地址,印证了上面的有这条路由的路由器会去帮它寻找。
2.再改为接口后,没有了接口IP,但是其ARP记录了每一个访问过得接口IP的MAC地址,但是都是一样的,这个就是触发了,代理ARP。
3.只写接口的话不但会产生大量的映射列表挤占空间、产生次优先路径,而且在超过三个路由器以后,还会产生巨大的丢包率,发两个丢一个。
ARP攻击
因为ARP是广播请求,在同一个网段内的所有设备都会接收到,如果有人在假装成你想访问的MAC地址。就算你之前有请求到了你想请求的MAC地址,但是ARP遵循“后到优先”的原则,原来的MAC地址就会被替换掉。
假设PC0去访问server1,路由器发送了server1的MAC地址给PC0,但是只要Latop1知道你先请求的IP地址。然后假冒你请求的MAC,即使网关回复你真的MAC地址,只要这个时候我再去访问你一次,你就会把所有的数据发送到我这里来。
手动绑定就没问题了,是要麻烦一点,不过也没有办法。
遭遇这种攻击最直观的现象就是你断网了。
IPv6果断放弃了这种机制了,因为IPv6没有广播机制了,取而代之是邻居机制。