配置静态路由以出接口方式为啥会每次都需要arp请求而下一跳只需要进行一次arp请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置静态路由以出接口方式为啥会每次都需要arp请求而下一跳只需要进行一次arp请求相关的知识,希望对你有一定的参考价值。

这是因为出接口形式的静态路由,被路由器认为是直连,所以直接发了ARP 参考技术A 思科设备的话
静态路由配出接口做了N次ARP是ARP代理问题,被认为出了接口就是直连。这个网上好找资料,楼上也有回答就不多说了。

静态路由下一跳做了一次ARP是思科CEF分两个表,FIB和AIB,AIB记录邻接关系,也就是下一跳的出接口MAC与IP对应关系以及自己的出接口MAC,三个东西组成了AIB表。为了完成FIB中adjacency这个表项,路由器的通用CPU发起ARP请求来完成AIB,从而完成FIB。这个不容易找资料,可以做实验验证,用关闭CEF和开启CEF两种情况去配置静态路由看有无ARP解析发出。推荐企业网核心CCNP and CCIE ENCOR 350-401,第一章Forwarding有详细说明。

ipvsadm DR模型的实现方式

  

DR模型的lvs

————
在实现DR模型的时候所有RS都要屏蔽掉ARP请求的响应

实现方法:
1.可以用路由器绑定静态VIP:MAC(DVIP)
2.可以使用arptables
3.可以使用 kernel parmeter(内核参数)
{ arp_ignore:接受到arp请求时的响应级别
级别 0:只要本机接口配置了相应地址就响应;
1:仅在目标IP是本地地址并且是配置在这个请求进来的对应接口才响应;

arp_announce:将自己的地址向外通告时的通告级别
级别 0:将本机任何接口的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅将与本地接口匹配的网络通告 }
linux中响应报文的源地址一定要是报文流出接口的地址
arp_ignore和arp_announce在/proc/sys/net/ipv4/conf

————
RS上:
{sysctl -w net.conf.eth0.arp_announce=2
sysctl -w net.conf.all.arp_announce=2

sysctl -w net.conf.eth0.arp_ignore=1
sysctl -w net.conf.all.arp_ignore=1}

RS: ifconfig lo:0 xx.xx.xx.xx broadcast xx.xx.xx.xx netmask 255.255.255.255 up
DS: ifconfig eth0:0 xx.xx.xx.xx broadcast xx.xx.xx.xx netmask 255.255.255.255 up

RS: route add -host xx.xx.xx.xx dev lo:0
DS: route add -host xx.xx.xx.xx dev eth0:0

 

————
例:

制定ipvsadm规则
制定规则前先 -C 清空之前规则
ipvsadm -A -t xx.xx.xx.xx:80 -s wrr
RS1 :ipvsadm -a -t xx.xx.xx.xx:80 -r xx.xx.xx.xx -g -w 2
RS2 :ipvsadm -a -t xx.xx.xx.xx:80 -r xx.xx.xx.xx -g -w 1

以上是关于配置静态路由以出接口方式为啥会每次都需要arp请求而下一跳只需要进行一次arp请求的主要内容,如果未能解决你的问题,请参考以下文章

8.CCNA第八天-路由决策二层数据转发/数据封装/二层封装三层不变/ARP请求

ipvsadm DR模型的实现方式

HCNA实验指南-配置路由器ARP Proxy及静态ARP

CentOS6-路由配置(静态)

LVS的DR模型实现

9.CCNA第九天-路由器 做路径决策