第10章_VLAN间通信

  • 部署了VLAN的传统交换机不能实现不同VLAN间的二层报文转发,因此必须引入路由技术来实现不同VLAN间的通信。VLAN路由可以通过二层交换机配合路由器来实现,也可以通过三层交换机来实现。
  • 传统交换二层组网中,默认所有网络都处于同一个广播域,这带了诸多问题。VLAN(Virtual Local Area Network,虚拟局域网)技术的提出,满足了二层组网隔离广播域需求,使得属于不同VLAN的网络无法互访,但不同VLAN之间又存在着相互访问的需求。
  • 本章主要描述如何实现不同VLAN之间的相互通信。

1.技术背景

1.1VLAN的局限性

image-20231111230414950

  • VLAN隔离了二层广播域,也严格地隔离了各个VLAN之间的任何二层流量,属于不同VLAN的用户之间不能进行二层通信。

1.2VLAN间通信

  • 实际网络部署中一般会将不同IP地址段划分到不同的VLAN。
  • 同VLAN且同网段的PC之间可直接进行通信,无需借助三层转发设备,该通信方式被称为二层通信
  • VLAN之间需要通过三层通信实现互访,三层通信需借助三层设备。

image-20231111230614921

  • 常见的三层设备:路由器、三层交换机、防火墙等。
  • 将二层交换机与路由器的三层接口互联,由三层设备进行路由转发来实现通信。

image-20231111230637417

2.VLAN路由实现

2.1路由器物理接口实现

2.1.1使用路由器物理接口

image-20231111230738149

  • 在二层交换机上配置VLAN,每个VLAN单独使用一个交换机接口与路由器互联。
  • 路由器使用两个物理接口,分别作为VLAN 10及VLAN 20内PC的默认网关,使用路由器的物理接口实现VLAN之间的通信。
  • 因为不同VLAN之间的主机是无法实现二层通信的,所以必须通过三层路由才能将报文从一个VLAN转发到另外一个VLAN。

  • 解决VLAN间通信问题的第一种方法是:在路由器上为每个VLAN分配一个单独的接口,并使用一条物理链路连接到二层交换机上。当VLAN间的主机需要通信时,数据会经由路由器进行三层路由,并被转发到目的VLAN内的主机,这样就可以实现VLAN之间的相互通信。

  • 然而,随着每个交换机上VLAN数量的增加,这样做必然需要大量的路由器接口,而路由器的接口数量是极其有限的。并且,某些VLAN之间的主机可能不需要频繁进行通信,如果这样配置的话,会导致路由器的接口利用率很低。因此,实际应用中一般不会采用这种方案来解决VLAN间的通信问题。


2.2路由器子接口实现

2.2.1使用路由器子接口

  • 将交换机和路由器之间的链路配置为Trunk或者Hybrid,并且在路由器上创建子接口以支持VLAN路由。

image-20231111231407452

  • R1使用一个物理接口(GE0/0/1)与交换机SW1对接,并基于该物理接口创建两个子接口:GE0/0/1.10及GE0/0/1.20,分别使用这两个子接口作为VLAN 10及VLAN 20的默认网关。
  • 由于三层子接口不支持VLAN报文,当它收到VLAN报文时,会将VLAN报文当成是非法报文而丢弃。因此,需要在子接口上将VLAN Tag剥掉,也就是需要VLAN终结(VLAN Termination)。
  • 解决VLAN间通信问题的第二种方法是:

  • 在交换机和路由器之间仅使用一条物理链路连接。在交换机上,把连接到路由器的端口配置成Trunk类型的端口,并允许相关VLAN的帧通过。在路由器上需要创建子接口,逻辑上把连接路由器的物理链路分成了多条。一个子接口代表了一条归属于某个VLAN的逻辑链路。配置子接口时,需要注意以下几点:

    • 必须为每个子接口分配一个IP地址。该IP地址与子接口所属VLAN位于同一网段。
    • 需要在子接口上配置802.1Q封装,来剥掉和添加VLAN Tag,从而实现VLAN间互通。
    • 在子接口上执行命令arp broadcast enable使能子接口的ARP广播功能。
  • 本例中,主机A发送数据给主机B时,RTA会通过G0/0/1.1子接口收到此数据,然后查找路由表,将数据从G0/0/1.2子接口发送给主机B,这样就实现了VLAN2和VLAN3之间的主机通信。

