通过VLANIF实现VLAN之间的通信

技术背景

  • 通过使用路由器可以实现VLAN间通信。
  • 当路由器使用多臂的方式实现VLAN间的通信时,路由器的接口资源将受到极大的挑战,当VLAN数量特别多时,采用多臂路由的方式是不具备可行性的,并且此种方式的可扩展性并不高。
  • 当路由器采用单臂的方式实现VLAN间通信时,与多臂路由相比,是一种更佳的选择,因为单臂的可扩展性更高、更经济。
  • 但是单臂路由也存在一定的短板:(1)路由器与交换机之间的链路由于需承载所有VLAN间的通信数据,因此它的负载将变得非常高,尤其是当VLAN的数量特别多、VLAN间通信的流量特别大时,这段链路将变得不堪重负。(2)单臂链路也不具备冗余性,一旦链路发生故障,VLAN之间的通信也就无法再正常进行。
  • 使用三层交换机(Layer 3 Switch)也可以实现VLAN间通信,并且能优化上述问题。

三层交换机

  • 三层交换机除了能够实现二层交换机所有功能,还支持路由功能。
  • 三层交换机除了拥有二层接口外,还拥有三层接口。
  • VLANIF (VLAN Interface)VLAN接口就是一种非常重要的三层接口,这是一种逻辑接口,物理上并不存在。
  • 在一台三层交换机上创建了一个VLAN时,就可以将交换机的物理接口(比如GE0/0/1)加入到该VLAN中,此时这些物理接口都是二层接口。与此同时,还能在交换机上配置这个VLAN对应的VLANIF,也就是这个VLAN对应的三层接口。
  • 三层接口能够与同处于这个VLAN内的设备进行二层通信。另外VLANIF作为一个三层接口,拥有路由功能,可以进行IP地址配置,而通常情况下,这个IP地址会作为VLAN中设备的默认网关地址。

示例

如下图所示的网络拓扑中:

  • 交换机拥有两个VLAN,分别是VLAN 10及VLAN20,物理接口GE0/0/1, GE0/0/2及GE0/0/3都被配置为Access类型,其中GE0/0/1及GE0/0/2接口加入了VLAN10,而GE0/0/3接口则加入了VLAN20。
  • VLANIF 10配置了IP地址192.168.10.254, VLANIF 20则配置了IP地址192.168.20.254。
  • 各VLAN内的PC都将其默认网关地址配置为相应VLAN的VLANIF IP地址。
  • 由于交换机配置了VLAN IF接口,那么三层交换机同时拥有交换模块以及路由模块。
    通过VLANIF实现VLAN之间的通信_第1张图片

在三层交换机上,同网段二层数据交换

以PC1发送一份数据给PC2为例,大致过程如下:
(1)PC1构造单播数据帧:

  • PC1的上层协议产生的数据载荷到了网络层,数据载荷被封装IP头部,在IP头部中,源IP地址是192.168.10.1,目的IP地址是192.168.10.2。
  • 数据载荷被封装好IP头部后,数据下发到网卡,继续为其进行数据链路层封装,将其封装成以太网数据帧,该数据帧的源MAC地址为PC1的网卡MAC地址,而目的MAC地址为192.168.10.2这个IP地址对应的MAC地址。
  • PC1查询ARP表试图寻找相应的ARP表项,初始时PC1的ARP表中并没有相应的表项,因此PCl发送一个广播的ARP Request去请求PC2的MAC地址。

(2)交换机处理PC1发送的广播ARP Request数据帧:

  • ARP Request的广播数据帧到达了交换机的GE0/0/1接口后,会被打上VLAN10的Tag。
  • 交换机通过读取数据帧头部,发现这是一个广播数据帧,此时有三个动作:
    a.将收到的ARP Request广播数据帧在所有加入VLAN10的端口上泛洪,
    b.将数据帧解封装,将数据帧帧中的源Mac地址、VLAN10、GE0/0/1形成一条新的Mac地址表项
    c 另外交换机通过数据帧头部的“类型”字段发现该帧内封装着一个ARP报文,将数据帧解封装后上送到自己的ARP协议模块,而ARP模块发现这个ARP报文请求的是192.168.10.2这个IP地址的MAC地址,该IP地址并非自己所有,因此它直接忽略这个数据帧。

(3)PC2处理泛洪得到的广播ARP Request数据帧:

  • 交换机在VLAN10内泛洪了PC1发送的ARP Request,因此PC2会收到这个数据帧,它将记录相应的ARP表项(PC1的IP地址和Mac地址),
  • 通过解析ARP Request广播数据帧,发现该报文请求的IP地址就是自己,于是会发送一个单播的ARP Reply帧进行回应。

(4)交换机处理PC2回应的单播ARP Reply数据帧:

  • 交换机收到这个数据帧,解析数据帧头部,将数据帧帧中的源Mac地址、VLAN10、GE0/0/2形成一条新的Mac地址表项
  • 另外解析数据帧头部后,通过查询MAC地址表并找到目的MAC地址所关联的出接口(通过PC1发送的广播ARP Request报文学习的Mac地址表项),将数据帧从GE0/0/1接口发出。

