Isolate-user-vlan的地址同步技术详解
 
H3CSE课本对于为什么要地址同步讲的不详细并且有错误,这就导致了,像我这种笨蛋理解有问题了。经过我仔细的想了想,把这部分内容补充了一下,下面大部分内容都在讲为啥地址不同步会造成广播。
拓扑和配置图如下:
 

Isolate-user-vlan的MAC地址同步技术_H3CSE

Vlan10是isolate-user-vlan,映射secondary vlan是2和3;端口配置如图不再详说
经过这个配置,交换机内部会形成这么一个Vlan-端口映射的表项:
Vlan
Port
2
E0/0
2
E0/10
3
E0/1
3
E0/10
10
E0/0
10
E0/1
10
E0/10
 
首先说一下,在没有地址同步的情况下,各个设备的通信情况,模拟PCA去ping自己的网关SWA上的一个三层IP地址吧:
1.刚开始时PCA要和SWA上面的一个同网段IP的三层网关口通信,那么它发现,我PCA的IP地址和目的SWA的IP地址在一个网段上,那么PCA直接封装MAC帧即可,那么PCA会查找自己的ARP表,寻找IP地址对应的MAC地址,但是现在PCA上没有相应的MAC表项,那么它就像E0/0口发送了一个广播ARP请求,请求SWA的MAC地址。
2.SWB收到了这个广播请求,先根据Vlan表项对从e0/0来的帧打上vlan2的标记,然后把PCA的MAC地址表项:“MAC(PCA)+Vlan2+端口e0/0添加进MAC地址表(学习到了这个端口上有这么一个MAC地址),此时SWB地址表如下:
MAC
Vlan
Port
static
00-00-00-00-00-02
2
E0/0
learning
由于这是一个广播帧,SWB必须在Vlan2的覆盖端口内广播了这个ARP请求。也就是说这个ARP广播从SWB的e0/10上脱去Vlan2的标签并发出,到了SWA的e0/10。(H3CSE课本在这里说的是错误的,课本的意思是,SWB查找了一下发现没有SWA的MAC地址,然后去广播ARP请求了,这是错误的,ARP请求本来就是携带的广播MAC地址,怎么去查找?ARP请求本身就是一个广播嘛)
3.SWA发现,过来的这个广播请求的是请求我SWA的三层IP的MAC地址,那么SWA先在本地ARP表项中记下了PCA对应的IP-MAC,然后封装好了一个单播ARP应答,目的MAC地址为PCA的MAC地址00-00-00-00-00-02,源MAC为SWA的MAC地址00-00-00-00-00-10,目的IP为PCA的IP,源IP为SWA的源IP,然后发出到了SWB上。
4.此ARP单播应答到了SWB的时候,SWB根据Vlan表给从E0/10来的这个帧打上vlan10的标记,SWB再次学习到了SWA的一个MAC表项,那么SWB先添加此表项:“MAC(SWA)+Vlan10+端口E0/10此时SWB的地址表变为:
MAC
Vlan
Port
static
00-00-00-00-00-02
2
E0/0
learning
00-00-00-00-00-10
10
E0/10
learning
然后查找MAC地址表,发现,有一个00-00-00-00-00-02的表项,但是此MAC表项的Vlan是2,这和帧携带的Vlan10不匹配的,所以不能从这个表项记录的出口e0/0发出去,那么SWB去查一下Vlan表,发现在Vlan10下面还有一个e0/0端口和e0/1端口,那么SWB就得在Vlan10覆盖的端口内广播这个单播的ARP回应(单播变广播了),是谁的谁回应,那么这个“所谓的单播”(此时变成广播了)ARP回应就从e0/0端口脱去Vlan10标签并出去了。
5.PCA发现,我请求的MAC地址有回应了,它就在自己的ARP表项中记下了IP-MAC。
接下来就开始正式的Ping过程了,PCA以得到的MAC地址封装单播request帧,发送到SWB上。
6.SWB收到的这个单播ping帧实际上是这样的先打上Vlan2的标签,然后拿着这个“目的MAC(00-00-00-00-00-10)+Vlan2查找SWB本身的MAC地址表,发现有一个00-00-00-00-00-10的表项,但是它的Vlan是10,这和帧携带的vlan2是不匹配的,所以不能从这个表项记录的出口e0/10发出去,那么SWB去查一下Vlan表,发现在Vlan2下面还有一个e0/10端口,那么SWB就得在Vlan2覆盖的端口广播这个单播的request请求,是谁的谁回应,那么这个request请求就从E0/10上脱去Vlan2的标签到了SWA上。
7.SWA的reply回应,就类似于步骤3到步骤4。
8.PCB想要ping通SWA其过程,和上述一致,不再赘述,PCB和SWA建立通信之后,SWB的MAC地址表项就变为如下了:
MAC
Vlan
Port
static
00-00-00-00-00-02
2
E0/0
learning
00-00-00-00-00-03
3
E0/1
learning
00-00-00-00-00-10
10
E0/10
learning
 
