静态路由与CEF下的负载均衡(静态路由 负载均衡)

2022-04-18 09:21:14


内容说明

一、路由表存在内容
二、路由器执行路由匹配的原则
三、下一跳和出接口的区别
四:CEF的负载均衡方式
五:静态路由的扩展

之前已经谈过二层封装了,那么在看静态路由的时候就清晰多了,否则的话,有些地方会不太明白,并且,这次会介绍CEF的负载均衡方式,这也是卷一里面提到过的。

这是卷一第三章提到的,主要说明了路由表和路由匹配的方式。

一、路由表存在内容

1、 目的地址:也就是通过静态或者动态路由学习到的路由,当一个数据包过来,查看的就是目的地址,是否存在于路由表。
2、下一跳:它标示这个数据包从哪个接口或者邻居的接口地址转发出去。
3、度量值:这是一个针对动态路由协议来说衡量一条路由信息从源到接收者之间经过的链路好坏的标准。注意的是:这个衡量是针对相同路由协议来说的,也就是只有相同路由协议从多条路径收到同一条路由条目的时候,用度量值来衡量这条路由从哪条路径最优,如果相同的话,则负载均衡,同时出现在路由表中。 不同路由协议的衡量标准不一致,{RIP是依靠跳数来衡量}{EIGRP默认通过带宽和延迟}{OSPF和ISIS都是依靠链路带宽}。 对于静态路由来说永远是0。
4、管理距离: 用于衡量不同路由协议之间的“优越性”,这个优越性其实是产商定义的。
在Cisco中,静态为AD为1,EIGRP为90,OSPF为110,ISIS 115,RIP为120,IBGP为200,EBGP为20。
而在H3C和HW中,OSPF 内部路由为10,ISIS为15,静态为60,RIP为100,OSPF外部和域间路由为150,BGP为255
它的作用:当一个路由器从不同路由协议学习到相同的路由条目时候,这时候它会根据这个管理距离来决定最终谁放入路由表中,比如,RIP和EIGRP同时收到一个关于2.2.2.0/24的路由,那么最终EIGRP会放入路由表,而RIP则不放入,但是需要注意的是,它还是会存在与database中。

二、路由器执行路由匹配的原则

从路由卷一上写出了6个规则,如果归纳一下的话,顺序为
1、主机路由
2、 主网路由
3、缺省路由
其实,关于一组子网、一组主网号(超网)都可以看作是对主网路由的细分。所谓的主网路由就是按A、B、C进行分类的。

解析:之前提到过管理距离的作用,它只是决定相同路由条目从不同路由协议学习到的时候才会根据AD值来进行判断,如果这时候,RIP和EIGRP同时收到一个关于2.2.2.0/24的路由,但是,RIP又学习到一个2.2.2.2/32的路由,那么2.2.2.0/24的路由显示为EIGRP学习到,但是,2.2.2.2/32的路由会显示RIP学习到,并且出现在路由表中,后续去往这个2.2.2.2的数据包都会从RIP学习到的路径进行转发。 这就是所谓的最长子网匹配。

缺省路由:卷一的注释是,当所有匹配都失败时才被使用,就是说当一个数据包要经过这个路由器转发,路由器首先查看的是否有明细路由(也就是像主机路由和子网路由),如果与路由表中的路由信息都不匹配的时候,这时候才经过缺省路由进行转发。

设计思路:对于缺省路由、子网路由、主机路由进行特殊需求的应用时候,我们可以针对缺省路由走一条链路,但是,对于一些VPN流量或者需要让服务器的流量走防火墙的,用主机路由进行匹配将下一跳指向需要的地方,这样路由器在转发数据包的时候,先匹配的是主机路由或子网路由,最后才匹配缺省。

三、下一跳和出接口的区别


地址信息如图表示,这次用到的只要是以太网链路,而串口则不用。

