VLAN

1. 介绍

当网络上所有设备在同一个广播域产生大量的广播和多播帧(arp/dhcp/stp/rip),就会与业务数据流争带宽,造成网络性能恶化。将大型广播域分段是提高网络性能的方法之一。路由器能够将广播包阻隔在一个三层接口上,但是路由器的LAN接口数量有限,它的主要功能是在三层网络间传输数据,而不是对终端设备提供网络接入。访问LAN的功能还是由接入层交换机来实现,通过在二层交换机上创建VLAN来减少广播域。现代交换机就是通过VLAN来构造的,因此在某种程度上,学习交换机就是学习VLAN。大多数交换机都存在一个默认的VLAN1信息,这是交换机出厂时的默认设置,把所有的端口都划分在了VLAN1中。

2. VLAN和VLSM

base64str
子网划分的术语叫做VLSM(Variable Length Subnet Mask,可变长子网掩码),事实上是拿子网掩码变戏法。在上图中,我们有四个网段,需要四个IP地址段。而如果你只有一个B类地址(172.16.0.0/16)可用,通过子网划分,可以将这个B类地址划分成一个个小一点的子网。这样一来,一个庞大的广播域可以被分割成小的单元,另外IP地址的使用也更为科学更为合理。注意这里要通过路由器来分隔不同子网才能保证网络的实际隔离。如果你使用交换机来实现这点,即使你给连接到同一交换机上的不同主机配置了不同的网络地址,但是主机是可以自行修改IP的,这样主机仍可以自行轻松进入另一个子网环境。

对于一台二层交换机来说,缺省时整机就是一个广播域、一个LAN。这意味着,只要连接到这个交换机的PC配置在一个IP子网内,即可直接进行互相访问,而且更重要的一点是,处于同一个广播域内的某个节点只要发送一个广播数据帧,在这个广播域内的所有节点都会收到这个数据帧,并且耗费资源来处理(即使它可能并不需要这个数据帧)。当这个广播域变得特别大(交换机上连接的用户数量特别多)时网络就非常有可能被大量的广播消耗掉大量资源。另一方面,实际的网络中经常存在这样的需求:连接在同一个交换机上的用户有可能是不同的业务部门,我希望对他们进行隔离,或者以独立的网络单元进行管理。基于上述需求,我们引入VLAN的概念,所谓VLAN,也即Virtual LAN,是一个虚拟的、逻辑的LAN,一组与位置无关的逻辑端口。通过VLAN技术,可以在交换机上,根据接口等信息进行VLAN的划定。不同VLAN之间必须通过路由器或三层交换机层才可以通信。

例如,一个拥有4端口的交换机,可以把其中的2个端口分到一个VLAN,另外2个端口分到另一个VLAN,VLAN之间互相看不到对方流量。这样逻辑上就相当于有了两个独立的交换机。通常情况下,交换机会将流量泛洪到其他所有端口,VLAN可以将流量进行隔离。理论上,如果VLAN间没有互通诉求,VLAN之间的网络地址是可以重叠的。但是正常组网下,VLAN和子网应该是一对一的关系。VLAN作用仅仅是用来将连接到同交换机的子网进行隔离的。

VLAN是在数据链路层进行划分的,不具备位置属性,可以在一个交换机广播域划分,也可以跨交换机划分VLAN,那么mac帧就会携带VLAN号码标记。VLAN是不能跨三层路由器配置的。子网是在三层进行划分的,不同的子网具有位置属性,通过路由器物理进行分割。

3. 交换机高级转发决策

交换机原理中,我们学习来交换机是通过MAC地址表进行转发的。引入VLAN之后,源地址表按照VLAN将端口与MAC地址相对应起来,从而使得交换机能够做出更多高级转发决策。

4. VLAN作用

  • 安全性:不同vlan之间数据隔离
  • 节约成本:无需昂贵的网络升级,并且带宽及上行链路利用率更加有效
  • 性能提高:划分多广播域,减少不必要的数据流造成的性能浪费

5. VLAN格式(IEEE 802.1Q)

image.png

image.png
vlan id占用12bit,范围是04095,0和4095为协议保留值,所以vlan id的有效值范围是14094。

