* 基于用户的VLAN

基于用户的Vlan,则是根据交换机各端口所连的主机上当前登录的用户,来决定该端口属于哪个Vlan。用户识别信息一般是主机操作系统登录的用户,如Windows域中使用的用户名。

* 基于协议的VLAN

基于协议的Vlan将物理网络划分为基于协议的逻辑Vlan。在端口接收帧时,它的Vlan由帧中的协议类型决定。例如,IP、IPX和Appletalk可能有各自独立的Vlan,IP 广播帧只被送到IP Vlan中的所有端口。

* 基于组播地址的VLAN

基于组播地址的Vlan由组播分组动态创建的。如每个组播分组对应一个不同Vlan,保证组播数据帧只被那些连接到相应组播分组成员的端口接收到。这种划分方式效率不高,不适合局域网。但因其将Vlan扩大至广域网,故灵活性更高,且易于通过路由器进行扩展。

* 基于策略的VLAN

基于策略的Vlan是Vlan的最基本的定义。每个输入(无标签)帧都在策略数据库查看,该数据库决定该帧所属的Vlan。如建立公司管理人员之间往来电子邮件的特别Vlan策略,以便不在其他地方被看见。

这种划分方式最为灵活,具有自动配置能力,能够把相关用户连成一体,在逻辑划分上称为“关系网络”。网络管理员只需在网管软件中确定划分Vlan的规则(或属性),则站点加入网络时将会被“感知”,并被自动包含进正确的Vlan中。同时,也可自动识别和跟踪站点的移动和改变。

基于VLAN的转发与路由

Vlan内通信的主机同属一个广播域,主机之间的流量通过二层网络直接转发;Vlan间通信的主机位于不同广播域,主机无法直接通过ARP广播请求到对方的地址,此时必须借助三层路由器来完成通信。

路由器可视为各个Vlan的网关,因此通过路由器来互相通信的主机必须知道路由器的存在及其在本Vlan上的接口地址(默认网关)。在主机上配置默认网关后,对于跨Vlan的通信,主机会自动寻找默认网关,并把报文交给默认网关转发而不是直接发给目的主机。

可见,当报文的目的MAC地址是网关地址(路由器或三层交换机MAC地址)时,该报文为三层报文。

*  二层转发

基于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内除收包端口外的其他所有端口洪泛该帧(洪泛广播的是未知单播帧而不是广播帧)。

图所示为二层转发的一般流程。

二层转发流程

例】数据帧从PC1经过一台交换机转发到与另一台交换机相连的PC2并得到响应,如下图所示。

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的通信,一切处理均在二层网络内完成。

三层路由

* 路由器路由

使用路由器进行Vlan间路由时,大致有以下两种:

1) 用多个路由器端口分别与每个Vlan相连接。

2) 单个路由器接口与交换机的Trunk端口相连(称为dot1Q连接),使多个Vlan共享同一条物理连接到路由器。

方式1将交换机上用于和路由器互联的每个端口设为接入链路,再分别用网线与路由器上的独立端口互联。如下图所示,交换机上有两个Vlan,需在交换机上预留两个端口用于与路由器互联;路由器上同样需要有两个端口;两者之间用两条网线分别连接。

每个Vlan一个物理连接

如图,每个Vlan都要独占一个交换机端口和一个路由器端口,并需重新布设一条网线。而路由器上通常LAN接口有限,这无疑带来扩展性问题。

方式2将用于连接路由器的交换机端口设为汇聚端口,而路由器上的端口也必须支持汇聚链路。双方用于汇聚链路的协议也必须相同。接着在路由器上定义对应各Vlan的“子接口(Sub Interface)”。尽管实际与交换机连接的物理端口只有一个,但在理论上可将其分割为多个虚拟端口。如下图所示。

Vlan Trunking

使用这种Vlan Trunking技术,可使多个Vlan的业务流共享相同的物理连接,通过在汇聚链路上传递带标签的帧来区分各Vlan的流量。通常情况下,Vlan间路由的流量不足以达到链路的线速度,使用Vlan Trunking的配置,可提高链路的带宽利用率,节省端口资源以及简化管理(网络新增Vlan时只需在路由器上新设一个对应新Vlan的子接口,无需重新布线)

例】不同Vlan间通信时数据的流程,如下图所示。

不同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地址则在每个节点都会改变。

* 三层交换机路由

使用VLAN Trunking后,用传统路由器进行Vlan间路由在性能上存在一定的不足:由于路由器采用通用CPU,转发完全依靠软件处理,同时支持各种通信接口,给软件带来较大负担。软件要处理包括报文接收、校验、查找路由、选项处理、报文分片等,导致性能不可能很高。就Vlan间路由而言,流量会集中到路由器和交换机互联的汇聚链路部分,该部分容易成为速度瓶颈。

由于Vlan间通信比较简单,只需查下路由表,所以可将交换机集成查路由表的专用芯片(ASIC),实现二层交换和三层路由的功能集成,即三层交换机(Layer 3 Switch)。

三层交换机的设计基于对IP路由的仔细分析,提取出IP路由中每个报文都必经的简化过程:

IP路由中绝大多数报文不包含IP选项,因此多数情况下无需处理报文IP选项;

不同的网络报文长度不同,为支持各种异构网络的互连,IP实现了报文分片功能,但在全以太网环境中,数据帧(报文)长度固定,因此可裁减报文分片功能;

三层交换机采用与路由器最长地址掩码匹配不同的方法,使用精确地址匹配的方式处理,有利于硬件实现快速查找;

三层交换机采用Cache方法,将最近经常使用的主机路由放入硬件查找表。只有在该Cache中无法匹配到的条项才通过软件转发。这样,只有每个流的第一个报文通过软件转发,其后的大量数据流则在硬件中得以完成,极大提升转发性能。

三层交换机的内部结构可参照下面的简图。

三层交换机内部结构简图

如图,内置的路由模块与交换模块相同,使用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。以下分析该过程。

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地址;


相关内容