一开始arp表是空的. 假如一台linux主机(假设为192.168.0.3)要ping一个外网的ip, 通过路由表可知这个数据包要到达的下一跳网关ip, 假设为192.168.0.1. 那么, 这台linux主机就广播一个arp请求:"who has 192.168.0.1? tell 192.168.0.3". 网关接收到这个arp请求后, 回应一个arp包给这台Linux主机:"192.168.0.1 is at xx.xx.xx.xx(MAC)", 这样, 这台Linux主机就获得了下一跳的网关了, 它会把这个arp信息缓存到arp表. 它不需要知道外网ip对应的MAC, 只把这个ping的ICMP数据包发给网关. 同样, 这个网关也根据路由表查找下一跳的MAC.
很遗憾,不可以这样均衡分配的,linux下包发送原理是先找路由规则,没有配置高级路由的就是main这个规则,也就是route -n或ip route show看到的结果都是main规则下的。
然后找路由,路由是有优先级的,同等优先级下,按ip route show显示顺序匹配发送,一旦匹配,后面的就不会
再去看了。
所以根据路由不可以这样均衡分配的,永远都办不到。
但是其它一些情况,比如你这台linux是服务器,你只是希望上面的网站流量分布在不同网卡,那很容易办到,为什么上
面那情况不可以,而现在又可以了呢,因为网站访问对这台linux来讲是被动发送数据的,从哪儿进来就会从哪儿回复出去。
通过DNS或负载均衡器很容易实现。
但你linux做为客户端仅仅是去上别的网络,是主动发包的,会去找你本机的路由,况且你目的IP相同,那连分类走路由的机会都没有了。
除非从时间上错开,定期自动换网关。哈哈
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)