在NA章节,我们学过路由的入门知识,静态路由,在很多网工里,对静态路由的认知应该停留在写路由,而这背后的细节不是很清楚,这也是今天我写这篇文章的原因。
在构建知识体系时,如果缺少实践的佐证,是很容易忘记的。所以这篇文章以实践加理论的形式展现。
静态路由和它的中文意思一样,静态不会变化的路由(如果还不知道路由的朋友,路由的原理在我之前的文章里有),需要管理员配置的路由,静态路由虽然配置需要手动配置,但是不需要像动态路由那样查询,所以非常稳定,除非是写错了,否则应该是最稳定的路由,某运营商的一个骨干网就全部采用静态路由的方式搭建,非常稳定,就是维护起来很麻烦。
静态路由的配置也很简单,以华为为例:
ip route-static 0.0.0.0 0 12.12.12.12 (下一跳地址)
ip route-static 0.0.0.0 0 g/0/0(下一跳出接口)
在实际工作过程中,大多数网工应该都是写的第一条,第二条基本都没有用到过,你们有思考过为什么吗?通过的我的文章,带你看看静态路由不为人熟知的知识。
正文
实验拓扑
如下图所示(配置我就不贴了,如果需要可以找我要)

实验拓扑
路由表情况

R1

R2

R3
PC1 ping PC2
通过ping和抓包,得到PC在第一次ping跨网段的IP时,首先发送一个ARP查询,查询的IP为网关地址,查询完成后,获取到的MAC地址用来构建ICMP的目的MAC地址,当ICMP包到达路由器时,路由器解封装发现数据包是给自己的,于是继续解封装到第三层查询目的IP,通过查询路由表,发现本地没有,于是直接丢弃,所以这里看到的消息是Request timeout

PC回显

R1接PC1接口抓包
配置路由表(下一跳IP方式)
R1
ip route-static 2.2.2.0 24 12.12.12.2
R2
ip route-static 1.1.1.0 24 12.12.12.1

R1路由表

R2路由表
PC1 ping PC2
配置完路由表,进行测试,通过下图来看,首包出现了丢包,原因为ARP探测过程导致首包丢包,这个是正常的现象,当然现在很多人知道这个现象,也知道什么原因,在当年这个问题作为面试问题可是难倒了一批工程师。

PC1 ping PC2

抓包结果
配置路由表(下一跳方式)
R1
ip route-static 2.2.2.0 24 GigabitEthernet 0/0/0
R2
ip route-static 1.1.1.0 24 GigabitEthernet 0/0/0

R1路由表

R2路由表
PC1 ping PC2
此时惊讶的发现,ping不通,但是路由也没有问题,抓包也正常,那问题出在哪里呢?
原因出在该网络属于MA网络,依靠的依然是ARP查询目的IP地址的MAC地址,这里的路由条目可以发现,下一条地址为路由器本身,也就是直连路由。在构建ICMP报文的时候目的MAC地址就是自己,自然就无法ping通了,那么什么情况下合适呢?我们继续往下看看。

PC1 ping PC2

R1接PC接口抓包
PC1 ping PC3
这里环境稍有调整,R1和R3为串口对接,采用PPP协议对接,此时看看路由表发现和G口无异,但是测试的结果是正常ping通,此时看看R1和R3接口抓包,很清晰的发现,数据包里没有源目MAC地址,取而代之的为PPP协议,当协议为PPP协议时,认为去往该接口的只有下一跳接口,所以这也是能够ping通的原因。

R1路由表

R3路由表

PC1 ping PC2

串口抓包
总结
1、对于点到点接口,网络设备会认为与该接口相连的对端接口地址就是路由的下一跳地址。
所以如果通过PPP协商获取对端的IP地址,只需指定出接口即可。
2、如果是非点对点类型接口,采用指定下一条地址,如果强制指定下一条地址,除非全网开启arp-proxy功能,否则通信一定是异常的。