在ARP PRoxy的实现中,由于一个SubVLAN可以跨越不同的接口板,接收到的ARP请求报文和对应的应答报文可能来自不同的单板,所以将ARP Proxy在主控板上实现。
图 VLAN聚合
下面描述一下VLAN聚合情况下,两个聚合的Sub-VLAN之间通信的过程,如上图所示:
Sub-VLAN1和Sub-VLAN2聚合成Super-VLAN3,为Super-VLAN3分配一个ip子网,则Sub-VLAN1和Sub-VLAN2都位于此子网。此处所指的ARP表是指RPS中的所有ARP表项。
若Sub-VLAN1中的一台主机PC1要与子网中的另一台主机PC2通信,PC1发现对方与自己处于同一网段,则直接发出目的IP为10.110.1.33的ARP请求报文。三层交换机收到后,由微码将其在Sub-VLAN1的范围内直接通过二层广播此报文,并抄送一份给接口板的ARP模块。经过接口板ARP的分析,发现它来自SubVLAN,就将此ARP请求报文交给主控板ARP模块处理。
主控板ARP首先在ARP表中查找ARP请求报文中的目的IP地址,假如找到对应项,看看目的IP地址是不是在SubVLAN1中,是就丢弃该报文,不是就将SuperVLAN3的MAC地址应答给PC1,完成代理工作。
假如在ARP表中没有找到对应项,主控板ARP就查VLAN聚合与VLAN的逻辑映射表,知道Sub-VLAN1属于Super-VLAN3,将此报文中的源MAC地址替换成SuperVLAN3的MAC地址,VLAN ID的值由1分别替换成属于SuperVLAN3的其它Sub-VLAN的值,之后逐个向属于此SuperVLAN的其它Sub-VLAN(本例中为Sub-VLAN2)广播,并同时将此请求报文中的信息学习加入动态ARP表中。
此后若收到PC2的ARP应答报文(其目的MAC地址为Super-VLAN3的MAC地址),主控板ARP模块发现此ARP应答报文的VLAN ID是Sub-VLAN2,即PC2位于Sub-VLAN2中,主控板CPU根据应答报文中的信息,搜索ARP表中的各项,找到对应项后把SuperVLAN3对应的MAC地址通过ARP应答报文回给PC1(若PC2位于Sub-VLAN1,PC2响应的ARP应答报文直接通过二层转发回给PC1,交换机就不再应答)。同时在接口板上将SubVLAN2中的响应报文信息记录在ARP表及FIB表中,以后再收到来自主机X的报文就可以通过查询FIB表进行三层转发了。
ARP Proxy放在主控板上,这样可以避免由于不同接口板在同步上造成的差异,如我们从板A发出ARP ,从板B收到响应,但由于数据表格还没有同步到位板B,则引起错误。