6. VLAN端口

  • Access类型的端口:只能属于1 个VLAN,且只向该VLAN转发数据帧,一般用于连接计算机的端口
  • Trunk类型的端口:可以允许多个VLAN 通过,可以接收和发送多个VLAN 的报文,一般用于交换机之间连接的端口

6.1. access口

Access口所属vlan可以分为静态vlan和动态vlan。

VLAN划分方式 原理 优点 缺点 适用场景
基于接口 根据交换机的接口来划分VLAN。

网络管理员预先给交换机的每个接口配置不同的PVID,当一个数据帧进入交换机时,如果没有带VLAN标签,该数据帧就会被打上接口指定PVID的Tag。然后数据帧将在指定PVID中传输。
定义成员简单。 成员移动需重新配置VLAN。 适用于任何大小但位置比较固定的网络。
基于MAC地址 根据数据帧的源MAC地址来划分VLAN。

网络管理员预先配置MAC地址和VLAN ID映射关系表,当交换机收到的是Untagged帧时,就依据该表给数据帧添加指定VLAN的Tag。然后数据帧将在指定VLAN中传输。
当用户的物理位置发生改变,不需要重新配置VLAN,提高了用户的安全性和接入的灵活性。 需要预先定义网络中所有成员。 适用于位置经常移动但网卡不经常更换的小型网络,如移动PC。
基于子网划分 根据数据帧中的源IP地址和子网掩码来划分VLAN。

网络管理员预先配置IP地址和VLAN ID映射关系表,当交换机收到的是Untagged帧,就依据该表给数据帧添加指定VLAN的Tag。然后数据帧将在指定VLAN中传输。
- 当用户的物理位置发生改变,不需要重新配置VLAN。
- 可以减少网络通信量,可使广播域跨越多个交换机。
网络中的用户分布需要有规律,且多个用户在同一个网段。 适用于对安全需求不高、对移动性和简易管理需求较高的场景中。比如,一台PC配置多个IP地址分别访问不同网段的服务器,以及PC切换IP地址后要求VLAN自动切换等场景。
基于协议划分 根据数据帧所属的协议(族)类型及封装格式来划分VLAN。

网络管理员预先配置以太网帧中的协议域和VLAN ID的映射关系表,如果收到的是Untagged帧,就依据该表给数据帧添加指定VLAN的Tag。然后数据帧将在指定VLAN中传输。
将网络中提供的服务类型与VLAN相绑定,方便管理和维护。 - 需要对网络中所有的协议类型和VLAN ID的映射关系表进行初始配置。
- 需要分析各种协议的格式并进行相应的转换,消耗交换机较多的资源,速度上稍具劣势。
适用于需要同时运行多协议的网络。
基于策略(MAC地址、IP地址、接口)划分 根据配置的策略划分VLAN,能实现多种组合的划分方式,包括接口、MAC地址、IP地址等。

网络管理员预先配置策略,如果收到的是Untagged帧,且匹配配置的策略时,给数据帧添加指定VLAN的Tag。然后数据帧将在指定VLAN中传输。
- 安全性高,VLAN划分后,用户不能改变IP地址或MAC地址。
- 网络管理人员可根据自己的管理模式或需求选择划分方式。
针对每一条策略都需要手工配置。 适用于需求比较复杂的环境。

6.1.1. 静态vlan

静态vlan是基于端口的vlan(Port Based VLAN)。顾名思义,就是明确指定各端口属于哪个vlan的设定方法。
image.png
由于需要一个个端口地指定,因此当网络中的计算机数目超过一定数字(比如数百台)后,设定操作就会变得烦杂无比。并且,客户机每次变更所连端口,都必须同时更改该端口所属VLAN的设定——这显然静态VLAN不适合那些需要频繁改变拓补结构的网络。

6.1.2. 动态vlan