好,暂时跳出上面那个很绕口的过程说点别的,咱们的PC上的ARP表项记录的是IP对应的MAC,而交换机上的MAC表记录的是MAC对应的出接口。
通过上述过程可以看出,每次PCA想要和SWA的三层网关通信,由于SWB的MAC地址表中缺乏同一Vlan内的所有MAC地址表项,那么每次SWB都得根据Vlan表项对应的端口在相同Vlan号端口内广播数据,才能完成通信,这种通信过程浪费了网络资源,有什么办法能消除广播直接让交换机的MAC地址表项中能查找到同一vlan内全部的MAC地址呢?这就是Isolate-user-vlan的MAC地址同步技术。
MAC地址同步技术有两步:
1.       Secondary vlan学到的地址同步到isolate-user-vlan中,出接口不变
通过这个同步,我们可以发现,此时SWB的MAC地址表由
MAC
Vlan
Port
static
00-00-00-00-00-02
2
E0/0
learning
00-00-00-00-00-03
3
E0/1
learning
00-00-00-00-00-10
10
E0/10
learning
变为
MAC
Vlan
Port
static
00-00-00-00-00-02
2
E0/0
learning
00-00-00-00-00-02
10
E0/0
learning
00-00-00-00-00-03
3
E0/1
learning
00-00-00-00-00-03
10
E0/1
learning
00-00-00-00-00-10
10
E0/10
learning
那么,此时,从SWA过来的所有单播数据帧,在SWB都知道了明确的MAC地址和出接口了,那么下行的单播就不会单播变广播了,而会匹配表项直接单播发送。
2.       isolate-user-vlan学到的地址同步到secondary vlan中,出接口不变
MAC
Vlan
Port
static
00-00-00-00-00-02
2
E0/0
learning
00-00-00-00-00-02
10
E0/0
learning
00-00-00-00-00-03
3
E0/1
learning
00-00-00-00-00-03
10
E0/1
learning
00-00-00-00-00-10
10
E0/10
learning
的基础上又变为
MAC
Vlan
Port
static
00-00-00-00-00-02
2
E0/0
learning
00-00-00-00-00-02
10
E0/0
learning
00-00-00-00-00-03
3
E0/1
learning
00-00-00-00-00-03
10
E0/1
learning
00-00-00-00-00-10
10
E0/10
learning
00-00-00-00-00-10
2
E0/0
learning
00-00-00-00-00-10
3
E0/1
learning
那么,此时,只要PCA上有确切的SWA的MAC地址,那么它再去ping SWA,数据包在SWB上就有明确的MAC地址和出接口了,那么上行的单播就不会单播变广播了。
由于,用户的下行数据永远大于上行数据,那么可见,SWA向PCA传数据应该尽量避免广播,否则,目的为PCA的数据也会被发到PCB的端口上,这既不安全又浪费了网络资源,所以secondary vlan向isolate-user-vlan的同步是重要的,一般交换机都会支持,而上行的数据少,广播就广播吧,所以isolate-user-vlan到secondary vlan的地址同步有的交换机就不支持。