Router-R1(config)#ip route 12.1.1.0 255.255.255.0 10.1.1.2
Router-R1(config)#ip route 3.3.3.3 255.255.255.255 f0/0

在Router-R1上写了两条路由,一个是关于3.3.3.3走的是出接口,而12.1.1.0网段则是走的是下一跳。

Router-R2(config)#ip route 3.3.3.3 255.255.255.255 12.1.1.2
Router-R3(config)#ip route 10.1.1.0 255.255.255.0 12.1.1.1

这时候,测试下ping 12.1.1.2 和ping 3.3.3.3的区别。


都通了,这个是必然可以通的,但是它怎么通的呢。

关于12.1.1.2的通信,首先Router-R1查找路由表关于12.1.1.2的路由信息,下一跳是10.1.1.2,这时候,需要进行二层封装,需要通过ARP进行询问,开始的..就是在进行ARP的询问,当有了10.1.1.2的MAC地址时候,则直接把数据包发送给了10.1.1.2(Router-R2),Router-R2同样查找路由表,关于12.1.1.2的路由信息,发现是直连,但此时,Router-R2依然需要通过ARP进行询问12.1.1.2的MAC地址是什么,当12.1.1.2回应这个MAC地址后,Router-R2直接把数据包发送给Router-R3。 Router-R3收到ping包后,回应icmp的reply,这时候则不需要ARP的询问了,因为Router-R2和Router-R3在响应这个ARP请求的时候,就会把对方的地址和MAC缓存在ARP中。

关于3.3.3.3的通信过程则不一样,首先查找路由表关于3.3.3.3的路由,匹配的则是出接口,这时候Router-R1则认为是直连网络,它就会向这个接口发送一个ARP请求询问,询问的内容是关于3.3.3.3的MAC是什么?, 这时候只有Router-R2能够收到,因为直连,Router-R2收到后,首先查找路由表是否有3.3.3.3的路由,Router-R2这时候是有的,那么它就会回应这个ARP的请求,回应的内容关于3.3.3.3的MAC地址是10.1.1.2的MAC,这就是代理ARP机制,当Router-R1收到这个ARP回应后,就会把去往3.3.3.3的数据包发送出去,这时候Router-R2会解封装这个数据包,查看到的首先是二层信息,MAC地址是自己,通过代理ARP机制,它还会查看三层信息,发送目的地址是去往3.3.3.3,继续查找路由表,关于3.3.3.3的下一跳信息,这里为12.1.1.2,这次就不需要进行ARP询问了,因为在访问12.1.1.2的时候,这个ARP的缓存中就有了关于12.1.1.2的MAC地址信息,所以,就直接转发了。

注意:一个数据包在从源到目的的过程,源目MAC是一直在变化的,而源目IP在通常情况下是不会改变(没有NAT的情况下)。

可以看出来,关于3.3.3.的MAC地址信息和10.1.1.2的MAC地址是一样的,但是指向下一跳则不会出现关于12.1.1.2的ARP信息。

总结:

1、我们可以把10.1.1.2看作是12.1.1.0/24的网关,如果看过之前的二层封装分析的文章的话,知道在指定了网关的情况下,只会询问网关的MAC地址信息,但是,如果没有指定网关(就像3.3.3.3指向的是出接口,相当于是自己),那么它直接发送ARP询问这个网络是否有知道3.3.3.3的MAC地址信息。
2、分析可以看出来如果在多路访问的时候指定的是出接口的后,那么会存在大量的ARP信息,并且路由器还缓存大量的ARP条目,这是我们不希望看到的。
3、静态路由的另外配置:ip route 3.3.3.3 255.255.255.255 f0/0 10.1.1.2 ,出接口和下一跳同时使用。这时候就不会进行ARP询问了,因为知道下一跳转发给谁。

四:CEF的负载均衡方式