动态VLAN则是根据每个端口所连的计算机,随时改变端口所属的VLAN。这就可以避免静态vlan的更改设定之类的操作。动态VLAN可以大致分为3类:

  • 基于MAC地址的VLAN(MAC Based VLAN)。基于MAC地址的VLAN,就是通过查询并记录端口所连计算机上网卡的MAC地址来决定端口的所属。假定有一个MAC地址“A”被交换机设定为属于VLAN“10”,那么不论MAC地址为“A”的这台计算机连在交换机哪个端口,该端口都会被划分到VLAN10中去。计算机连在端口1时,端口1属于VLAN10;而计算机连在端口2时,则是端口2属于VLAN10。
  • 基于子网的VLAN(Subnet Based VLAN)。基于子网的VLAN,则是通过所连计算机的IP地址,来决定端口所属VLAN的。不像基于MAC地址的VLAN,即使计算机因为交换了网卡或是其他原因导致MAC地址改变,只要它的IP地址不变,就仍可以加入原先设定的VLAN。
  • 基于用户的VLAN(User Based VLAN)。基于用户的VLAN,则是根据交换机各端口所连的计算机上当前登录的用户,来决定该端口属于哪个VLAN。这里的用户识别信息,一般是计算机操作系统登录的用户,比如可以是Windows域中使用的用户名。这些用户名信息,属于OSI第四层以上的信息。
    其间的差异,主要在于根据OSI参照模型哪一层的信息决定端口所属的VLAN。

6.1.3. Access接收帧

  1. 如果该帧是Untagged帧,则接收帧并打上接口的PVID(也就是该Access接口的default vlan或缺省VLAN);
  2. 如果该帧是Tagged帧,则当其VLAN-ID与接口PVID相同时,接收该帧,否则丢弃。
    image.png

    上图中,白色的大方框指的是交换机内部。

6.1.4. Access发送帧

在发送数据帧时,剥离其Tag,发出的帧为原始以太网帧,也就是Untagged帧。由于Access接口通常用于连接终端设备,而终端设备通常是只能够识别Untagged帧的,因此Access接口在发送数据帧时,始终是不会携带标记的(Access发送的数据报必定是无VLAN信息的数据包)。
image.png
当一个帧从Access口通过Trunk口传输到另一台交换机时,这个帧会携带VLAN信息,具体来说,它会包含802.1Q VLAN标记。在这个过程中,Access口连接的设备通常是终端设备,可能不发送带有VLAN标记的帧。然而,当帧通过Access口进入交换机后,交换机会为这个帧添加VLAN标记,然后将带有VLAN标记的帧发送到Trunk口。Trunk口的目的是在不同交换机之间传输多个VLAN的帧。为了实现这一点,Trunk口上传输的帧必须包含802.1Q VLAN标记。这样,接收端的交换机能够正确地识别帧属于哪个VLAN,并按照相应的VLAN进行处理。因此,从Access口发出的报文在通过Trunk口传输时,会带有802.1Q VLAN标记,以确保正确的VLAN信息被传递到网络中的其他设备。

6.1.5. 总结

Access 端口可接受并转发的数据来源:

  1. 来自PC的无VLAN信息数据包;
  2. 从一个Access口入打上VLAN标记在交换机内转交给相同VLAN的access口去掉标记的无VLAN信息数据包;或者携带vlan标记转发给trunk口
  3. Access端口发送出去的数据包无VLAN信息,可被PC接受或Access口接收。

当Access口收到报文后,打上PVID(默认VLAN ID)标记的主要作用有:

  1. 确保报文可以在该VLAN内部正确转发:打上PVID后,交换机就可以区分该报文属于哪个VLAN,从而进行正确的内部转发。
  2. 保证不同VLAN间的隔离:添加PVID标记后,不属于该VLAN的端口就不会收到或者转发这个报文,实现了VLAN间的隔离。

Access口发出报文(目的是终端设备)去掉VLAN标记的主要原因有:

  1. Access口连接的是终端设备或者服务器等用户端设备,这些设备通常没有VLAN处理能力。如果发出的报文包含VLAN标记,这些设备无法识别,无法正常通信。
  2. 对用户端设备来说,它们只属于一个VLAN。没有必要在发出的报文中进行VLAN标记,用户端设备用不到这些信息。
  3. VLAN标记属于二层的标记信息。在用户网络这一端,更关心的是三层四层的服务和业务信息。所以VLAN信息对用户端意义不大。
  4. 去掉VLAN标记可以减少报文中的元数据,降低传输报文的开销,提升网络处理效率。
  5. 用户网络与服务网络的隔离常通过VLAN技术来实现。发往用户端的报文无需也不应包含VLAN信息,以免泄露网络拓扑信息。
  6. 如果发往用户端报文包含VLAN,则用户可能利用这个信息进行网络攻击,产生安全隐患。

