如图所示:交换机上划分了两个VLAN,在VLAN1,VLAN 2上配置了路由接口用来实现vlan1 和 vlan 2之间的互通。
A和B之间的互通(以A向B发起ping请求为例):
1) A检查报文的目的IP地址,发现和自己在同一个网段;
2) A---->B ARP请求报文,该报文在VLAN1 内广播;
3) B---->A ARP回应报文;
4) A---->B icmp request;
5) B---->A icmp reply;
A和C之间的互通(以A向C发起ping请求为例):
1) A检查报文的目的IP地址,发现和自己不在同一个网段;
2) A---->switch(int vlan 1)ARP请求报文,该报文在VLAN1 内广播;
3) 网关---->A ARP回应报文;
4) A---->switch icmp request(目的MAC是 int vlan 1的MAC,源MAC是A的MAC,目的IP是C,源IP是A);
5) switch收到报文后判断出是三层的报文。检查报文的目的IP地址,发现是在自己的直连网段;
6) switch(int vlan 2)---->C ARP请求报文,该报文在VLAN2 内广播;
7) C--->switch(int vlan 2) ARP回应报文;
8) switch(int vlan 2)---->C icmp request (目的MAC是 C 的MAC,源MAC是 int vlan 2的MAC,目的IP是C,源IP是A)同步骤4)相比报文的MAC头进行了重新的封装, 而IP层以上的字段基本上不变;
9) C---->A icmp reply,这以后的处理同前面icmp request的过程基本相同。
以上的各步处理中,如果ARP表中已经有了相应的表项,则不会给对方发ARP请求报文。
分析对比
从A到B的报文由于在同一个VLAN内部, 报文的目的MAC地址将是主机B的MAC地址,而从A到C的报文,要跨越VLAN,报文的目的MAC地址是设备虚接口VLAN1上的MAC地址。