2.2.2子接口处理流程:

  • 交换机连接路由器的接口类型配置为Trunk,根据报文的VLAN Tag不同,路由器将收到的报文交由对应的子接口处理。

image-20231112172753637

  • 子接口终结VLAN的实质包含两个方面:
    • 对接口接收到报文,剥除VLAN标签后进行三层转发或其他处理。
    • 对接口发出的报文,又将相应的VLAN标签添加到报文中后再发送。

2.2.3子接口配置示例:

image-20231112172943963

  • interface interface-type interface-number.sub-interface number命令用来创建子接口。sub-interface number代表物理接口内的逻辑接口通道。一般情况下,为了方便记忆,子接口ID与所要终结的VLAN ID相同。
  • dot1q termination vid命令用来配置子接口Dot1q终结的单层VLAN ID。缺省情况,子接口没有配置dot1q终结的单层VLAN ID。
    • dot1q termination vid vlan-id命令有两个功能。
      • 第一个功能是删除VLAN标签。接口在收到VLAN报文后,剥掉报文中携带的Tag后进行三层转发。
      • 第二个功能是添加VLAN标签。接口在发送报文时,将相应的VLAN信息添加到报文中再发送。
  • arp broadcast enable命令用来使能终结子接口的ARP广播功能。缺省情况下,终结子接口没有使能ARP广播功能。终结子接口不能转发广播报文,在收到广播报文后它们直接把该报文丢弃。为了允许终结子接口能转发广播报文,可以通过在子接口上执行此命令。
  • 配置==单臂路由==时,交换机连接路由器的接口必须配置成Trunk口,并允许相应VLAN的数据通过。

注:必须先配置VLAN封装,否则不能配置IP地址


2.3三层交换机实现

2.3.1三层交换机和VLANIF接口

image-20231112173751106

  • 解决VLAN间通信问题的第三种方法是:

  • 在三层交换机上配置VLANIF接口来实现VLAN间路由。如果网络上有多个VLAN,则需要给每个VLAN配置一个VLANIF接口,并给每个VLANIF接口配置一个IP地址。用户设置的缺省网关就是三层交换机中VLANIF接口的IP地址。


2.3.2VLANIF配置示例

image-20231112174636008

  • interface vlanif vlan-id命令用来创建VLANIF接口并进入到VLANIF接口视图。
    • vlan-id表示与VLANIF接口相关联的VLAN编号。VLANIF接口的IP地址作为主机的网关IP地址,和主机的IP地址必须位于同一网段。

2.3.3VLANIF转发流程

第一步

  • 假设PC、三层交换机上都已存在相应的ARP或MAC表项。
  • PC1与PC2之间通信过程如下:
    • PC1通过本地IP地址、本地掩码、对端IP地址进行计算,发现目的设备PC2与自身不在同一个网段,判断该通信为三层通信,将去往PC2的流量发给网关。PC1发送的数据帧:源MAC = MAC1,目的MAC = MAC2。

image-20231112175100775

第二步

  • 交换机收到PC1发送的去往PC2的报文,经解封装发现目的MAC为VLANIF10接口的MAC地址,所以将报文交给路由模块继续处理。
  • 路由模块解析发现目的IP为192.168.20.2,非本地接口存在的IP地址,因此需要对该报文三层转发。查找路由表后,匹配中VLANIF20产生的直连路由。

image-20231112175123864