6.2. trunk口

到此为止,我们学习的都是使用单台交换机设置VLAN时的情况。那么,如果需要设置跨越多台交换机的VLAN时又如何呢?

在规划企业级网络时,很有可能会遇到隶属于同一部门的用户分散在同一座建筑物中的不同楼层的情况,这时可能就需要考虑到如何跨越多台交换机设置VLAN的问题了。假设有如下图所示的网络,且需要将不同楼层的A、C和B、D设置为同一个VLAN。
image.png

最简单的方法,自然是在交换机1和交换机2上各设一个红、蓝VLAN专用的接口并互联了。
image.png
但是,这个办法从扩展性和管理效率来看都不好。例如,在现有网络基础上再新建VLAN时,为了让这个VLAN能够互通,就需要在交换机间连接新的网线。建筑物楼层间的纵向布线是比较麻烦的,一般不能由基层管理人员随意进行。并且,VLAN越多,楼层间(严格地说是交换机间)互联所需的端口也越来越多,交换机端口的利用效率低是对资源的一种浪费、也限制了网络的扩展。

为了避免这种低效率的连接方式,人们想办法让交换机间互联的网线集中到一根上,这时使用的就是汇聚链接(Trunk Link),Trunk Link所连接的接口也叫做Trunk口。
image.png

6.2.1. Trunk口接收帧

  • 若收到的数据帧是Untagged帧,则为数据帧打上接口PVID的标记,然后,如果PVID在接口允许通行(Allow-pass)的VLAN列表里,则接收该帧,若PVID不在允许通行的VLAN列表里,则丢弃。缺省时,Trunk接口的PVID为1,而且VLAN1缺省已经在允许通行的VLAN列表中。
  • 若收到的数据帧是Tagged帧,且其VLAN-ID在接口允许通行的VLAN列表里,则接收该帧。否则丢弃。

6.2.2. 发送帧

  • 若该帧的VLAN-ID与接口PVID相同,且该VLAN在允许通行的VLAN列表中,则去掉Tag,发送数据帧。
  • 若该帧的VLAN-ID与接口PVID不同,且该VLAN在允许通行的VLAN列表中,则保持原有Tag,发送该Tagged帧,而如果数据帧的VLAN-ID不在允许通行的VLAN列表中,则禁止从该接口发出。
    image.png

7. VLAN间通信

我们已经知道两台计算机即使连接在同一台交换机上,只要所属的VLAN不同就无法直接通信。接下来我们将要学习的就是如何在不同的VLAN间进行路由,使分属不同VLAN的主机能够互相通信。

首先,先来复习一下为什么不同VLAN间不通过路由就无法通信。在LAN内的通信,必须在数据帧头中指定通信目标的MAC地址。而为了获取MAC地址,TCP/IP协议下使用的是ARP。ARP解析MAC地址的方法,则是通过广播。也就是说,如果广播报文无法到达,那么就无从解析MAC地址,亦即无法直接通信。

计算机分属不同的VLAN,也就意味着分属不同的广播域,自然收不到彼此的广播报文。因此,属于不同VLAN的计算机之间无法直接互相通信。为了能够在VLAN间通信,需要利用OSI参照模型中更高一层——网络层的信息(IP地址)来进行路由。

路由功能,一般主要由路由器提供。但在今天的局域网里,我们也经常利用带有路由功能的交换机——三层交换机(Layer 3 Switch)来实现。

7.1. vlanif口

