【章节内容】
1 MAC地址
2 冲突域和广播域
3 集线器、交换机、路由器
3.1 集线器
3.2 网桥和交换机
3.3 路由器
4 VLAN
4.1 VLAN帧格式
4.1.1 以太网V2 MAC帧格式
4.1.2 带VLAN的以太网帧格式
4.2 VLAN链路与端口
4.2.1 VLAN链路类型
4.2.2 VLAN端口类型
4.2.3 VLAN端口状态
4.3 VLAN划分方式
4.3.1 静态VLAN
4.3.2 动态VLAN
4.4 基于VLAN的转发与路由
4.4.1 二层转发
4.4.2 三层路由
4.4.3 VLAN间通信加速
4.4.4 路由器和交换机配合构建LAN
4.5 VLAN扩展
4.5.1 VLAN Translation
4.5.2 QinQ
4.5.3 PVlan(Cisco)
4.5.4 SuperVlan
1 MAC地址
MAC(Media Access Control,介质访问控制)地址是网络设备的硬件标识,具有唯一性。MAC地址也称为物理地址或硬件地址,由网络设备制造商生产时烧入NIC(网络接口控制器)中。MAC地址长48比特,分成块ID和设备ID两部分,前24位是OUI(Organizationally unique identifier,机构唯一标识符),后24位由厂商自行分配。MAC地址采用点分十六进制表示,如图1所示。
图1 MAC地址格式
MAC地址通常分为:
- 单播MAC地址:单播MAC地址唯一标识以太网上的一个终端,该地址固化在硬件(如网卡)内部。
- 组播MAC地址:首字节最后一位为1(通常以0x01开头)的MAC地址,标志一组设备。
- 广播MAC地址:48位全1的MAC地址,标志本网段内所有设备。
网络中按照大字节序传输报文(即先传输高字节),而字节内先传输低位比特。因此,若发送的首位比特为0就是单播,否则为组播或广播。
MAC地址按生存期也可分为:
- 动态MAC地址:交换机在网络中通过数据帧学习到,有老化时间,MAC地址和端口的对应关系会随着设备所连的交换机的端口的变化而变化。交换机关电重启后会消失,需重新学习。
- 静态MAC地址:通过配置产生,不会被老化,MAC地址和端口的对应关系始终不变,但交换机关电重启后也会消失,需重新配置。
- 永久MAC地址:通过配置产生,不会被老化,MAC地址和端口的对应关系始终不变,且交换机关电重启后也不会消失。
2 冲突域和广播域
冲突域(物理层):不同主机或设备同时发出的帧可能会互相冲突的网络区域。一条导线上所有工作站的集合,或一个物理网段上所有节点的集合,或以太网上竞争同一带宽的节点的集合都是一个冲突域。当冲突发生时,传送的帧可能遭到破坏或干扰,发生冲突的主机将根据802.3以太网的CSMA/CD规则在一段随机的时间内停止发送后续帧。其缺点是每台主机得到的可用带宽很低,当冲突域内主机设备数量增加时,网络冲突将成倍增加,信息传输安全得不到保证。集线器连接的各设备就是一个典型冲突域,如图2所示。
图2 典型的HUB构成的冲突域
广播域(数据链路层):网络中能接收任一设备发出的广播帧的所有设备集合。所有需要接收其他广播的节点被划分为同一广播域或逻辑网段。连接在HUB和传统交换机端口上的所有节点构成一个广播域。当交换机收到广播帧时,它将该帧转发到自己除接收该帧的端口外的每一个端口,每个连接设备都会接收并处理该帧。
随着网络规模的扩大,广播域中广播报文相遇的次数也随之增加。所有这些广播报文会严重影响网络性能,若管理不当,甚至会导致整个网络的崩溃。
3 集线器、交换机、路由器
3.1 集线器
以太网集线器(HUB)从任一端口收到以太网数据帧后,都会将该帧广播到其它所有端口。集线器对应物理层,不同端口所连接的设备同时传数据时会引起冲突,故其冲突域和广播域是所有端口,既不能隔离冲突域也不能隔离广播域。非交换式HUB不能划分物理网段,因为它没有划分冲突域。
3.2 网桥和交换机
网桥和交换机位于数据链路层,基于MAC地址进行数据转发。网桥和交换机的每个物理端口属于一个冲突域,所有端口在一个广播域。两者均能隔离冲突域,但不能隔离广播域,不能阻止广播并对网络进行逻辑分段。
网桥与交换机有以下不同之处:
- 网桥只有少数几个端口;交换机却可有上百个端口。
- 网桥速度比交换机慢,交换机采用硬件ASIC芯片进行线速转发交换,比网桥速度快。
- 网桥采取存储转发的机制,等收到全部数据后再进行转发;而交换机除存储机制外还有直接转发机制,只需帧头到达处理后就可转发,不必等到所有数据都到达,故交换机处理速度比网桥快些。
鉴于网桥的局限性,现代交换LAN中已很少使用网桥。
3.3 路由器
路由器位于网络层,可以隔离冲突域和广播域。每个子网(subnet)属于一个广播域,不同子网间不能发送广播。因此,对广播进行控制就必须使用路由器(或具有路由功能的三层交换机)。使用路由器后,可以路由器上的网络接口(LAN Interface)为单位分割广播域。
一般使用路由器和交换机把LAN分段为大量更小的冲突域和广播域。传统交换机对LAN分段的方法如图3所示。
图3 传统LAN的分割
虽然交换机可缩小冲突域的规模(每个端口就是一个冲突域),但连接到交换机的所有端口的主机仍然处于一个广播域中。传统交换机相连构成的一个广播域内广播帧的转发过程如图4所示。
图4 传统交换机上的广播
图中是一个由5台二层交换机(SW1~5)连接了大量客户主机构成的网络。假设主机PC1要与主机PC2通信。以太网通信中必须在数据帧中指定目标MAC地址才能正常通信,故PC1必须先广播ARP请求信息,来尝试获取PC2的MAC地址。交换机SW1收到ARP广播帧后,将其转发到除入帧端口外的其他所有端口,于是SW2和SW3收到广播帧,它们也将帧转发到各自的所有端口……最终同一网络中与交换机相连的所有主机(PC2-PC8)都接收到该ARP请求。可见,本应发往PC2的ARP请求扩散至整个网络,不仅消耗了网络整体带宽,而且收到广播帧的主机还要消耗一部分CPU时间对其进行处理。在网络规模较大时,大量广播帧将严重影响网络性能,造成广播风暴问题。此外,由于整个网络在一个广播域,所有用户都能不受控制地直接访问和影响网络所有部分,进而威胁到网络安全性。
默认情况下,路由器不转发广播流量,因此可用于分割广播域。用路由器创建广播域将减少广播流量,并为单播通讯提供更多的带宽,每个路由器端口都连接到单独的网络,广播流量仅限于发出该广播的LAN网段内。但通常路由器网络接口较少(1~4个左右),所能分割的广播域个数有限,且路由器相对交换机成本也较高。而二层交换机一般带有多个网络接口,若能用其分割广播域,则会大大提高网络设计的自由度。
4 VLAN
VLAN(Vitual Local Area Network,虚拟局域网)是将物理网络划分成多个逻辑局域网的技术。一个VLAN就是一个广播域,亦即一个逻辑子网,在其内的站点可位于不同物理LAN上,但站点间像在同一个普通局域网上那样自由通信而不受物理位置的限制。利用VLAN技术,网络管理者可根据实际应用需要,在二层交换机上把同一物理局域网中的用户逻辑划分成不同广播域,使具有相同需求或业务的用户处于同一广播域,不同需求或业务的用户处于不同的广播域。
在未设置任何Vlan的二层交换机上,任何广播帧都会被转发给除接收端口外的所有其他端口。配置Vlan后,当交换机属于某Vlan的一个端口收到广播帧后,为保证同属一个Vlan的所有主机都收到该广播帧,交换机必须按照如下原则转发:
1) 发送给本交换机中同一个Vlan中的其它端口;
2) 发送给本交换机的包含该Vlan的所有汇聚链路,以便其它交换机上同一Vlan的端口也发送该帧。
图5给出交换机上创建两个Vlan后,主机发出的广播帧被转发的示例。为便于说明,以红、蓝两色识别不同Vlan(实际使用中以Vlan ID来区分)。其中端口1、2属于红色Vlan,端口3、4属于蓝色Vlan。
图5 Vlan分割广播域
可见,从PC1发出的广播帧仅被转发给同一Vlan内的其他端口,即同属于红色Vlan的端口2,而不会再转发给属于蓝色Vlan的端口。就这样,Vlan通过限制广播帧转发的范围分割广播域,进而改善网络效率和安全性。
Vlan可理解为在逻辑上将一台交换机分割成数台虚拟交换机,且这些虚拟交换机互不相通。Vlan是广播域,而通常两个广播域间由路由器连接,广播域间来往的数据帧由路由器中继。因此,Vlan间的通信也需要路由器(或三层交换机)提供中继服务,即“Vlan间路由”。在Vlan之间配置路由器,使Vlan内部流量仍通过原来Vlan的内部二层网络进行,从一个Vlan到另一Vlan的通信流量通过路由进行三层转发,转发到目的网络后再通过二层交换网络把数据帧最终发送给目的主机。路由器不转发以太网广播帧,故Vlan间配置的路由器不会改变划分Vlan所达到的隔离广播的目的。
4.1 VLAN帧格式
4.1.1 以太网V2 MAC帧格式
以太网MAC帧格式有两种标准,即DIX(DEC,Intel,Xerox) Ethernet V2标准(RFC894)和IEEE 802.3标准。图6所示的是常用的以太网V2的MAC帧格式(事实标准):
图6 以太网V2的MAC帧格式
以太网帧在链路层传输,故源和目的MAC地址又称链路层地址(link layer address),也称L2地址、二层地址或硬件地址。
类型(Type)字段表明上层使用什么协议。常用协议类型值如表1所示:
表1 常用协议类型值
协议类型 |
对应值 |
IP |
0x0800 |
ARP |
0x0806 |
PUP |
0x0200 |
RARP |
0x8035 |
IPv6 |
0x86DD |
PPPoE |
0x8863(发现)/0x8864(会话) |
MPLS |
0x8847/0x8848 |
IPX/SPX |
0x8137 |
IS-IS |
0x8000 |
LACP |
0x8809 |
802.1x |
0x888E |
集群 |
0x88A7 |
设备保留 |
0xFFFD/0xFFFE/0xFFFF |
数据(Data)字段为帧承载的数据内容,由一个上层协议的协议数据单元PDU构成。数据长度在46~1500之间,若上层协议数据单元长度少于46 字节,则必须填充该字段的其余部分,以保证MAC帧长度不小于64字节。
可见,一个以太网帧长范围为64~1518字节。
注意:发包工具如Testcenter设置发包长度时会将CRC考虑在内,即帧长包含CRC的4字节;而抓包工具如Wireshark显示的帧长不包括CRC字段。
4.1.2 带VLAN的以太网帧格式
IEEE 802.1Q(俗称Dot One Q)标准在以太网数据帧中“发送源MAC地址”与“类别域(Type Field)”之间附加4字节的Vlan识别信息(标签),如图7所示:
图7 插入Vlan后的以太网帧格式
TPID(Tag Protocol Identifier,标签协议标识)值规定为0x8100。设备缺省采用协议规定的TPID值,交换机通过TPID来确定数据帧是否附加基于IEEE802.1Q的VLAN信息。
TCI(Tag Control Information,标签控制信息)字段分为Pri、CFI和VLAN三部分。Pri表示报文优先级(也称1p优先级、COS或1q优先级),CFI(Canonical Format Indicator)标识MAC地址在不同传输介质中是否以标准格式进行封装,通常为0(标准格式)。Vlan ID标识该报文所属的VLAN编号,取值范围为 0~4095,一般0和4095保留(中兴设备Vid=0表示priority-tagged帧)。
在交换网络环境中,以太网帧有两种格式:有些帧未附加四字节标签,称为未标记帧(ungtagged frame),有些帧附加四字节标签,称为带标记帧(tagged frame)。
在基于端口划分的Vlan中,每个802.1Q端口都会分配一个默认的Vlan ID,称为PVID(Port Vlan ID)或端口默认Vlan ID(default Vid),CISCO称之为native Vlan。端口接收到的所有untagged帧都认为属于端口默认Vlan ID,并在端口默认Vlan ID内转发。
注意,插入或剥除Vlan标签时均会对数据帧重新计算CRC。
4.2 VLAN链路与端口
4.2.1 VLAN链路类型
Vlan内的链路可分为:
- 接入链路(Access Link,或称访问链路):将没有也无法识别Vlan标签的设备(如用户主机)连接到配置Vlan的交换机端口。它只能传送不带标签(untagged)的以太网帧,且只与一个Vlan关联。
- 汇聚链路(Trunk Link,或称干道链路、中继链路) :连接两个能够识别Vlan标签的设备(如交换机),可传输发往多个Vlan的带标签(tagged)帧,可与多个Vlan相关联。
- 混合链路(Hybrid Link):既可传送不带标签的帧,也可传送带标签的帧。但对于一个特定Vlan,传送的所有帧必须类型相同,即对于一个Vlan,传送的帧要么不带标签,要么携带相同标签。
图8显示三种链路的区别:
图8 Vlan链路类型
规划企业级网络时,很有可能会遇到隶属同一部门的用户分散在同一座建筑中不同楼层的情况,此时可能需要考虑如何跨越多台交换机设置Vlan。如在下图所示网络中,通过汇聚链路将不同楼层的四台主机设置为同一Vlan。
图9 汇聚链路
如图所示,PC1发送的数据帧从SW1经过汇聚链路到达SW2时,帧内附加了表示属于红色Vlan的标签。SW2收到数据帧后,检查Vlan标签发现该帧属于红色Vlan,故剥除标签后根据需要(单播、广播或组播)将复原的数据帧转发给其他属于红色Vlan的端口。
若不使用汇聚链路,则需在两台交换机上各设一个红、蓝Vlan专用接口并用网线互联(接入链路)。但建筑楼层间的纵向布线比较麻烦,一般不能由基层管理人员随意进行。而且,VLAN越多,楼层间(严格地说是交换机间)互联所需的端口越多,端口利用率低,也限制网络的扩展。
汇聚链路承载多个Vlan的数据,负载较重,故汇聚链路必须支持100Mbps以上的传输速度。
默认情况下,汇聚链路会转发交换机上所有Vlan的数据,亦即汇聚链路同时属于交换机上所有的Vlan。实际应用中可能并不需要转发所有Vlan数据,因此为减轻交换机负载并减少带宽浪费,用户可设定限制能经由汇聚链路互联的Vlan。
4.2.2 VLAN端口类型
根据对Vlan帧的识别情况,交换机端口的类型(模式)分为Access端口、Trunk端口及Hybrid端口。
- Access端口:交换机上连接用户主机的端口,只能连接接入链路。Access端口只属于一个Vlan,且仅向该Vlan转发数据帧。该Vlan的Vid = 端口PVid,故Vlan内所有端口都处于untagged状态。Access端口在从主机接收帧时,给帧加上Tag标签;在向主机发送帧时,将帧中的Tag标签剥掉。
- Trunk端口:交换机上与其他交换机或路由器连接的端口,只能连接汇聚链路。Trunk端口允许多个Vlan的带标签帧通过,在收发帧时保留Tag标签。在它所属的这些Vlan中,对于Vid = 端口PVid的Vlan,它处于Untagged port状态;对于Vid ≠ 端口PVid的Vlan,它处于Tagged port状态。
- Hybrid端口:交换机上既可连接用户主机又可连接其他交换机的端口,它既可连接接入链路又可连接汇聚链路。Hybrid 端口允许多个Vlan的帧通过,并可在出端口方向将某些Vlan帧的Tag标签剥掉。
注意,Access、Trunk和Hybrid端口是厂家对某种端口的称谓,并非IEEE802.1Q协议标准定义。
Access端口只属于一个Vlan,PVid就是其所在Vlan,故不用设置;Trunk和Hybrid端口属于多个Vlan,故需要设置PVid(缺省为1)。若设置端口PVid,则当端口收到不带Vlan Tag的数据帧时,对该帧加上Tag标记(Vid设置为端口所属的默认Vlan编号)并转发到属于PVid的端口;当端口发送Vlan Tag的数据帧时,若收帧的Vlan Tag和端口PVid相同,剥除Vlan Tag后再发送该帧。
Hybrid端口与Trunk端口在接收数据时处理方法相同,区别在于发送数据时:Hybrid端口允许多个Vlan的数据帧发送时不带标签,而Trunk端口只允许默认Vlan的数据帧发送时不带标签。在同一交换机上Hybrid端口和Trunk端口不能并存,实际使用中可用Hybrid代替Trunk。
本Hybrid端口的PVid和相连的对端交换机Hybrid端口的PVid必须一致。
由于端口类型不同,交换机对帧的处理过程也不同。下表根据不同的端口类型分别介绍。
表2 不同端口类型的Vlan帧处理方式
端口类型 |
收发 |
Tag标签 |
处理方式 |
Access |
收 |
有 |
丢弃(缺省) 某些高端交换机在收帧的Vlan Tag和端口PVid相等时转发,否则丢弃;或者不管是否相同均直接转发 |
无 |
标记上端口的PVid,转发 |
||
发 |
有* |
剥除帧的Vlan Tag后发送出去 |
|
Trunk |
收 |
有 |
判断端口是否允许该Vlan帧进入。允许则转发,否则丢弃 |
无 |
标记上端口的PVid,转发 |
||
发 |
有* |
若收帧的Vlan Tag和端口PVid相等则剥除Vlan Tag后发送,否则直接发送 |
|
Hybrid |
收 |
有 |
判断端口是否允许该Vlan帧进入。允许则转发,否则丢弃 |
无 |
标记上端口的PVid,转发 |
||
发 |
有* |
判断Vlan在端口是Untagged还是Tagged。若是Untagged,剥除帧的Vlan Tag后发送;若是Tagged,则直接发送 |
|
注*:从交换机内部向外发送的帧,在Untagged/Tagged处理前必定携带Vlan Tag。 |
4.2.3 VLAN端口状态
交换机端口可配置为属于某个或某几个Vlan。端口状态指其在某个Vlan中的状态,该状态决定端口接收到tagged或untagged帧时对该帧的处理方式。针对每个Vlan,端口有两种状态,即Tagged port和Untagged port。同一端口可根据不同Vlan ID设置Tagged或Untagged。
当为该端口配置其所属的Vlan时,若该Vlan的Vid = 端口PVid时,则端口在此Vlan中处于Untagged port状态;若Vid ≠ 端口PVid,则端口在此Vlan中处于Tagged port状态。
PVid只与报文的入口方向有关,对于进入交换机的无标签帧会打上进入端口的PVid标签;交换机内每个数据帧都带标签。Tagged/Untagged只与帧的出口方向有关,对于出端口为Untagged port的,转发帧时要剥除帧中的标签,否则保留标签。
4.3 VLAN划分方式
接入链路可事先设定,称为“静态Vlan”;也可根据所连主机而动态设定,称为“动态Vlan”。
4.3.1 静态VLAN
静态Vlan又称基于端口的Vlan (Port Based Vlan),即明确指定各端口属于哪个Vlan,如下图所示。
图10 基于端口划分Vlan
根据端口划分Vlan因其简单而最为常用。但由于需要逐个端口地指定Vlan,因此当网络中主机数目较多时,操作就变得非常烦杂。并且,主机每次变更所连端口时,必须同时更改该端口所属Vlan的设定——这显然不适合那些需要频繁改变拓扑结构的网络。
4.3.2 动态VLAN
动态Vlan主要有:
- 基于MAC地址的Vlan (MAC Based Vlan)
- 基于子网的Vlan (Subnet Based Vlan)
- 基于用户的Vlan(User Based Vlan)
- ……
其差异主要在于根据OSI参照模型哪一层的信息决定端口所属的Vlan。决定端口所属Vlan时利用的信息在OSI中的层面越高,就越适于构建灵活多变的网络。
网络设备厂商可能使用私有协议实现基于子网和基于用户的Vlan,因此不同厂商的设备间互联时可能出现兼容性问题。
4.3.2.1 基于MAC地址的VLAN
基于MAC地址的Vlan,就是通过查询并记录端口所连主机网卡的MAC地址来决定端口所属Vlan。假定MAC-A地址被交换机设定为属于Vlan10,则不论MAC-A地址的主机连在交换机哪个端口,该端口都会被划分到Vlan10内,如下图所示。
图11 基于MAC地址划分Vlan
基于MAC地址划分Vlan,在初始设定时必须调查所连接的所有主机MAC地址并加以记录,工作量很大。而且这种划分方法会降低交换机执行效率,因为交换机每个端口都可能存在很多个Vlan组的成员,这样就无法限制广播包。此外,若主机(如笔记本电脑)经常更换网卡,则不得不经常更改Vlan设定。
4.3.2.2 基于子网的VLAN
基于子网的Vlan,就是通过所连主机的IP地址来决定端口所属Vlan。同一子网的所有数据帧属于同一Vlan,从而将同一子网内的用户划分在一个Vlan内(与路由器相似)。即使主机MAC地址改变,只要其IP地址不变,就仍可加入原先设定的Vlan,如下图所示。
图12 基于子网划分Vlan
基于IP子网划分Vlan可按传输协议划分网段,有利于针对具体应用的服务来组织用户。再者,用户可在网络内部自由移动而不用重新配置主机,尤其是使用TCP/IP的用户。
这种方法的缺点是效率,因为检查每个数据包的网络层地址比较费时。同时由于一个端口也可能存在多个Vlan的成员,对广播报文也无法有效抑制。
4.3.2.3 基于用户的VLAN
基于用户的Vlan,则是根据交换机各端口所连的主机上当前登录的用户,来决定该端口属于哪个Vlan。用户识别信息一般是主机操作系统登录的用户,如Windows域中使用的用户名。
4.3.2.4 基于协议的VLAN
基于协议的Vlan将物理网络划分为基于协议的逻辑Vlan。在端口接收帧时,它的Vlan由帧中的协议类型决定。例如,IP、IPX和Appletalk可能有各自独立的Vlan,IP 广播帧只被送到IP Vlan中的所有端口。
4.3.2.5 基于组播地址的VLAN
基于组播地址的Vlan由组播分组动态创建的。如每个组播分组对应一个不同Vlan,保证组播数据帧只被那些连接到相应组播分组成员的端口接收到。这种划分方式效率不高,不适合局域网。但因其将Vlan扩大至广域网,故灵活性更高,且易于通过路由器进行扩展。
4.3.2.6 基于策略的VLAN
基于策略的Vlan是Vlan的最基本的定义。每个输入(无标签)帧都在策略数据库查看,该数据库决定该帧所属的Vlan。如建立公司管理人员之间往来电子邮件的特别Vlan策略,以便不在其他地方被看见。
这种划分方式最为灵活,具有自动配置能力,能够把相关用户连成一体,在逻辑划分上称为“关系网络”。网络管理员只需在网管软件中确定划分Vlan的规则(或属性),则站点加入网络时将会被“感知”,并被自动包含进正确的Vlan中。同时,也可自动识别和跟踪站点的移动和改变。
4.4 基于VLAN的转发与路由
Vlan内通信的主机同属一个广播域,主机之间的流量通过二层网络直接转发;Vlan间通信的主机位于不同广播域,主机无法直接通过ARP广播请求到对方的地址,此时必须借助三层路由器来完成通信。
路由器可视为各个Vlan的网关,因此通过路由器来互相通信的主机必须知道路由器的存在及其在本Vlan上的接口地址(默认网关)。在主机上配置默认网关后,对于跨Vlan的通信,主机会自动寻找默认网关,并把报文交给默认网关转发而不是直接发给目的主机。
可见,当报文的目的MAC地址是网关地址(路由器或三层交换机MAC地址)时,该报文为三层报文。
4.4.1 二层转发
基于Vlan的二层转发流程主要包括:确定和查找Vlan、查找和学习源MAC、查找目的MAC并转发数据帧。
1) 确定和查找Vlan:交换机端口接收到一个数据帧时,首先通过TPID值判断该帧是否带标签[1]。
- 若是tagged帧,且Vid≠0,则在端口所属的Vlan表中查找该帧标签中的Vid是否存在,若存在,则进入下一步,否则丢弃该帧(或提交CPU处理);
- 若是tagged帧,且Vid=0(即priority帧[2]),则对该帧附加端口PVid使之成为tagged帧;
- 若是untagged帧,则对该帧附加端口PVid并指定优先级使之成为tagged帧。
注:①为提高处理效率,交换机内部所有数据帧均携带Vlan标签,以统一方式处理。故需对输入交换机的数据帧进行标签检查并按需加上标签。
②802.1Q Vlan环境下,帧可分为tagged、untagged和priority-tagged三种。Tagged帧根据其携带的标签Vid进行MAC学习转发。Untagged和Priority-tagged帧进入交换机端口后根据PVid进行MAC学习转发。
2) 查找和学习源MAC:交换机在MAC转发表(Mac+Vid+Port)中查找收帧Vid对应的源MAC表项,未找到则学习收帧源MAC (将“源MAC+Vid+Port”添加到MAC表中);若找到则更新该表项的老化时间。
注:MAC地址学习只学习单播地址,对于广播和组播地址不进行学习。组播MAC表项通过CPU配置建立。
3) 查找目的MAC:若目的MAC是广播或组播,则在所属的Vlan中广播或组播;否则在MAC表中查找是否存在Vid对应的目的MAC表项。
4) 转发数据帧:若在MAC表中查找到完全匹配的DMAC+Vid表项,则将该帧转发到表项中的相应端口(若相应端口为收帧端口,则应丢弃该帧);否则向所属Vlan内除收包端口外的其他所有端口洪泛该帧(洪泛广播的是未知单播帧而不是广播帧)。
图13所示为二层转发的一般流程。
图13 二层转发流程
【例】数据帧从PC1经过一台交换机转发到与另一台交换机相连的PC2并得到响应,如下图所示。
图14 PC1向PC2发送信息
假设两台交换机刚刚开机(此时MAC地址表为空),其具体的转发过程如下:
①PC1发出的数据帧进入交换机SW1的Access端口后,按照端口PVid加上Vid=100的标签。交换机将该帧源MAC地址存入MAC地址表(学习),并将该帧洪泛到Vid=100的所有端口(除入端口外);
②SW1的Trunk端口属于Vid=100的Vlan,故接受这个标记为100的Tagged数据帧;而该端口在Vid=100上为Tagged port,因此在发送数据帧出交换机SW1时,不改变Tagged帧的结构;
③Tagged帧到达交换机SW2的Trunk端口,由于Trunk端口拥有VID=100的Vlan,故接受该帧;该Trunk端口不改变Tagged帧的结构,而是学习源MAC地址后把该数据帧洪泛给所有Vid=100的端口(除入端口外);
④SW2的Access端口接收到该帧,剥除该帧的Tag标签后发送给PC2。
⑤PC2收到PC1发送的数据帧,并发送响应帧给PC1。
⑥经过与前述过程类似的转发,响应帧到达交换机SW1。交换机发现该帧的目的MAC地址已在MAC地址表中,则仅转发给PC1。
可见,收发双方同属一个Vlan的通信,一切处理均在二层网络内完成。
4.4.2 三层路由
4.4.2.1 路由器路由
使用路由器进行Vlan间路由时,大致有以下两种:
1) 用多个路由器端口分别与每个Vlan相连接。
2) 单个路由器接口与交换机的Trunk端口相连(称为dot1Q连接),使多个Vlan共享同一条物理连接到路由器。
方式1将交换机上用于和路由器互联的每个端口设为接入链路,再分别用网线与路由器上的独立端口互联。如下图所示,交换机上有两个Vlan,需在交换机上预留两个端口用于与路由器互联;路由器上同样需要有两个端口;两者之间用两条网线分别连接。
图15 每个Vlan一个物理连接
如图,每个Vlan都要独占一个交换机端口和一个路由器端口,并需重新布设一条网线。而路由器上通常LAN接口有限,这无疑带来扩展性问题。
方式2将用于连接路由器的交换机端口设为汇聚端口,而路由器上的端口也必须支持汇聚链路。双方用于汇聚链路的协议也必须相同。接着在路由器上定义对应各Vlan的“子接口(Sub Interface)”。尽管实际与交换机连接的物理端口只有一个,但在理论上可将其分割为多个虚拟端口。如下图所示。
图16 Vlan Trunking
使用这种Vlan Trunking技术,可使多个Vlan的业务流共享相同的物理连接,通过在汇聚链路上传递带标签的帧来区分各Vlan的流量。通常情况下,Vlan间路由的流量不足以达到链路的线速度,使用Vlan Trunking的配置,可提高链路的带宽利用率,节省端口资源以及简化管理(网络新增Vlan时只需在路由器上新设一个对应新Vlan的子接口,无需重新布线)
【例】不同Vlan间通信时数据的流程,如下图所示。
图17 不同Vlan间通信流程
主机PC1通过通信目标IP地址(192.168.2.1) 与子网掩码计算比较发现PC2与本机不属于同一网段,不能直接访问。根据IP通信规则,PC1查找本机路由表寻找相应的网关。在实际网络中,主机通常只配置默认网关(Default Gateway,GW),故PC1找到默认网关。然后,PC1在本机ARP高速缓存中查找默认网关(即路由器)的MAC地址,若没有则向外广播发送一个ARP请求帧,其目的MAC地址为全1,源MAC地址为本机MAC地址,请求的IP地址为网关192.168.1.100。从路由器返回的ARP单播应答帧中得到路由器MAC地址R后,接下来就按图中所示的步骤向PC2发送数据帧①,其目的MAC地址是路由器地址R、但目的IP地址仍是最终要通信的对象PC2的地址。
交换机在端口1上收到数据帧①后,检索MAC地址表中与端口1同属一个Vlan的表项。汇聚链路被视为属于所有的Vlan,因此端口6也属于检索对象。检索后交换机得知往MAC地址R发送数据帧时,需经过端口6转发。
从汇聚端口6发送数据帧时,会附加Vlan识别信息。图中数据帧②被加上原属的红色Vlan标签后,进入汇聚链路。路由器收到数据帧②后,确认其Vlan标签,交由负责红色Vlan的子接口接收。
接着,根据路由器内部的路由表,判断该向哪里转发。由于目标网络192.168.2.0/24属于蓝色Vlan,且该网络通过子接口与路由器直连,因此只需从负责蓝色Vlan的子接口转发即可。此时数据帧的目的MAC地址被改成PC2的MAC地址;由于需要经过汇聚链路转发,故附加属于蓝色Vlan的识别信息(数据帧③)。
交换机收到数据帧③后,根据Vlan标签从MAC地址表中检索属于蓝色Vlan的表项。由于通信目标PC2连接在端口3上且该端口为接入端口,因此交换机剥除数据帧的Vlan标签后(数据帧④)转发给端口3,最终PC2成功收到PC1发来的数据帧。
可见,Vlan间通信时,即使双方都连接在同一台交换机上,也必须经过“发送方→交换机→路由器→交换机→接收方”这样一个流程。在进行三层路由转发时,数据包IP地址保持不变,MAC地址则在每个节点都会改变。
4.4.2.2 三层交换机路由
使用VLAN Trunking后,用传统路由器进行Vlan间路由在性能上存在一定的不足:由于路由器采用通用CPU,转发完全依靠软件处理,同时支持各种通信接口,给软件带来较大负担。软件要处理包括报文接收、校验、查找路由、选项处理、报文分片等,导致性能不可能很高。就Vlan间路由而言,流量会集中到路由器和交换机互联的汇聚链路部分,该部分容易成为速度瓶颈。
由于Vlan间通信比较简单,只需查下路由表,所以可将交换机集成查路由表的专用芯片(ASIC),实现二层交换和三层路由的功能集成,即三层交换机(Layer 3 Switch)。
三层交换机的设计基于对IP路由的仔细分析,提取出IP路由中每个报文都必经的简化过程:
- IP路由中绝大多数报文不包含IP选项,因此多数情况下无需处理报文IP选项;
- 不同的网络报文长度不同,为支持各种异构网络的互连,IP实现了报文分片功能,但在全以太网环境中,数据帧(报文)长度固定,因此可裁减报文分片功能;
- 三层交换机采用与路由器最长地址掩码匹配不同的方法,使用精确地址匹配的方式处理,有利于硬件实现快速查找;
- 三层交换机采用Cache方法,将最近经常使用的主机路由放入硬件查找表。只有在该Cache中无法匹配到的条项才通过软件转发。这样,只有每个流的第一个报文通过软件转发,其后的大量数据流则在硬件中得以完成,极大提升转发性能。
三层交换机的内部结构可参照下面的简图。
图18 三层交换机内部结构简图
如图,内置的路由模块与交换模块相同,使用ASIC硬件处理路由。因此,与传统的路由器相比,可实现高速路由。并且,路由与交换模块由内部汇聚链路连接,可确保相当大的带宽。
对应到IP网络模型中,每个Vlan对应一个IP网段,三层交换机中的三层转发引擎在各网段(Vlan)间转发报文,实现Vlan之间的互通,因此三层交换机的路由功能通常叫做Vlan间路由(Inter-VLAN Routing)。
使用路由器连接时,一般需要在LAN接口上设置对应各Vlan的子接口;三层交换机则是在内部生成“VLAN接口(VLAN Interface)”,用于各Vlan收发数据。在Cisco的Catalyst系列交换机上,VLAN接口被称为SVI(Switched Virtual Interface,交换虚拟接口)。三层交换机每创建一个Vlan就会自动生成一个SVI。在SVI接口设置默认网关后,并将主机网关配置成与交换机SVI相同,即可实现不同Vlan间的路由。
使用三层交换机进行Vlan间路由与使用汇聚链路连接路由器与交换机相似,即需经过“发送方→交换模块→路由模块→交换模块→接收方”的流程。
【例】假设网络按图19连接好后,所有设备均为初始状态,也未向外发送过任何报文。若PC1已知PC2的IP地址,则可通过ping命令发送ICMP报文来获知PC1能否到达PC2。以下分析该过程。
图19 ping流程网络拓扑
⑴ PC1将自身IP和子网掩码255.255.255.0相与得到网络号1.1.1.0,将PC2的IP与子网掩码相与得到网络号2.2.2.0,得知PC2与自己不在同一网段。于是PC1检索路由表得到默认网关。PC1欲向网关传递信息,但此时PC1中ARP表为空,所以向默认网关(交换机三层接口)发出ARP请求帧,请求网关MAC地址。该帧目的MAC地址为全1,源MAC地址为本机MAC地址,请求的IP地址为网关1.1.1.1;
⑵ SW收到ARP请求帧,对其附加端口PVid(10)的标签;
⑶ SW用ARP请求帧的Mac1和Vid10查找MAC转发表,发现没有该项,则进行学习,即在表中添加“Mac1—Vid10—Port1”的记录;并将源IP和MAC的对应关系(“1.1.1.2—Mac1”)记录到ARP表,表明目的IP为1.1.1.2的数据帧转发时目的MAC为Mac1,同时需路由到端口Port1;
⑷ ARP请求的目的地址是广播地址,SW将其洪泛到该Vlan的每个端口(除入端口);同时SW自身截获一份上送CPU(网关),发现是询问自己的MAC,于是回复ARP单播应答帧,目的MAC为PC1的Mac1,源MAC为网关的MAC地址GwMac1,源IP为1.1.1.1,目的IP为PC1的1.1.1.2;
⑸ PC1收到SW发来的ARP应答帧,得到SW三层网关MAC地址,将“1.1.1.1—GwMac1”记录到ARP表。PC1向SW发送ICMP请求帧,目的IP为PC2的IP(2.2.2.2),目的MAC为网关MAC,源IP和源MAC为PC1的;
⑹ SW收到ICMP请求帧,对其附加端口PVid(10)的标签,然后进行源MAC地址学习,发现二层转发表有该条目,更新老化时间。因该帧目的MAC地址是网关,SW送交三层路由处理。
⑺ 在三层首先检查IP报文的版本、IP首部检验和TTL是否正确,若不正确则标记丢弃并交由CPU处理;正确则在三层主机路由表(又称L3表)中查找目的IP(即PC2的IP 2.2.2.2)。此时L3表中只包含与自己直连的32位地址(包括自身接口)及步骤⑶中ARP表学习后下发的PC1信息,而找不到PC2的信息。进而按最长前缀匹配算法查找子网路由表(又称Longest Prefix Match即LPM表)得到2.2.2.1目的网段的条目,下一跳的IP地址为 2.2.2.1;
⑻ 索引回L3表查找2.2.2.1,得到该条目,发现要提交CPU处理(CPU也需要看作是一个端口);
⑼ CPU没有到PC2的路由,但PC2的目的IP属于自己接口地址2.2.2.1的网段,故向接口Vlan20所包含的所有物理端口广播一个ARP请求帧,源MAC地址为交换机接口的三层MAC地址GwMac2,源IP地址为2.2.2.1,请求IP地址2.2.2.2的MAC地址;
⑽ PC2收到ARP请求,学习“2.2.2.1—GwMac2”加入ARP表;并回复ARP应答帧,目的IP为交换机接口Vlan20的IP地址2.2.2.1,目的MAC为交换机接口Vlan20的MAC地址GwMac2;
⑾ SW收到PC2发送的ARP应答帧,附加端口PVid(20)后在MAC表中查找“Mac2+Vid20”,没找到则学习源地址,在MAC转发表中添加PC2相关记录。因该帧目的MAC为网关地址,故提交三层处理;
⑿ 三层首先检查报文正确性,无误则在L3表中查找目的IP。由于目的IP为本机,故上送CPU处理。CPU对报文处理后得到“2.2.2.2—Mac2”将相关信息加入ARP表(CPU下发给L3表进行记录)。
⒀ PC1向SW发送的第一个ICMP请求帧存储在内存中,此时交由CPU进行IP报文头部修改(TTL减1,FCS重新计算封装)和MAC封装(目的MAC地址改为PC2的MAC地址,源MAC地址改为SW三层MAC地址)并发送给PC2,如果超时则丢弃,CPU发送ICMP超时给PC1;
⒁ PC2收到PC1发来的ICMP请求后,回复ICMP应答帧,目的IP为PC1的IP 1.1.1.2,同样PC2发现该地址和自己不在同一子网,需要网关进行转发。之前PC2已学习到交换机接口Vlan20的ARP,此时根据该ARP将ICMP应答帧目的MAC地址填为网关MAC地址GwMac2发送出去。交换机收到帧后,发现目的MAC地址是网关地址,取出帧中的目的IP地址1.1.1.1查找路由。之前交换机已学习到该IP的路由,所以会查找到主机路由表中相应的路由并将帧目的MAC地址换成Mac1,源MAC地址换成网关MAC地址GwMac2,发送到端口Port1上。最终,PC1就收到PC2的ICMP应答。
⒂ 经过以上流程后,PC1和PC2分别学到各自网关接口的ARP,交换机也有了分别到达PC1和PC2的路由。后续的报文不再通过路由,而直接由L3表中对应的表项进行硬件转发。
注意,此例步骤说明相比“路由器路由”一节稍为详细,所补充的部分并非差异。
4.4.3 VLAN间通信加速
Vlan间路由时,并非所有数据都需要经过外部路由器或三层交换机的内置路由模块。例如,使用FTP(File Transfer Protocol,文件传输协议)传输容量为数兆字节以上的较大文件时,由于MTU(Maximum Transfer Unit,最大传输单元)的限制,IP协议会将数据分割成小块后传输并在接收方重新组合。这些被分割的数据具有相同的源/目的IP地址和(TCP/UDP)端口号。这样一连串数据流被称为“流(Flow)”。只要将流最初的数据正确地路由以后,后继数据理应也会被同样地路由,实际上无需路由器处理。
三层交换机进行高速Vlan间路由时,整个流的第一块数据仍旧由交换模块转发→路由模块路由→交换模块转发到目标所连端口。这时,将第一块数据路由结果记录到缓存里保存下来。需记录的信息有源/目的IP地址和(TCP/UDP)端口号、交换机收发端口号及转发目标MAC地址等。
同一个流的第二块及后续的数据到达交换机后,直接通过查询先前保存在缓存中的信息查出转发端口号后即可转发给目标所连端口。这样,就无需反复经由内部路由模块中继,而仅凭交换机内部的缓存信息就足以判断应该转发的端口。这时,交换机对数据帧进行由路由器中继时相似的处理,如改写MAC地址、IP包头中的TTL和Check Sum校验码信息等。
若Vlan间路由信息变化,路由模块会发送控制信息给交换模块,交换机重新建立转发路径,按照常规方式转发。
通过在交换机上缓存路由结果,可实现以缆线速度(Wired Speed)接收发送方传输来的数据、并且能够全速路由、转发给接收方。
4.4.4 路由器和交换机配合构建LAN
虽然三层交换机能提供比传统型路由器更为高速的路由处理,但网络中仍有使用路由器的必要性。其必要性主要表现在以下几个方面:
- 用于与WAN连接。绝大多数三层交换机只配有LAN(以太网)接口。少数高端交换机上也有用于连接WAN的串行接口或ATM接口,但大多数情况下连接WAN需要用到路由器。
- 保证网络安全。在三层交换机上,通过数据包过滤也能确保一定程度的网络安全。但使用路由器所提供的各种网络安全功能(数据包过滤、基于IPSec构建VPN、利用RADIUS进行用户认证等),用户可构建更为安全可靠的网络。
- 支持TCP/IP以外的网络架构。尽管TCP/IP已成为当前主流的网络协议架构,但还有不少网络利用Novell Netware下的IPX/SPX或Macintosh下的Appletalk等网络协议。三层交换机中,除部分高端机型外基本上只支持TCP/IP。路由器对于需要其他网络协议的环境必不可少。
注:少数高端交换机也能支持上述路由器的功能。例如Cisco的Catalyst6500系列就可选择与WAN连接的接口模块;还有可选的基于IPSec实现VPN的模块;并且也能支持TCP/IP以外的其他网络协议。
下图是一个路由器和交换机搭配构建LAN的实例。
图20 路由器和交换机搭配构建局域网
利用在各楼层配置的二层交换机定义Vlan,连接TCP/IP客户主机。各楼层间的Vlan间通信利用三层交换机的高速路由加以实现。若网络环境要求高可靠性,还可考虑冗余配置三层交换机。与WAN的连接,则通过带有各种网络接口的路由器进行,并通过路由器的数据包过滤和VPN等功能实现网络安全。此外,使用路由器还能支持Novell Netware等TCP/IP之外的网络。
通过使用Vlan构建局域网,用户能够不受物理链路的限制而自由地分割广播域。通过路由器与三层交换机提供的Vlan间路由,能够适应灵活多变的网络结构。但由于利用Vlan容易导致网络复杂化,因此也会造成整个网络的组成难以把握。特别是由于数据流纵横交错,一旦发生故障时,准确定位并排除故障会比较困难。
4.5 VLAN扩展
4.5.1 VLAN Translation
Vlan转换又称Vlan翻译或Vlan映射,它允许用于边缘接入的不同以太网交换机的Vlan ID设置互相重叠,通过以太网交换机的Vlan转换功能,将不同交换机的重复Vlan ID修改为不同的Vlan ID,并从上联端口发送出去,从而在二层核心交换机中也实现用户的隔离,以简化边缘接入交换机的设置。
例如PON系统中,通过Vlan转换模式,OLT或ONU设备将上行以太网帧中用户自行添加的Vlan标签(Vid可能不是其独用的,可能在同一个系统内有其他用户使用相同的Vid)转换为唯一的网络侧Vlan标签;并在下行方向执行相反的操作。
4.5.2 QinQ
随着以太网技术在运营商网络中的大量部署(城域以太网),利用IEEE 802.1Q Vlan对用户进行隔离和标识受到很大限制。因为802.1Q定义的Vlan标签域仅能表示4096个Vlan(12比特),对于城域网中需要标识的大量用户捉襟见肘,于是QinQ技术应运而生。
QinQ(也称Stacked Vlan即Vlan堆叠或Double Vlan)技术出自IEEE 802.1ad标准,是对基于IEEE 802.1Q封装的隧道协议的形象称呼。QinQ实现在原有802.1Q Vlan标签(内层标签,也称Customer Vlan,CVlan)之外再增加一个Vlan标签(外层标签,也称Service Provider Vlan,SVlan),外层公网标签将内层用户私网标签屏蔽起来,使报文携带两层Vlan标签穿越运营商骨干网络(公网),到达用户另一端网络边缘交换机时再剥除外层公网Vlan标签,还原出内层用户标签便于用户进行下一步的通信。可见,QinQ技术不仅可有效拓展Vlan的数量空间(多达4096×4096个),而且可提供简单的二层VPN(虚拟专用网)隧道,特别适合以三层交换机为骨干的小型企业网或小型局域网。
4.5.2.1 QinQ报文格式
QinQ报文封装格式如下图所示。公网传输时内层Vlan标签为用户私网Vlan标签,外层Vlan标签由运营商分配给用户。私网Vlan标签被透明传输,故不同的用户Vlan标签可重复使用,只需外层Vlan标签在公网上唯一即可。
图21 QinQ报文封装格式
某些厂商将QinQ报文外层标签的TPID值设置为0x9100或其他数值。为和这些设备互通,用户应可自行配置TPID值,使发送到公网中的QinQ帧携带的TPID值与其他厂商相同。由于TPID字段在以太网帧中所处位置与不带Vlan标签的帧中协议类型(Type)字段所处位置相同,为避免造成网络中数据帧转发和接收混乱,不允许用户将TPID值配置为常用协议类型值。
4.5.2.2 QinQ封装方式
QinQ封装是指如何把单层Q报文转换为双层Q报文, 封装主要发生在城域网面向用户的UPE设备,一般在交换式的端口上进行。根据不同的封装依据,QinQ可分为基于端口的QinQ、基于流的QinQ和路由子接口上进行的特殊QinQ封装。
4.5.2.2.1 基于端口的QinQ封装
基于端口封装指进入一个端口的所有流量全部封装一个外层Vlan。当端口收到报文时,无论报文是否带有Vlan标签,交换机都会为该报文附加本端口缺省Vlan的标签。若接收报文已带标签,则该报文成为双标签报文;若接收报文不带标签(untagged),则该报文将携带本端口缺省Vlan标签。基于端口的QinQ封装容易实现,故业界主流厂家的三层交换机都支持。其缺点是外层Vlan标签封装方式死板,当多个不同用户或用户网络以不同的Vlan接入到同一个端口时无法区分用户,即无法在一个端口上根据业务种类选择多个外层标签,从而很难有效支持单端口多业务的灵活运营。
此外,基于端口封装需增加链路,组网复杂,不利于扩展维护。
4.5.2.2.2 基于流的QinQ封装
基于流的QinQ封装先对进入端口的数据进行流分类,然后对于不同的数据流选择是否插入外层标签以及插入何种外层标签,因此也称灵活QinQ(Smart QinQ或Selective QinQ)。当一些数据流(如组播)出口不添加外层标签,或单个端口根据内层Vlan添加不同的外层标签时,就需要用到灵活QinQ。
灵活QinQ根据流分类方法又可细分如下:
1) 根据报文中的Vlan区间分流
当同一用户的不同业务使用不同Vlan时,可根据Vlan区间进行分流,如PC上网Vlan范围是101~200,IPTV的Vlan范围是201~300,VoIP的Vlan范围是301~400。面向用户的设备收到用户数据后,根据Vlan范围,对上网业务插入100的外层标签,对IPTV插入300的外层标签,对VoIP插入500的外层标签。
2) 根据报文中的Vid+Priority分流
不同业务有不同优先级,当同一用户的多种业务使用相同Vlan时,可根据不同业务的优先级进行区分,然后插入不同的外层标签。
3) 根据报文的目的IP地址分流
当同一台PC既包括上网业务又包括语音业务时,不同业务目的IP不同,可利用ACL对目的IP地址进行分流,然后插入不同的外层标签。
4) 根据ETYPE进行QinQ封装
当同一用户既包括PPPOE的上网业务,又包括IPOE的IPTV业务时,这些终端都通过一个Vlan上行,可根据PPPoE(0x8863/8864)和IPoE(0x0800)报文不同的ETYPE协议号作为QinQ的分流依据。
当前灵活QinQ主要应用于运营商接入网络。在运营商网络中给接入用户分配一个Vlan,以便于追踪问题和防止不同用户间互访,用外层标签区分用户应用;或在接入环境中用外层标签区分不同的接入地点,用内外两层标签唯一标识一个接入用户。
4.5.2.2.3 路由子接口QinQ封装
QinQ封装一般在交换式端口上直接进行,但特殊情况下QinQ也可在路由子接口上进行封装。
当核心网采用VLL/PWE3透传用户数据时,NPE设备上的路由子接口可根据用户Vlan ID封装外层Vlan,通过外层Vlan接入VLL/PWE3。可通过一个QinQ Stacking子接口来透传多个标识用户的Vlan ID。
该方式也是基于流的QinQ封装,但QinQ Stacking子接口只能与L2VPN(PWE3/VLL/VPLS)结合起来才有意义,不支持三层转发功能。
4.5.2.3 QinQ报文转发
三层交换机连接用户网络的端口称为Customer端口,连接骨干网的端口称为Uplink端口,骨干网的边缘接入设备称为PE(Provider Edge)。一般用户侧网络通过Trunk方式接入骨干边缘交换机,骨干网络内Uplink端口通过Trunk方式对称连接。
在通过QinQ实现简单二层VPN的过程中,报文按如下方式转发:
图22 QinQ报文转发过程
当报文从用户侧网络1到达运营商骨干网边缘交换机Switch A的Customer端口时,无论该报文是否携带标签,Switch A都基于端口PVid对其强行插入外层标签(Vid=10)。在骨干网络内部,报文沿着Vlan10的Trunk端口传播,用户私网标签在骨干网络中保持透明状态,直至到达边缘交换机Switch B。
Switch B发现与用户网络2相连的端口为Customer端口,按照传统的802.1Q协议剥离外层标签,恢复成用户的原始报文,转发到用户侧网络2,从而实现一个简单二层VPN功能。PE接入点用外层SVlan隔离,安全且节省Vlan。对用户的管理可基于外层SVlan和内层CVlan唯一定位。
易知,若Vlan映射为C→S+C,则为Vlan堆叠;若Vlan映射为C→S,则为Vlan转换。
注意,MAC地址学习、生成树等均基于外层SVlan。
4.5.2.4 QinQ优缺点
利用QinQ提供接入业务时具有以下优点:
- 可解决日益紧缺的公网Vlan资源问题;
- 用户可规划自己的私网Vlan ID,不会与公网Vlan ID冲突;
- 提供一种较为简单的二层VPN解决方案;
- 使用户网络具有较高的独立性,在服务提供商升级网络时,用户网络不必更改原有配置;
- 可按不同层次的Vlan ID区分不同的业务,以区别提供不同的管道、QoS策略;
- QinQ技术上可多层嵌套,仅受以太网帧长度的限制,具有很好的扩充性。
但随着用户数量的增加,QinQ模型也会带来可扩展性问题。某些用户可能希望在分支机构间传输数据时可携带自己的Vlan ID,这就使采用QinQ技术的管理服务提供商面临以下两个问题:第一个客户的Vlan标识可能与其他客户冲突;服务提供商将受到客户可使用标识数量的严重限制。若允许用户按他们自己的方式使用各自的Vlan ID空间,则核心网络仍存在4096个Vlan的限制。
4.5.3 PVlan(Cisco)
PVLAN(Private VLAN,私有VLAN)即所有工作站在同一个子网中,但工作站只能与自己的默认网关通信。PVlan采用两层Vlan隔离技术,只有上层Vlan全局可见,下层Vlan互相隔离。若将交换机的每个端口划为一个(下层)Vlan,则实现所有端口的隔离。
每个Private Vlan包含两种Vlan:主Vlan(Primary Vlan)和辅助Vlan(Secondary Vlan),后者又分为隔离Vlan(Isolated Vlan)和团体Vlan(Community Vlan)。
PVlan通信范围:
- 主Vlan可与所有与之关联的隔离Vlan、团体Vlan通信。不同主Vlan之间的任何端口都不能互相通信(此处“互相通信”指二层连通性)。
- 团体Vlan可与处于相同团体Vlan内的团体端口通信,也可与PVlan中的混杂端口通信。 每个PVlan可有多个团体Vlan。
- 隔离Vlan不可与处于相同隔离Vlan内的其它隔离端口通信,只可与混杂端口通信。每个PVlan中只能有一个隔离Vlan。
相应地,交换机物理端口有三种类型:
- 隔离端口(Isolated port),与用户相连,属于隔离Vlan。只可与混杂端口通信,彼此不能通信。
- 团体端口(Community port),属于团体Vlan。不仅可与混杂端口通信,也可与同一团体中的其它物理端口进行通信。
- 混杂端口(Promiscuous port),与路由器或三层交换机接口相连,属于主Vlan。它收到的流量可发往隔离端口和团体端口。
图23 PVlan端口类型
如图,port1、port2和port3三者之间互相隔离,不允许通信,只能与port6通信;port4和port5间可以通信,也可以与port6通信。所有端口只需分配共享一个IP地址。
PVlan的应用对于保证接入网络的数据通信安全性非常有效。所有用户都接入PVlan,每个用户一个Vlan,用户间二层互相隔离。用户只需与自己的默认网关连接,一个PVlan不需要多个Vlan和IP子网就可提供具备二层数据通信安全性的连接。PVlan功能可保证同一个Vlan中的各个端口相互之间不能通信,但可穿过Trunk端口。这样即使同一Vlan中的用户,相互之间也不会受到广播的影响。
对于上层交换机来说,可认为下层交换机中只有几个主Vlan,而不必关心主Vlan 中的端口实际所属的Vlan,从而简化配置并节省Vlan 资源。一个主Vlan中包含的所有Private Vlan处于同一个子网中,可节省子网数目和IP 地址资源。
PVlan通常用于企业内部网,用来阻断连接到某些接口或接口组的网络设备间的相互通信,但却允许与默认网关进行通信。尽管各设备处于不同的PVlan中,但可使用相同的IP子网。
4.5.4 SuperVlan
不同Vlan间通信需要通过三层路由进行转发,而每个子网(Vlan)都需要设置一个路由地址。每分配一个子网,就有三个IP地址(子网的网络号、广播地址和默认网关)被占用。同时,这种地址分配的固有约束也严重降低编址的灵活性,使许多闲置地址被浪费。为提高IP地址的利用率,Super VLAN超网应运而生。
SuperVlan(又称VLAN Aggregation,即Vlan聚合)把多个子Vlan(SubVlan)聚合成一个SuperVlan,这些SubVlan共同使用一个IP子网和默认网关。通过VLAN聚合可使所有在同一子网上的终端用户通过统一的路由(同一子网网段地址)而使用不同的广播域。
利用SuperVlan技术,只需为SuperVlan分配一个子网地址,并为每个用户或子网建立一个SubVlan。所有SubVlan可灵活分配SuperVlan子网中的IP地址,使用SuperVlan的默认网关。每个SubVlan都是一个独立的广播域,保证不同用户之间的隔离;SubVlan间通信需要通过SuperVlan进行路由。由于各个SubVlan不需要真正的子网网段,可有效提高IP利用率。这样的子网可分配足够小且扩展方便,无需重新定义子网大小。
SuperVlan内的主机使用同一个网段的地址,共用同一个上行网关。即使是属于不同SubVlan的主机,由于其地址同属一个子网,设备会认为它们是二层互通的,会做二层转发,而不会送网关进行三层转发。而实际上SubVlan间在二层互相隔离,因此需要采用ARP代理(Proxy)来实现SubVlan间的互通。Subvlan之间以及和外部通信通过ARP代理,所有Subvlan内主机发送的ARP请求都由SuperVlan的MAC地址作为ARP应答。
注意,SuperVlan并不包含物理端口,可将其视作逻辑的三层概念——若干SubVlan的集合。对交换芯片来说SuperVlan是透明的,仍按芯片中的Vlan进行转发。在基于端口的Vlan中,二层通信时,无论收发都不会有针对SuperVlan的报文。即进入SubVlan设备的数据帧会附加该SubVlan的标签,从Trunk端口发出时也不会改为SuperVlan的标签。
4.5.4.1 ARP Proxy原理
一个物理网络子网(Subnet)中的源主机向另一个物理网络子网中的目的主机发送ARP request请求,和源主机直连的网关用自己接口的MAC地址代替目的主机回复ARP reply应答,该过程称为ARP代理。
ARP代理的基本过程如下:
- 源主机向另一物理网络的子网中的目的主机发ARP请求;
- 与源主机网络相连的网关已使能ARP代理功能,若存在到达目的主机的正常路由,则代替目的主机应答自己接口的MAC地址;
- 源主机向目的主机发送的IP报文都发给路由器;
- 路由器对报文做正常的IP路由转发;
- 发往目的主机的IP报文通过网络,最终到达目的主机。
4.5.4.2 SubVlan间的三层互通
【例】SuperVlan 2包含SubVlan 21和SubVlan 22,分析PC1与PC2的互通过程(假设PC1的ARP表中无PC2对应表项)。IP地址和MAC地址如下图所示。
图24 用ARP代理实现不同SubVlan间的三层互通
PC1要发送报文给PC2,则将PC2的IP地址(1.1.1.3)与自己所在网段1.1.1.0 /24进行比较。由于SubVlan 21和SubVlan 22同属一个SuperVlan所在子网,于是发广播ARP请求PC2的MAC地址;而PC2并不在SubVlan 21的广播域内,无法接收到该ARP请求。当PC1在二层发出的ARP请求在其广播域内没有回应时,交换机网关运行ARP代理,查找路由表并发现下一跳为直连路由接口(SubVlan 22),则在该接口发送一个ARP请求PC2的MAC地址;得到PC2回应后,就把网关自己的MAC地址GwMac当作PC2的MAC地址(实际是Mac2 )回给PC1 (不同设备实现略有不同)。之后,主机PC1要发给PC2的报文都发给交换机,由三层交换机做正常的三层转发。
PC2回送给PC1的报文转发过程和上述的PC1到PC2的报文流程类似。
4.5.4.3 SuperVlan与外部的三层通信
【例】交换机1上配置SuperVlan 2、SubVlan 21和22,并有一个正常的Vlan 10。交换机2上配置两个正常的Vlan 10和20。假设SuperVlan 2下SubVlan 21中的PC1想访问交换机2下连的PC3,分析其上下行报文的转发流程。
图25 Super VLAN与外部的三层通信图例
4.5.4.3.1 报文上行流程
PC1 (1.1.1.2/24)要访问PC3(1.1.3.2/24),因为IP地址不在一个网段,故PC1发送ARP请求给自己的网关,请求网关的MAC地址。SubVlan21收到ARP报文后,将其上送CPU。CPU查找SubVlan和SuperVlan的对应关系,知道应回应SuperVlan2的MAC地址(不同设备实现可能略有不同),且知道回应报文应从SubVlan21发送给PC1。
PC1学到网关MAC地址后,开始发送目的MAC为SuperVlan2、目的IP为1.1.3.2的报文。SubVlan21收到报文后,检测目的MAC后得知应进行三层转发,于是查找转发路由表,发现下一跳地址为1.1.2.2,出接口为Vlan10,并通过ARP表项和MAC表项确定出端口,把报文发送给交换机2,交换机2根据正常的转发流程把报文发送给PC3。
4.5.4.3.2 报文下行流程
PC3回应的报文,在交换机2上按正常的转发流程到达交换机1,此时交换机1查找转发路由表表项,发现目的地址为PC1(1.1.1.2),对应的出接口为SuperVlan2。但SuperVlan2未包含任何端口,那么如何确定报文的出端口呢?
仔细查看可发现,尽管转发路由表中1.1.1.2/24网段的出接口为SuperVlan2,但在ARP表中IP地址1.1.1.2对应的出接口却为SubVlan 21。而芯片真正用来构建转发表时所用的出接口应是ARP表中对应的SubVlan接口,通过在SubVlan下查找目的MAC地址即可找到正确的出端口。于是,PC3的回应报文就可正常到达PC1。
注意,若位于一个SuperVlan内的计算机运行基于广播或组播的高层应用,则这些应用被限制在SubVlan内。因此,应仔细分析高层应用,在没有基于组播或广播的应用时才可使用SuperVlan。