我们看路由表的时候经常能看到下一跳有多个的路由条目。比如:

那么去往默认路由的下一跳有两个,一个是172.16.30.177,一个是172.16.30.181。那么一个数据包去往目的地址的时候是走哪个下一跳呢?下面做个实验来观察观察:

在R2上看4.4.4.1 和 4.4.1.1的路由:


在R2上ping 4.4.1.1
ping -a 2.2.2.1 -c 10000 4.4.4.1
通过抓包,我们发现流量走到了R1上
在R2上ping 4.4.1.1
ping -a 2.2.2.1 -c 10000 4.4.1.1
我们发现流量走到了R3上
这就是根据目的网络进行负载分担的方式。如果网络里的数据流足够多,不同的数据流会采用不同的下一跳。比如去往A网段的流量走第一跳,去往B网段的流量走第二跳,去往C网段的流量走第一跳。流量足够多的时候两条负载链路就能平分流量。
还有一种负载方式是根据数据包进行流量负载分担,即同一条流量第一个数据包走第一条链路,第二个数据包走第二个链路,第三个数据包走第一条链路。这样即使流量很单一的网络,流量也可以平分到两个链路里。
但是我没有找到相关命令,不知道模拟器里不支持。。。
但是这种情况会造成来回路径不一致的情况,需要额外注意。
关键词:路由负载转发原理实验(路由器转发原理)