LANIF口(VLAN Interface,VLAN接口)是在一些网络设备中用于与虚拟局域网(VLAN)进行交互的逻辑接口。它的作用有以下几个方面:

  • 实现VLAN与网络设备的连接:VLANIF口可用于将VLAN与物理设备(如交换机)连接起来。它相当于将VLAN虚拟出来,使得设备能够理解和处理来自VLAN的信息。
  • 实现VLAN间的互通:当网络中存在多个VLAN时,需要通过某些方式实现它们之间的互通。VLANIF口可以作为VLAN之间的交换口,允许不同VLAN中的设备之间进行通信。
  • 提供逻辑接口与上层网络交互:VLANIF口具备与上层网络进行通信的能力,如与路由器相连,从而实现不同VLAN之间的跨网段通信。
  • 配置IP地址和其他网络参数:VLANIF口可以配置IP地址,使得其具备在网络中进行通信的能力。此外,还可以配置其他网络参数,如子网掩码、默认网关等。
    总的来说,VLANIF口在网络设备中充当了连接不同VLAN和上层网络的桥梁,实现了VLAN的隔离和互通,同时也提供了管理和配置VLAN的功能。
    在一些网络设备中,一个VLAN可以配置多个VLANIF口(VLAN Interface)。这意味着一个VLAN可以与多个逻辑接口进行关联,从而实现更灵活的网络配置和管理。有多个VLANIF口的情况可以发生在以下场景:
  • 分段网络:当一个VLAN需要被划分成多个子网时,可以为每个子网创建一个独立的VLANIF口。这样可以为每个子网配置不同的IP地址、子网掩码、默认网关等网络参数。
  • 逻辑隔离:有时候在同一个VLAN中需要实现逻辑上的隔离,例如将同一VLAN内的设备划分为不同的逻辑组。为每个逻辑组创建单独的VLANIF口可以提供更细粒度的管理和控制。
  • 多网关设置:某些情况下,一个VLAN可能需要使用多个默认网关。通过为该VLAN配置多个VLANIF口,可以为每个接口指定不同的默认网关,实现使用不同网关的多路径选择。
    需要注意的是,并非所有的网络设备都支持多个VLANIF口的配置。具体支持的数量和配置方法可能会因设备类型和厂商而异。在配置多个VLANIF口之前,建议参考设备的文档或咨询设备厂商,以确保设备支持所需的功能和配置。

7.2. 使用路由器进行vlan间路由

在使用路由器进行VLAN间路由时,与构建横跨多台交换机的VLAN时的情况类似,我们还是会遇到“该如何连接路由器与交换机”这个问题。路由器和交换机的接线方式,大致有以下两种:

  • 将路由器与交换机上的每个VLAN分别连接
  • 不论VLAN有多少个,路由器与交换机都只用一条网线连接

7.2.1. access口连接

最容易想到的,当然还是“把路由器和交换机以VLAN为单位分别用网线连接”了。将交换机上用于和路由器互联的每个端口设为access口,然后分别用网线与路由器上的独立端口互联。如下图所示,交换机上有2个VLAN,那么就需要在交换机上预留2个端口用于与路由器互联;路由器上同样需要有2个端口;两者之间用2条网线分别连接。
image.png
如果采用这个办法,大家应该不难想象它的扩展性很成问题。每增加一个新的VLAN,都需要消耗路由器的端口和交换机上的访问链接,而且还需要重新布设一条网线。而路由器通常不会带有太多LAN接口的。新建VLAN时,为了对应增加的VLAN所需的端口,就必须将路由器升级成带有多个LAN接口的高端产品,这部分成本、还有重新布线所带来的开销,都使得这种接线法成为一种不受欢迎的办法。

7.2.2. Trunk口连接

那么,第二种办法“不论VLAN数目多少,都只用一条网线连接路由器与交换机”呢?当使用一条网线连接路由器与交换机、进行VLAN间路由时,需要用到Trunk口。

具体实现过程为:首先将用于连接路由器的交换机端口设为Trunk口,而路由器上的端口也必须支持汇聚链路。双方用于汇聚链路的协议自然也必须相同。接着在路由器上定义对应各个VLAN的“子接口(Sub Interface)”。尽管实际与交换机连接的物理端口只有一个,但在理论上我们可以把它分割为多个虚拟端口。
image.png
VLAN将交换机从逻辑上分割成了多台,因而用于VLAN间路由的路由器,也必须拥有分别对应各个VLAN的虚拟接口。采用这种方法的话,即使之后在交换机上新建VLAN,仍只需要一条网线连接交换机和路由器。用户只需要在路由器上新设一个对应新VLAN的子接口就可以了。与前面的方法相比,这种方法扩展性要强得多,也不用担心需要升级LAN接口数不足的路由器或是重新布线。

