|
junos转发策略
在默认情况下,对于路由表当中某条活跃路由,即便路由器拥有到达相同的目的网段的多条同等开销链路(案例中,我们使用OSPF,到达192.168.99/30及192.168.100/30网段,R3上均拥有两条Metric值为20的链路)。JUNOS将采用一种hash(哈希)算法来随机选择其中“一条”链路,同时将该链路的下一跳从RIB表安装至FIB表当中。假如由于路由抖动...等原因,改变了到达目的网段的下一跳,此时JUNOS将采用相同的hash(哈希)算法重新选择新的下一跳。
lab@hongkong# run show route logical-router r3
.............
<--ommited-->
CgJw eR)
192.168.99.0/30 *[OSPF/10] 00:01:10, metric 20
to 10.1.23.1 via fxp1.23
> to 10.1.13.1 via fxp2.13 >
192.168.100.0/30 *[OSPF/10] 00:01:10, metric 20
> to 10.1.23.1 via fxp1.23
to 10.1.13.1 via fxp2.13 36
.............
<--ommited-->
GQbU#J8-"
lab@hongkong# run show route forwarding-table <-)
.............
<--ommited-->
192.168.99.0/30 user 0 10.1.13.1 ucst 386 2 fxp2.13
192.168.100.0/30 user 0 10.1.23.1 ucst 383 2 fxp1.23
.............
<--ommited-->
我们可以通过配置JUNOS,将该活跃路由所有的下一跳地址全部给安装到FIB表当中。Juniper将这种特性称之为“per-packet load balancing”.这样一来,我们可以将流量分流到多个不同的路由器(下一跳)上面。然而,“per-packet load balancing”这个特性却在不同版本的Internet Processor application-specific integrated circuit (ASIC)上有不同的行为,取决于你的设备配置。
在【一代】—— ASIC-I上,当“per-packet load balancing”配置完成以后,被“per-packet load balancing”的流量将在所有可用接口上采用hash(哈希)算法进行运算。然后,FIB将这些到达相同目的网段,被均衡的流量采用轮询机制在多个下一跳上进行分流。最多可用8条同等开销的链路进行负载均衡,这是最最基本的“per-packetload balancing”
在【二代】—— ASIC-II上,当“per-packet load balancing”配置完成以后,被均衡的流量将被根据:包括:【源IP地址+源端口+目标IP地址+目标端口+传输协议+进入接口+TOS位】,路由器将把以上参数全部一致的流量区分为其中一种独立的数据流,从而区分出多种独立的数据流,在最多16条同等开销的链路上负载传输。譬如到达同一个网段的TCP,UDP,ICMP数据将被区分为三种独立的数据流。而每种独立的数据流将保持在单一的接口上进行传输。从而保证每种独立的数据流中的每一个数据包以本来应有的顺序到达目的地,而不会产生到达顺序混乱的问题。注意:此特性需要7.0以上版本支持,通过配置以下命令实现 —— aN7
[edit forwarding-options hash-key]
family inet { mVcT))
layer-3;
layer-4;A
} '
让我们回到原有的案例,我们将在R3上采用“per-packet load balancing”策略,使得192.168.100.0/30这个网段将两个同等开销的链路下一跳全部安装到FIB表当中,而192.168.99.0/30将保持默认状态!
lab@hongkong#show policy-options policy-statement per-packet-load-balancing
route-filter 192.168.100.0/30 exact; :88YH7 e}
}
then {
load-balance per-packet;
}
然后将策略安装到FIB表当中;)
lab@hongkong# set routing-options forwarding-table export per-packet-load-balancing
重新检查一下FIB表:
lab@hongkong# run show route forwarding-table
.............
<--ommited-->
~.aa2IA
192.168.99.0/30 user 0 10.1.23.1 ucst 383 3
192.168.100.0/30 user 0 ulst 389 2
10.1.23.1 ucst 383 3 fxp1.23
10.1.13.1 ucst 386 2 fxp2.13
............. vr
<--ommited-->
在FIB表当中,我们可以看到仅仅为我们策略中定义的前缀安装了多条链路;我们分别在R3上traceroute六个数据包至192.168.99/30及192.168.100/30网段观察E
=================第0个================= to 99 )M]
lab@hongkong# run traceroute 192.168.99.1 logical-router r
traceroute to 192.168.99.1 (192.168.99.1), 30 hops max, 40 byte packets
1 10.1.23.1 (10.1.23.1) 0.450 ms 0.426 ms 0.363 ms Q3
2 192.168.99.1 (192.168.99.1) 0.608 ms 0.635 ms 0.593 ms
=================第1个================= to 99
lab@hongkong# run traceroute 192.168.99.1 logical-router r3
traceroute to 192.168.99.1 (192.168.99.1), 30 hops max, 40 byte packetsI
1 10.1.23.1 (10.1.23.1) 0.450 ms 0.412 ms 0.361 m
2 192.168.99.1 (192.168.99.1) 0.607 ms 0.636 ms 0.587 m
=================第2个================= to 99
lab@hongkong# run traceroute 192.168.99.1 logical-router r3
traceroute to 192.168.99.1 (192.168.99.1), 30 hops max, 40
1 10.1.23.1 (10.1.23.1) 0.453 ms 0.414 ms 0.355 ms #Qr3[
2 192.168.99.1 (192.168.99.1) 0.607 ms 0.645 ms 0.589 ms v B]l
~ Ou4 '
=================第3个================= to 99 8)
lab@hongkong# run traceroute 192.168.99.1 logical-router r3
traceroute to 192.168.99.1 (192.168.99.1), 30 hops max, 40 byte packets kPp< Z'?
1 10.1.23.1 (10.1.23.1) 0.450 ms 0.411 ms 0.352 ms B~)3u1?
2 192.168.99.1 (192.168.99.1) 0.605 ms 0.637 ms 0.592 ms =SRoq
.gih=/dV
=================第4个================= to 99 zC=W:/dw
lab@hongkong# run traceroute 192.168.99.1 logical-router r3
traceroute to 192.168.99.1 (192.168.99.1), 30 hops max, 40 byte packets
1 10.1.23.1 (10.1.23.1) 0.447 ms 0.411 ms 0.359 ms
2 192.168.99.1 (192.168.99.1) 0.608 ms 0.639 ms 0.589 ms
=================第5个=================
lab@hongkong# run traceroute 192.168.99.1 logical-router r3 ,G #.sG'o$
traceroute to 192.168.99.1 (192.168.99.1), 30 hops max, 40 byte packety
1 10.1.23.1 (10.1.23.1) 0.449 ms 0.416 ms 0.358 ms
2 192.168.99.1 (192.168.99.1) 0.629 ms 0.642 ms 0.590 ms
六个数据包均采用相同的路径! .
=================第0个================= to 100 => 192.168.100.1 9A `hw `2(
lab@hongkong# run traceroute 192.168.100.1 logical-router r3 CTNmcki
traceroute to 192.168.100.1 (192.168.100.1), 30 hops max, 40 byte packets /!<SL9n
1 192.168.100.1 (192.168.100.1) 0.582 ms 0.549 ms 10.1.23.1 (10.1.23.1) 0.362 ms
=================第1个================= to 100 => 192.168.23.1
lab@hongkong# run traceroute 192.168.100.1 logical-router r3
traceroute to 192.168.100.1 (192.168.100.1), 30 hops max, 40 byte packets Lma}
1 10.1.23.1 (10.1.23.1) 0.453 ms 192.168.100.1 (192.168.100.1) 0.552 ms 0.537 ms
=================第2个================= to 100 => 192.168.23.1 Ex
lab@hongkong# run traceroute 192.168.100.1 logical-router r3 PB
traceroute to 192.168.100.1 (192.168.100.1), 30 hops max, 40 byte packets ;
1 10.1.23.1 (10.1.23.1) 0.456 ms 0.418 ms 192.168.100.1 (192.168.100.1) 0.500 zZ
=================第3个================= to 100 => 192.168.100.1 J3-y9?Vi
lab@hongkong# run traceroute 192.168.100.1 logical-router r3
traceroute to 192.168.100.1 (192.168.100.1), 30 hops max, 40 byte packets
1 192.168.100.1 (192.168.100.1) 0.590 ms 10.1.23.1 (10.1.23.1) 0.417 ms 0.404 ms
=================第4个================= to 100 => 192.168.100.1 #)
lab@hongkong# run traceroute 192.168.100.1 logical-router r3
traceroute to 192.168.100.1 (192.168.100.1), 30 hops max, 40 byte packets
1 192.168.100.1 (192.168.100.1) 0.591 ms 0.551 ms 10.1.23.1 (10.1.23.1) 0.359
=================第5个================= to 100 => 192.168.23.1
lab@hongkong# run traceroute 192.168.100.1 logical-router r3
traceroute to 192.168.100.1 (192.168.100.1), 30 hops max, 40 byte packets
1 10.1.23.1 (10.1.23.1) 0.452 ms 192.168.100.1 (192.168.100.1) 0.551 ms 0.566 ms >
六个数据包3:3采用两条不同的路径!
在IOS当中的启用CEF也能实现相类似的功能,国际上统称这种技术为Dynamic load balancing. T6f~A5%
参考文献:
ACM SIGCOMM Computer Communication Review
[Volume 37, Issue 2 (April 2007)]
ISSN:0146-4833
CEF是IOS基于拓扑的一种交换模式,在CISCO高端路由器上默认是打开并且不可关闭的,CISCO的CEF压标签和标签转发表的形成需要CEF,它也算CISCO的一种核心技术
Cisco的CEF负载均衡的算法是,IOS将一个packet的源地址、目的地址、甚至是源目ip端口号以及上行链路的数量以及每台路由器的唯一标识符hash出一个值(取值范围为0-15),放入一个按0-15数值编号的bucket中,出口链路按顺序填入这16个thread中,上述packet将放入对应的上行链路进行转发,所以基于相同目的地址和不同源地址的Ip packet在有ECMP(等下多路径)情况下的hash值不一样,所以这两种流是走不同的路径
但是CISCO提供了一个接口下的选项Router(config-if)#ip load-sharing per-packet [Random distribution ]
(在做MPLS-TE的tunnel的负载均衡情况下可以用这个命令来测试并查看效果)
该命令允许基于同一个流在有ECMP情况下可以1:1的在ECMP链路上转发packet
但是在multihome to different as 的情况下,ECMP的其中一条路径有潜在的非最优路径的问题需要考虑。 |
|