Linux下如何根据目的IP来获取下一跳网关的MAC,netlink可以实现么

Linux下如何根据目的IP来获取下一跳网关的MAC,netlink可以实现么,第1张

获取MAC和netlink没有关系.

一开始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相同,那连分类走路由的机会都没有了。

除非从时间上错开,定期自动换网关。哈哈


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9011267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存