7.2.2.1. 通信原理

image.png
红色VLAN(VLAN ID=1)的网络地址为192.168.1.0/24,蓝色VLAN(VLAN ID=2)的网络地址为192.168.2.0/24。各计算机的MAC地址分别为A/B/C/D,路由器汇聚链接端口的MAC地址为R。交换机通过对各端口所连计算机MAC地址的学习,生成如下的MAC地址列表。

端口 MAC地址 VLAN
1 A 1
2 B 1
3 C 2
4 D 2
5
6 R 汇聚

首先考虑计算机A与同一VLAN内的计算机B之间通信时的情形。

  1. 计算机A发出ARP请求信息,请求解析B的MAC地址。
  2. 交换机收到数据帧后,检索MAC地址列表中与收信端口同属一个VLAN的表项。
  3. 结果发现,计算机B连接在端口2上,于是交换机将数据帧转发给端口2,最终计算机B收到该帧。
    收发信双方同属一个VLAN之内的通信,一切处理均在交换机内完成。
    image.png
    接下来是这一讲的核心内容,不同VLAN间的通信。让我们来考虑一下计算机A与计算机C之间通信时的情况。
    image.png
  4. 计算机A从通信目标的IP地址(192.168.2.1)得出C与本机不属于同一个网段。因此会向设定的默认网关(Default Gateway,GW)转发数据帧。在发送数据帧之前,需要先用ARP获取路由器的MAC地址。
  5. 得到路由器的MAC地址R后,接下来就是按图中所示的步骤发送往C去的数据帧。①的数据帧中,目标MAC地址是路由器的地址R、但内含的目标IP地址仍是最终要通信的对象C的地址。这一部分的内容,涉及到局域网内经过路由器转发时的通信步骤。
  6. 交换机在端口1上收到①的数据帧后,检索MAC地址列表中与端口1同属一个VLAN的表项。由于汇聚链路会被看作属于所有的VLAN,因此这时交换机的端口6也属于被参照对象。这样交换机就知道往MAC地址R发送数据帧,需要经过端口6转发。从端口6发送数据帧时,由于它是汇聚链接,因此会被附加上VLAN识别信息。由于原先是来自红色VLAN的数据帧,因此如图中②所示,会被加上红色VLAN的识别信息后进入汇聚链路。
  7. 路由器收到②的数据帧后,确认其VLAN识别信息,由于它是属于红色VLAN的数据帧,因此交由负责红色VLAN的子接口接收。接着,根据路由器内部的路由表,判断该向哪里中继。由于目标网络192.168.2.0/24是蓝色VLAN,且该网络通过子接口与路由器直连,因此只要从负责蓝色VLAN的子接口转发就可以了。这时,数据帧的目标MAC地址被改写成计算机C的目标地址;并且由于需要经过汇聚链路转发,因此被附加了属于蓝色VLAN的识别信息。这就是图中③的数据帧。
  8. 交换机收到③的数据帧后,根据VLAN标识信息从MAC地址列表中检索属于蓝色VLAN的表项。由于通信目标——计算机C连接在端口3上、且端口3为普通的access口,因此交换机会将数据帧除去VLAN识别信息后(数据帧④)转发给端口3,最终计算机C才能成功地收到这个数据帧。

进行VLAN间通信时,即使通信双方都连接在同一台交换机上,也必须经过:“发送方——交换机——路由器——交换机——接收方”这样一个流程。

7.3. 使用三层交换机进行vlan间路由

现在,我们知道只要能提供VLAN间路由,就能够使分属不同VLAN的计算机互相通信。但是,如果使用路由器进行VLAN间路由的话,随着VLAN之间流量的不断增加,很可能导致路由器成为整个网络的瓶颈。交换机使用被称为ASIC(Application Specified Integrated Circuit)的专用硬件芯片处理数据帧的交换操作,在很多机型上都能实现以缆线速度(Wired Speed)交换。而路由器,则基本上是基于软件处理的。即使以缆线速度接收到数据包,也无法在不限速的条件下转发出去,因此会成为速度瓶颈。就VLAN间路由而言,流量会集中到路由器和交换机互联的汇聚链路部分,这一部分特别容易成为速度瓶颈。并且从硬件上看,由于需要分别设置路由器和交换机,在一些空间狭小的环境里可能连设置的场所都成问题。