CEF会把RIB(路由信息转发库)的信息复制到FIB表中,并且会维护一张二层的转发信息表,邻接表 ,这个邻接表中包含的就是二层封装的信息,比如以太网则是源目MAC和协议号,FR就是DLCI,后续的数据包在转发的时候,直接读取了CEF的FIB和ADJ表中的信息直接转发出去,这是由硬件来实现的,而不是跟传统的转发数据包需要由CPU来完成,而且是递归查找路由表。

CEF的负载均衡,默认情况下是基于目标负载均衡,什么是目标负载均衡呢?

目标负载均衡:指的是当一个源可以从多条路径访问同一个目的的时候,目的负载均衡就是,同一个源访问这个目的的时候,只会从相同出接口或下一跳,也就是相同路径,就算路由表中是负载均衡的情况下, 只有当另外一个源访问这个相同的目的时候,就可能会从下一条路径进行转发。

地址信息如图,Router-R1通过两条路径可以去往3.3.3.3,分析CEF的负载均衡方式。Router-R2和Router-R3都有回程路由。
Router-R1(config)#ip route 3.3.3.3 255.255.255.255 20.1.1.2
Router-R1(config)#ip route 3.3.3.3 255.255.255.255 10.1.1.2
Router-R2(config)#ip route 3.3.3.3 255.255.255.255 12.1.1.2

Router-R3(config)#ip route 10.1.1.0 255.255.255.0 12.1.1.1
Router-R3(config)#ip route 20.1.1.0 255.255.255.0 12.1.1.1

现在是负载均衡的了

现在走的是20.1.1.2也就是s1/0,串口链路

用1.1.1.1与3.3.3.3通信,发送了一个数据包后,它指向的下一跳还是20.1.1.2,因为CEF默认的方式是基于每目的的。也就是相同源访问同一目的的时候,路径是不改变的。

这时候更改CEF的负载均衡方式为每数据包的方式。
Router-R1(config-if)#ip load-sharing per-packet ,在S1/0和F0/0都需要修改,开启debug ip packet进行测试

可以看出来,第一个包走的是s1/0,20.1.1.1源地址,第二个包就是10.1.1.1 ,f0/0的源地址了

总结:不管是cisco的CEF还是HW和H3C的快速转发,默认情况下都是基于每目的方式工作的(H3C和HW的称为流),这样做有什么好处呢,可能在刚开始学习RS的朋友来说,认为基于每数据包的负载均衡很好呀,能够有效的利用链路带宽和设备资源。

案例分析一


假设这时候,以太网连接的不是Router-R2,而是一个防火墙设备(比如Cisco的ASA),然后在连接到Router-R2上,在Router-R1的路由表中对于3.3.3.3路由信息依旧是负载均衡,那么分析下在这种情况下使用每数据包会有什么影响。

分析:这里就用TCP的流量进行分析,先介绍下ASA对TCP建立的过程处理, 假设Router-R1处于inside区域,也就是高级别接口,发送一个TCP会话给Router-R3(outside区域,低级别接口),这时候ASA会创建一个状态化表项,并且会把这个TCP的SYN的随机数进行扰乱,防止黑客进行猜测,当Router-R3收到了这个SYN的TCP连接时候,会回复一个SYN+ACK,经过ASA的时候,ASA会检查这个SYN+ACK是否与自己的状态化表项匹配,如果匹配则放行,不匹配直接丢弃,最终Router-R1回复ACK。