第三步

  • 因为匹配的为直连路由,说明已经到达最后一跳,所以交换机在ARP表中查找192.168.20.2,获取192.168.20.2的MAC地址,交由交换模块重新封装为数据帧。
  • 交换模块查找MAC地址表以明确报文出接口、是否需要携带VLAN Tag。最终交换模块发送的数据帧:源MAC = MAC2,目的MAC = MAC3,VLAN Tag = None。

image-20231112175353284

3.VLAN路由配置

3.1路由器子接口方式配置

image-20231112184217661

  • 执行port link-type trunk命令,配置SWA的G0/0/1端口为Trunk类型的端口。
  • 执行port trunk allow-pass vlan 2 3命令,配置SWA的G0/0/1端口允许VLAN 2和VLAN 3的数据通过。

image-20231112184319181

  • interface interface-type interface-number.sub-interface number命令用来创建子接口。

    • sub-interface number代表物理接口内的逻辑接口通道。
  • dot1q termination vid命令用来配置子接口dot1q封装的单层VLAN ID。缺省情况,子接口没有配置dot1q封装的单层VLAN ID。本命令执行成功后,终结子接口对报文的处理如下:接收报文时,剥掉报文中携带的Tag后进行三层转发。转发出去的报文是否带Tag由出接口决定。发送报文时,将相应的VLAN信息添加到报文中再发送。

  • arp broadcast enable命令用来使能终结子接口的ARP广播功能。缺省情况下,终结子接口没有使能ARP广播功能。终结子接口不能转发广播报文,在收到广播报文后它们直接把该报文丢弃。为了允许终结子接口能转发广播报文,可以通过在子接口上执行此命令。

配置验证

image-20231112184414843

  • 配置完成单臂路由后,可以使用ping命令来验证主机之间的连通性。如上所示,VLAN2中的主机A(IP地址:192.168.2.1)可以Ping通VLAN3中的主机B(IP地址:192.168.3.1)。

3.2三层交换机方式配置

image-20231112204720883

  • 在三层交换机上配置VLAN路由时,首先创建VLAN,并将端口加入到VLAN中。

image-20231112204837378

  • interface vlanif vlan-id命令用来创建VLANIF接口并进入到VLANIF接口视图。vlan-id表示与VLANIF接口相关联的VLAN编号。VLANIF接口的IP地址作为主机的网关IP地址,和主机的IP地址必须位于同一网段。

配置验证

image-20231112204939562

  • 配置三层交换后,可以用ping命令验证主机之间的连通性。如上所示,VLAN2中的主机A(IP地址:192.168.2.2)可以Ping通VLAN3中的主机B(IP地址:192.168.3.2)。

4.三层通信过程解析

4.1网络拓扑

image-20231112180556859


4.2连接逻辑图

image-20231112180617122

  • NAPT(Network Address Port Translation,网络地址端口转换):将IP数据报文头中的IP地址、端口号转换为另一个IP地址、端口号的过程,主要用于实现内部网络(私有IP地址)访问外部网络(公有IP地址)的功能,NAPT支持多个内部地址映射到同一个公有地址上,可以实现使用一个公有地址支持内网多个内部地址同时访问外部网络。

4.3通信过程

第一步

image-20231112181138202

  • 假设所有设备上都已存在相应的ARP或MAC表项。

第二步

image-20231112181231811

第三步

image-20231112182357959

第四步

image-20231112182548734

第五步

image-20231112182712967

  • NAT(Network Address Translation,网络地址转换):将IP数据报文头中的IP地址转换为另一个IP地址。

5.VlAN综合实验

  • portswitch命令用来配置将以太网接口从三层模式切换到二层模式。
    • 切换到二层后可以配置vlan,但无法配置ip
  • undo portswitch命令用来配置将以太网接口从二层模式切换到三层模式。
    • 切换到三层后可以配置ip,但无法配置vlan
  • 交换机接口类型
    • 2层物理口
    • 3层物理口
    • 3层虚拟口 vlanif
  • 交换机与路由器之间通信有2种方式:
    • 2层物理口+3层虚拟口
    • 3层物理口

image-20240128233443567

结果验证

image-20240129001157722

image-20240129001221581