为了解决上述问题,三层交换机应运而生。三层交换机,本质上就是“带有路由功能的(二层)交换机”。路由属于OSI参照模型中第三层网络层的功能,因此带有第三层路由功能的交换机才被称为“三层交换机”。关于三层交换机的内部结构,可以参照下面的简图。
image.png
在一台本体内,分别设置了交换机模块和路由器模块;而内置的路由模块与交换模块相同,使用ASIC硬件处理路由。因此,与传统的路由器相比,可以实现高速路由。并且,路由与交换模块是汇聚链接的,由于是内部连接,可以确保相当大的带宽。

在三层交换机内部数据传播基本上和使用汇聚链路连接路由器与交换机时的情形相同。假设有如下图所示的4台计算机与三层交换机互联。当使用路由器连接时,一般需要在LAN接口上设置对应各VLAN的子接口;而三层交换机则是在内部生成“VLAN接口(VLAN Interface)”。VLAN接口,是用于各VLAN收发数据的接口。

在Cisco的Catalyst系列交换机上,VLAN Interface被称为SVI——Switched Virtual Interface

image.png
为了与使用路由器进行VLAN间路由对比,让我们同样来考虑一下计算机A与计算机B之间通信时的情况。首先是目标地址为B的数据帧被发到交换机;通过检索同一VLAN的MAC地址列表发现计算机B连在交换机的端口2上;因此将数据帧转发给端口2。

接下来设想一下计算机A与计算机C间通信时的情形。针对目标IP地址,计算机A可以判断出通信对象不属于同一个网络,因此向默认网关发送数据(Frame 1)。交换机通过检索MAC地址列表后,经由内部汇聚链接,将数据帧转发给路由模块。在通过内部汇聚链路时,数据帧被附加了属于红色VLAN的VLAN识别信息(Frame 2)。路由模块在收到数据帧时,先由数据帧附加的VLAN识别信息分辨出它属于红色VLAN,据此判断由红色VLAN接口负责接收并进行路由处理。因为目标网络192.168.2.0/24是直连路由器的网络、且对应蓝色VLAN;因此,接下来就会从蓝色VLAN接口经由内部汇聚链路转发回交换模块。在通过汇聚链路时,这次数据帧被附加上属于蓝色VLAN的识别信息(Frame 3)。交换机收到这个帧后,检索蓝色VLAN的MAC地址列表,确认需要将它转发给端口3。由于端口3是通常的访问链接,因此转发前会先将VLAN识别信息除去(Frame 4)。最终,计算机C成功地收到交换机转发来的数据帧。
image.png
整体的流程,与使用外部路由器时的情况十分相似——都需要经过“发送方→交换模块→路由模块→交换模块→接收方”这样的流程。

7.3.1. 加速vlan通信的手段

根据到此为止的学习,我们已经知道VLAN间路由,必须经过外部的路由器或是三层交换机的内置路由模块。但是,有时并不是所有的数据都需要经过路由器(或路由模块)。例如,使用FTP(File Transfer Protocol)传输容量为数MB以上的较大的文件时,由于MTU的限制,IP协议会将数据分割成小块后传输、并在接收方重新组合。这些被分割的数据,“发送的目标”是完全相同的。发送目标相同,也就意味着同样的目标IP地址、目标端口号(注:特别强调一下,这里指的是TCP/UDP端口)。自然,源IP地址、源端口号也应该相同。这样一连串的数据流被称为“流(Flow)”。
image.png
只要将流最初的数据正确地路由以后,后继的数据理应也会被同样地路由。据此,后继的数据不再需要路由器进行路由处理;通过省略反复进行的路由操作,可以进一步提高VLAN间路由的速度。