处于每数据包下的负载均衡情况:假设Router-R1发送一个telnet的会话给Router-R3的3.3.3.3 ,走的是以太网链路,而以太网链路连接的是ASA设备,ASA传递给Router-R2,Router-R2转发给Router-R3,Router-R3收到以后回复一个SYN+ACK,这里不考虑回去的流量走的是S1/0,当Router-R1收到了这个SYN+ACK后,它下一个包就是发送ACK了,如果是基于每数据包的情况下,那么它下一个发送的路径就是串口 S1/0,由于S1/0之间连接的是Router-R2,而不经过ASA设备,当之前发送了ACK后,Router-R2会继续转发给Router-R3,Router-R3收到ACK后,会建立telnet的会话,表示TCP三次握手成功,但是,在ASA设备上,维护的状态化表项的过程还处于SYN+ACK的状态,此时,Router-R1再次发送telnet的会话流量,比如进行show ip interface,这时候又是走的F0/0了,当ASA收到这个数据包的时候,发现状态化信息中并没有一个成功的TCP会话连接在这,所以,ASA会制动发送RST来重置这个TCP的会话。,这个例子中,不排除流量在回复SYN+ACK的时候走的是S1/0回来的,那么Router-R1直接回复ACK走的是S1/0出去,那么ASA维护的信息状态就是SYN的状态。(目前主流的防火墙都是基于状态化信息来维护TCP或UDP的状态信息)

案例分析二

这也是卷一提到过的,就是VOIP,在VOIP中最怕的就是延迟了,如果在某个时候,正好一条链路比较拥塞,那么造成的结果就是,声音是断断续续的,因为拥塞的链路可能把数据包给丢弃了。给客户的体验是非常不好的

分析在每目的负载均衡的情况下:

1、基于第一种案例,由于每目的负载均衡是根据同一源到目的走的是相同路劲,所以,建立的TCP会话都是在同一路径上完成的,也就是说,要么全部经过ASA这端,要么全部是走串口链路。

2、基于案例分析二的情况,也是一样的,要么走不拥塞的链路,那么客户通话是流畅,另外一种情况就是,全部走链路拥塞的,那么就是拨号都会有问题,那么客户在这种情况下,知道网络处于繁忙状态,则可以通过其他方式进行联系。

3、在我们的思维中,通常觉得每数据包的负载均衡方式往往达到了最大的利用,觉得每目的都是同一路径,反而不好。但是,需要考虑到的是,在实际中,往往源是非常多的,在这种情况下,还怕负载均衡用不上吗? 呵呵,不同的源走的可能是不同的路径,这样也能达到负载均衡的效果,而且还能解决许多的问题。因为在当前的流量中,大部分都是基于TCP或者VOIP的流量,而且在对于安全较高的企业来说,防火墙设备也普遍存在,所以,一般情况下,建议使用默认的负载均衡方式。

五:静态路由的扩展

在卷一中提到,在实际工作中,往往我们更喜欢使用到静态路由,因为它比动态路由资源消耗要小,缺点就是不灵活,不能适应网络中的变化。
其实,在现在包括cisco、H3C、HW提供的feature里面,能够很有效的解决一些问题。

1、track:它能追踪某个进程(比如SLA、NQA、BFD),当这些会话down的时候,静态路由就消失。


2、浮动路由:浮动路由可以看作是一种备份路由,我们可以将某条优越链路作为主用链路,当主链路down的时候,走次优链路。
这个往往在我们工作中用的非常多,比如双ISP做冗余的时候。
ip route x.x.x.x x.x.x.x x.x.x.x {AD}写法就是后面跟AD值,一般大于静态路由即可,如果配合动态路由协议的话,则建议200以上。


总结:关于静态路由和CEF的负载均衡方式就总结完毕了,其实从这几天总结来看,收获还是非常大的,还是那就话,经典的书就需要多看,每次看都有不同的收获。 也希望朋友们理解下一跳和出接口的区别,并且灵活的运用静态路由,也许有时候在工作中是非常有帮助的。


如果大家有任何疑问或者文中有错误跟疏忽的地方,欢迎大家留言指出,博主看到后会第一时间修改,谢谢大家的支持,更多技术文章尽在网络之路Blog,版权归网络之路Blog所有,原创不易,侵权必究,觉得有帮助的,关注转发一波谢谢。

上一篇回顾


下一篇学习

TCPIP卷一(2):二层封装之–PPP与FR