(5)PC1处理交换机传递的单播ARP Reply数据帧:

  • PC1收到了这个ARP Reply,解析数据帧,可以获知了192.168.10.2对应的MAC地址,形成相应的ARP表项(PC2的IP地址和Mac地址)
  • PC1获取PC2的Mac地址后,可以继续封装单播数据帧,然后将单播数据帧从网卡发出。

(6)交换机处理PC1发送的单播数据帧:

  • 交换机收到这个数据帧,发现这是一个单播数据帧,于是在MAC地址表中查询目的MAC地址,找到匹配的表项后(PC2回应的ARP Reply报文学习的Mac地址表项),将该帧从GE0/0/2接口发出。

(7)PC2处理交换机传递的单播数据帧:

  • PC2收到这个数据帧后,解析以太网头部,发现目的Mac地址正是自己网卡的Mac地址,通过数据帧头部的“类型”字段发现该帧内封装着一个IP数据报
  • 将IP数据报上送IP协议栈,继续继续IP头部,发现目的IP地址也是自己网卡的IP地址,通IP数据报头部中的“协议”字段发现数据报内还封装上层应用协议的数据
  • 将上层应用协议的数据上送给上层协议模块处理数据。

在三层交换机上,跨网段三层数据交换

以PC1发送一份数据给PC3为例,大致过程如下:
(1)PC1构造单播数据帧:

  • PC1的上层协议产生的数据载荷到了网络层,数据载荷被封装IP头部,源IP地址是192.168.10.1,目的IP地址是192.168.20.1。
  • 将数据帧下送到了PC1的网卡,网卡将其封装成以太网数据帧,由于数据包的目的IP地址与本机不在相同网段(PC2可以通过将IP地址与地址掩码做 &操作,确定其IP网段范围),这意味着PC1需要先把报文发送到默认网关,因此数据帧的目的MAC地址需填写网关(192.168.10.254)的MAC地址。
  • PC1在ARP表中查询192.168.10.254,发现并没有匹配的表项,因此它发送一个广播的ARP Request试图查询网关的MAC地址。

(2)交换机处理广播ARP Request数据帧:

  • 广播ARP Request数据帧到达了交换机的GE0/0/1接口,会被打上VLAN10的Tag。
  • 交换机通过读取数据帧头部,发现这是一个广播数据帧,有三个动作:
    a. 将广播报文在加入VLAN 10的端口上进行泛洪,
    b.将数据帧解封装,将数据帧帧中的源Mac地址、VLAN10、GE0/0/1形成一条新的Mac地址表项
    c 另外交换机通过数据帧头部的“类型”字段发现该帧内封装着一个ARP报文,将数据帧解封装后上送到自己的ARP协议模块,而ARP模块发现这个ARP报文请求的是192.168.10.2这个IP地址的MAC地址,恰好VLANIF 10的IP地址就是192.168.10.254,因此它直接发送一个ARP Reply对PCI进行回应。

(3)PC1处理收到的ARP Reply报文:

  • PC1收到了这个ARP Reply,获知了192.168.10.254对应的MAC地址,因此继续封装数据帧,然后将数据帧从网卡发出。

(4)交换机处理收到的单播数据帧:

  • 交换机收到这个数据帧,发现这是一个单播数据帧,而且该帧的目的MAC地址正是本机的MAC地址,因此交换机将数据帧解封装,并将里面的数据上送到IP模块进行处理(通过数据帧头部的“类型”字段可以得知数据帧封装着一个IP数据报)。
  • IP模块读取数据包的目的IP地址后,发现目的IP地址并非本机的IP地址,于是它在路由表中查询这个地址,结果发现有一条本地直连路由匹配(最长掩码匹配原则),而该直连路由的出接口是VLANIF20,因此交换机重新将这个数据包封装成帧。
  • 新的以太网帧头中,源MAC地址填写的是交换机的MAC地址,而目的MAC则需填写192.168.20.1的MAC地址,如果交换机的ARP表中没有相关的表项,那么它需要在VLAN20中发送广播ARPRequest去请求PC3的MAC地址(此过程和1-2过程类似,不在赘述),最后将封装好的数据帧从GE0/0/3接口发出。

(5)PC3处理交换机传递的单播数据帧:

  • PC3收到这个数据帧后,解析以太网帧头部,发现目的Mac地址正是自己网卡的Mac地址,通过数据帧头部的“类型”字段发现该帧内封装着一个IP数据报
  • 将IP数据报上送IP协议栈,继续继续IP头部,发现目的IP地址也是自己网卡的IP地址,通IP数据报头部中的“协议”字段发现数据报内还封装上层应用协议的数据
  • 将上层应用协议的数据上送给上层协议模块处理数据。

你可能感兴趣的:(VLAN,Ethernet,Switch,VLANIF,交换机)