接下来,让我们具体考虑一下该如何使用三层交换机进行高速VLAN间路由。首先,整个流的第一块数据,照常由交换机转发→路由器路由→再次由交换机转发到目标所连端口。这时,将第一块数据路由的结果记录到缓存里保存下来。需要记录的信息有:

  • 目标IP地址
  • 源IP地址
  • 目标TCP/UDP端口号
  • 源TCP/UDP端口号
  • 接收端口号(交换机)
  • 转发端口号(交换机)
  • 转发目标MAC地址
    同一个流的第二块以后的数据到达交换机后,直接通过查询先前保存在缓存中的信息查出“转发端口号”后就可以转发给目标所连端口了。这样一来,就不需要再一次次经由内部路由模块中继,而仅凭交换机内部的缓存信息就足以判断应该转发的端口。这时,交换机会对数据帧进行由路由器中继时相似的处理,例如改写MAC地址、IP包头中的TTL和Check Sum校验码信息等。
    image.png
    通过在交换机上缓存路由结果,实现了以缆线速度(Wired Speed)接收发送方传输来数据的数据、并且能够全速路由、转发给接收方。

需要注意的是,类似的加速VLAN间路由的手法多由各厂商独有的技术所实现,并且该功能的称谓也因厂商而异。例如,在Cisco的Catalyst系列交换机上,这种功能被称为“多层交换(Multi Layer Switching)”。另外,除了三层交换机的内部路由模块,外部路由器中的某些机型也支持类似的高速VLAN间路由机制。

7.4. 路由器存在的意义

三层交换机的价格,在问世之初非常昂贵,但是现在它们的价格已经下降了许多。目前国外一些廉价机型的售价,折合成人民币后仅为一万多元,而且还在继续下降中。

既然三层交换机能够提供比传统型路由器更为高速的路由处理,那么网络中还有使用路由器的必要吗?

答案是:“是”。

使用路由器的必要性,主要表现在以下几个方面:

  • 用于与WAN连接,三层交换机终究是“交换机”。也就是说,绝大多数机型只配有LAN(以太网)接口。在少数高端交换机上也有用于连接WAN的串行接口或是ATM接口,但在大多数情况下,连接WAN还是需要用到路由器。
  • 保证网络安全,在三层交换机上,通过数据包过滤也能确保一定程度的网络安全。但是使用路由器所提供的各种网络安全功能,用户可以构建更为安全可靠的网络。路由器提供的网络安全功能中,除了最基本的数据包过滤功能外,还能基于IPSec构建×××(Virtual Private Network)、利用RADIUS进行用户认证等等。
  • 支持除TCP/IP以外的网络架构,尽管TCP/IP已经成为当前网络协议架构的主流,但还有不少网络利用Novell Netware下的IPX/SPX或Macintosh下的Appletalk等网络协议。三层交换机中,除了部分高端机型外基本上还只支持TCP/IP。因此,在需要使用除TCP/IP之外其他网络协议的环境下,路由器还是必不可少的。

在少数高端交换机上,也能支持上述路由器的功能。例如Cisco的Catalyst6500系列,就可以选择与WAN连接的接口模块;还有可选的基于IPSec实现×××的模块;并且也能支持TCP/IP以外的其他网络协议。

8. QinQ报文封装格式

因为IEEE 802.1Q中定义的VLAN Tag域只有12个比特,仅能表示4096个VLAN,无法满足城域以太网中标识大量用户的需求,于是产生了QinQ技术,拓展VLAN的数量空间。QinQ在原有的802.1Q报文的基础上增加一层802.1Q标签,使得VLAN数量增加到4094×4094。
在公网的传输过程中,设备只根据外层VLAN Tag转发报文,并根据报文的外层VLAN Tag进行MAC地址学习,而用户的内层VLAN Tag将被当作报文的数据部分进行传输。QinQ的内外层标签可以代表不同的信息,如内层标签代表用户,外层标签代表业务。
image.png

9. Ref

3. 网络基本功(三):细说VLAN与Trunk - 《网络基本功系列》 - 书栈网 · BookStack
VLAN及Trunk,重要!看瑞哥如何讲的明明白白!-腾讯云开发者社区-腾讯云 (tencent.com)
图文并茂VLAN详解,让你看一遍就理解VLAN-腾讯云开发者社区-腾讯云 (tencent.com)