802.1Q VLAN协议和802.1P协议的实现

802.1Q VLAN协议和802.1P协议的实现
摘要: 本文主要介绍了802.1Q VLAN协议在以太网交换机中的实现 , 以及802.1p协议的一些基本内容 , 有关这两个协议实现的具体细节 , 参考802.1Q和802.1p协议的相关资料 。
一、802.1Q协议
802.1Q协议 , 即Virtual Bridged Local Area Networks协议 , 主要规定了VLAN的实现 , 下面我们首先讲述一下有关VLAN的基本观念 。
Virtual LANs目前发展很快 , 世界上主要的大网络厂商在他们的交换机设备中都实现了VLAN协议 , 顾名思义 , VLAN就是虚拟局域网 , 比如对于QuidwayS2403交换机来说 , 可以将它的24个10M以太网口划分为几个组 , 比如协议组 , ATM组 , 测试组等 , 这样 , 组内的各个用户就象在同一个局域网内(可能协议组的用户位于很多的交换机上 , 而非一个交换机)一样 , 同时 , 不是本组的用户也无法访问本组的成员 。
实际上 , VLAN成员的定义可以分为4种:
根据端口划分VLAN
这种划分VLAN的方法是根据以太网交换机的端口来划分 , 比如S2403的1~4端口为VLAN A , 5~17为VLAN B , 18~24为VLAN C , 当然 , 这些属于同一VLAN的端口可以不连续 , 如何配置 , 由治理员决定 , 假如有多个交换机的话 , 例如 , 可以指定交换机 1 的1~6端口和交换机 2 的1~4端口为同一VLAN , 即同一VLAN可以跨越数个以太网交换机 , 根据端口划分是目前定义VLAN的最常用的方法 , IEEE 802.1Q协议规定的就是如何根据交换机的端口来划分VLAN 。这种划分的方法的优点是定义VLAN成员时非常简单 , 只要将所有的端口都指定义一下就可以了 。它的缺点是假如VLAN A的用户离开了原来的端口 , 到了一个新的交换机的某个端口 , 那么就必须重新定义 。
根据MAC地址划分VLAN
这种划分VLAN的方法是根据每个主机的MAC地址来划分 , 即对每个MAC地址的主机都配置他属于哪个组 。这种划分VLAN的方法的最大优点就是当用户物理位置移动时 , 即从一个交换机换到其他的交换机时 , VLAN不用重新配置 , 所以 , 可以认为这种根据MAC地址的划分方法是基于用户的VLAN , 这种方法的缺点是初始化时 , 所有的用户都必须进行配置 , 假如有几百个甚至上千个用户的话 , 配置是非常累的 。而且这种划分的方法也导致了交换机执行效率的降低 , 因为在每一个交换机的端口都可能存在很多个VLAN组的成员 , 这样就无法限制广播包了 。另外 , 对于使用笔记本电脑的用户来说 , 他们的网卡可能经常更换 , 这样 , VLAN就必须不停的配置 。
根据网络层划分VLAN
这种划分VLAN的方法是根据每个主机的网络层地址或协议类型(假如支持多协议)划分的 , 虽然这种划分方法可能是根据网络地址 , 比如IP地址 , 但它不是路由 , 不要与网络层的路由混淆 。它虽然查看每个数据包的IP地址 , 但由于不是路由 , 所以 , 没有RIP , OSPF等路由协议 , 而是根据生成树算法进行桥交换
这种方法的优点是用户的物理位置改变了 , 不需要重新配置他所属的VLAN , 而且可以根据协议类型来划分VLAN , 这对网络治理者来说很重要 , 还有 , 这种方法不需要附加的桢标签来识别VLAN , 这样可以减少网络的通信量 。
这种方法的缺点是效率 , 因为检查每一个数据包的网络层地址是很费时的(相对于前面两种方法) , 一般的交换机芯片都可以自动检查网络上数据包的以太网桢头 , 但要让芯片能检查IP桢头 , 需要更高的技术 , 同时也更费时 。当然 , 这也跟各个厂商的实现方法有关 。
IP组播作为VLAN
IP 组播实际上也是一种VLAN的定义 , 即认为一个组播组就是一个VLAN , 这种划分的方法将VLAN扩大到了广域网 , 因此这种方法具有更大的灵活性 , 而且也很轻易通过路由器进行扩展 , 当然这种方法不适合局域网 , 主要是效率不高 , 对于局域网的组播 , 有二层组播协议GMRP 。
通过上面可以看出 , 各种不同的VLAN定义方法有各自的优缺点 , 所以 , 很多厂商的交换机都实现了不只一种方法 , 这样 , 网络治理者可以根据自己的实际需要进行选择 , 另外 , 许多厂商在实现VLAN的时候 , 考虑到VLAN配置的复杂性 , 还提供了一定程度的自动配置和方便的网络治理工具 。
以前 , 各个厂商都声称他们的交换机实现了VLAN , 但各个厂商实现的方法都不相同 , 所以彼此是无法互连 , 这样 , 用户一旦买了某个厂商的交换机 , 就没法买其他厂商的了 。而现在 , VLAN的标准是IEEE 提出的802.1Q协议 , 只有支持相同的开放标准才能保证网络的互连互通 , 以及保护网络设备投资 。
下面讲述一下VLAN的优点:
减少移动和改变的代价 , 即所说的动态治理网络 , 也就是当一个用户从一个位置移动到另一个位置是 , 他的网络属性不需要重新配置 , 而是动态的完成 , 这种动态治理网络给网络治理者和使用者都带来了极大的好处 , 一个用户 , 无论他到哪里 , 他都能不做任何修改地接入网络 , 这种前景是非常美好的 。当然 , 并不是所有的VLAN定义方法都能做到这一点 。
虚拟工作组 , VLAN的最具雄心的目标就是建立虚拟工作组模型 , 例如 , 在校园网中 , 同一个系的就好象在同一个LAN上一样 , 很轻易的互相访问 , 交流信息 , 同时 , 所有的广播包也都限制在该虚拟LAN上 , 而不影响其他VLAN的人 , 一个人假如从一个办公地点换到另外一个地点 , 而他仍然在该系 , 那么 , 他的配置无须改变 , 同时 , 假如一个人虽然办公地点没有变 , 但他换了一个系 , 那么 , 只需网络治理者那配置一下就行了 。这个功能的目标就是建立一个动态的组织环境 , 当然 , 这只是一个远大的目标 , 要实现它 , 还需要一些其他包括治理等方面的支持 。
限制广播包 , 按照802.1D透明网桥的算法 , 假如一个数据包找不到路由 , 那么交换机就会将该数据包向所有的其他端口发送 , 这就是桥的广播方式的转发 , 这样的结果 , 毫无疑问极大的浪费了带宽 , 假如配置了VLAN , 那么 , 当一个数据包没有路由时 , 交换机只会将此数据包发送到所有属于该VLAN的其他端口 , 而不是所有的交换机的端口 , 这样 , 就将数据包限制到了一个VLAN内 。在一定程度上可以节省带宽 。
安全性 , 由于配置了VLAN后 , 一个VLAN的数据包不会发送到另一个VLAN , 这样 , 其他VLAN的用户的网络上是收不到任何该VLAN的数据包 , 从而就确保了该VLAN的信息不会被其他VLAN的人窃听 , 从而实现了信息的保密 。
理论上 , VLAN可以扩展到WAN上 , 但是 , 这是不明智的做法 , 因为VLAN答应广播包发送出去 , 而且它没有很好的路由算法 , 经常是以广播的形式转发数据包 , 这样 , 毫无疑问 , 极大地浪费了WAN的宝贵的带宽 , 所以说 , 将基于端口的 , MAC地址和网络地址的VLAN扩展到WAN , 是不合理的 , 而基于多播的VLAN概念则可以灵活有效的扩展到WAN 。一般的以太网交换机实现的都是基于端口的VLAN , 个别的会实现基于MAC地址和网络层地址的VLAN , 而路由器中可以通过IGMP多播协议实现所谓的组播形式的VLAN。

802.1Q协议定义了基于端口的VLAN模型 , 这是使用得最多的一种方式 。下面我们重点讲述一下交换机芯片是如何实现VLAN的 , 假如想了解更细节的内容 , 可以参考802.1Q协议 , 由于协议文本讲的非常抽象 , 所以 , 我们以TI公司的交换芯片为例来讲述 , 更便于理解 。例子中的TNETX4090提供了8个100M以太网口和1个1G以太网口 。
如图1所示 , 每一个支持802.1Q协议的主机 , 在发送数据包时 , 都在原来的以太网桢头中的源地址后增加了一个4字节的802.1Q桢头 , 之后接原来以太网的长度或类型域 , 关于以太网桢头的封装格式 , 参见以太网方面的培训教材 。

图1 带有802.1Q标签头的以太网桢
这4个字节的802.1Q标签头包含了2个字节的标签协议标识(TPID--Tag Protocol Identifier , 它的值是8100) , 和两个字节的标签控制信息(TCI--Tag Control Information) , TPID是IEEE定义的新的类型 , 表明这是一个加了802.1Q标签的本文 , 图2显示了802.1Q标签头的具体内容 。

图2 802.1Q标签头
该标签头中的信息解释如下:
LAN Identified( VLAN ID ): 这是一个12位的域 , 指明VLAN的ID , 一共4096个 , 每个支持802.1Q协议的主机发送出来的数据包都会包含这个域 , 以指明自己属于哪一个VLAN , 目前TNETX 3270只支持32个VLAN 。
Canonical Format Indicator( cfi ):这一位主要用于总线型的以太网与FDDI、令牌环网交换数据时的桢格式 , TNETX 3270忽略此位 。
Priority:这3 位指明桢的优先级 。一共有8种优先级 , 主要用于当交换机阻塞时 , 优先发送哪个数据包 。TNETX 3270和TNETX 4090只支持一种优先级 , 所以这一位也没有用 ,
不难看出 , 802.1Q标签头的4 个字节是新增加的 , 目前我们使用的计算机并不支持802.1Q , 即我们计算机发送出去的数据包的以太网桢头还不包含这4个字节 , 同时也无法识别这4个字节 , 将来会有软件和硬件支持802.1Q协议的 。对于交换机来说 , 假如它所连接的以太网段的所有主机都能识别和发送这种带802.1Q标签头的数据包 , 那么我们把这种端口称为Tag Aware 端口;相反 , 假如该交换机端口说连接的以太网段有只要有一台主机不支持这种以太网桢头 , 那么交换机的这个端口我们称为Access端口 , 从目前的情况可以看出 , 所有的交换机的端口都属于后一种 。
那么 , 在现在的情况下 , 交换机是如何支持VLAN的呢?是这样的 , 比如交换机的1~4端口属于同一个VLAN , 那么当 1 端口进来一个数据包是 , 交换机看到该数据包没有802.1Q标签头 , 那么 , 它会根据1号端口所属的VLAN组 , 自动给该数据包添加一个该VLAN的标签头 , 然后再将数据包交给数据库查询模块 , 数据库查询模块会根据数据包的目的地址和所属的VLAN进行路由 , 之后交给转发模块 , 转发模块看到这是一个包含标签头的数据包 , 而实际上发送的端口所连的以太网段的计算机不能识别这种数据包 , 所以 , 它会再将数据包进来是交换机给添加的标签头再去掉 。假如计算机支持这种标签头 , 那么就不需要交换机添加或删除标签头了 , 至于到底是添加还是删除要看交换机所连的以太网段的主机是否识别这种数据包 , 即该交换机的端口是哪种类型的端口 。当然 , 对于两个交换机互连的端口一般都是Tag Aware端口 , 这样 , 交换机和交换机之间交换数据包时是无须去掉标签头的 。
【802.1Q VLAN协议和802.1P协议的实现】一般交换机的连接方式如图3所示

图3 多个交换机的组网图
图中虚线是Tag Aware端口 , 实线是Access端口 。
以太网交换机处理数据包的流程如图4所示 。

图4 数据包处理流程
处理流程包括3个步骤:
接收过程:该过程负责接收数据包 , 数据包可以是带标签头的 , 也可以不带标签头 , 假如不带 , 交换机会知道根据该端口所属的VLAN添加上相应的标签头 。
查找/路由过程:该过程根据数据包的目的MAC地址、VLAN 标识已经数据库中注册的信息决定把数据包发送到哪个端口 。
发送过程:将数据包发送到以太网段上 , 假如该网段的主机不能识别802.1Q标签头 , 那么就将该标签头去掉 , 假如是与其他交换机互连的端口 , 一般不去掉 。
具体的接收、查询和发送过程可以参考TNETX 3270的相关资料 , 下面是一个无标签头的数据包的接收到发送的过程 。

图5 一个无标签头的数据包的处理流程
其中具体的路由过程参考TNETX 3270资料 。图6 是另外的一个例子 。

图6 一个互连的例子
以图6为例 , 假如Chris 发送一个数据包给Jackie , 那么 , 处理的过程如下:
Chris 发送一个数据包给Jackie 。
数据包到达交换机1的端口9 , 这是一个无标签头的包 , 所以交换机1 给该数据包添加一个VLAN ID 。
根据目的MAC地址和VLAN ID , 查询数据库 , 知道该数据包需要发送到24(或25、26号端口 , 这3 个端口被捆绑到一起 , 对上层来说 , 这3 个端口就好象一个端口 , 实际上交换机会根据3 个端口的流量来决定是从哪个端口往外发送) 。假如不知道 , 则该数据包还会被发送到端口6 , 当然 , 在发送到端口6 的以太网段时 , 会先将标签头去掉 , Altaf收到后会丢弃这个数据包 , 因为目的地址不是它 。由于端口24是Tag Aware端口 , 所以 , 发送到24 好端口的数据包的标签头不去掉 。
TNETX 4090交换机收到这个数据包后 , 根据VLANID和目的MAC 地址在它的数据库中查找路由 , 最后 , 它知道该数据包应该发送到端口4(5或6) , 标签头仍然不去掉 。
交换机2收到后 , 根据VLAN ID和目的MAC地址 , 在它的数据库中查找路由 , 知道该数据包需要发送到端口2 。于是将该数据包发送出去 。注重 , 发送出去的数据包需要去掉标签头 。

以上我们讨论了VLAN收发数据包的过程 , 它的具体实现已经由以太网交换机的交换芯片实现了 , 有爱好者可参考交换芯片的技术资料 。
二、802.1P协议
802.1p协议定义了优先级的概念 , 对于那些实时性要求很高的数据包 , 主机在发送时就在前面提到MAC桢头增加的3位优先级中指明该数据包优先级高 , 这样 , 当以太网交换机数据流量比较多时 , 它就会考虑优先转发这些优先级高的数据包 。
目前部分以太网交换机所采用的交换芯片只支持2种优先级 , 也有一些能支持4个优先级 。
802.1p协议还定义了GARP--Generic Attribute Registration Protocol 。这里的Attribute是指组播MAC地址、端口过滤模式和VLAN等属性 , GARP协议实际上可以定义很多交换机应该具有的特性 , 目前 , 它定义了GMRP--GARP Multicast Registration Protocol和GVRP--GARP VLAN Registration Protocol两个协议 , 以后会根据网络发展的需要定义其他的特性 。GARP定义了以太网交换机之间交换这些特性信息的方法 , 如何发送数据包 , 接收的数据包如何处理等等 。
GMRP协议是一个动态二层组播注册协议 , 它的很多方面跟IGMP(三层组播协议)类似 , 对于IP地址来说 , D类IP地址是组播地址 , 实际上 , 对于每一个IP组播地址 , 都有一个组播MAC地址跟它对应 , 802.1p协议就是根据组播MAC地址来在以太网交换机上注册和取消组播成员身份的 , 而IGMP是根据组播IP来治理的 。当然 , 假如以太网交换机没有实现GMRP协议 , 那么就只能通过静态配置来实现组播了 。
关于为什么需要二层组播协议?我们在具体讨论一下 。与协议IGMP一样 , 假如我们在自己的局域网内成立一个组播组 , 可能我们的局域网包含了很多交换机 , 假如这些交换机没有实现二层组播协议的话 , 那么 , 某个组员给其他组员发送数据包时 , 交换机就会将该数据包向所有的端口广播 , 因为交换机不知道哪个端口有人加入了该组播组 , 唯一的解决办法就是治理员配置交换机 , 这样 , 才能将这种广播转发数据包的发送方式限制住 , 而组播本身是动态的 , 所以 , 通过这种靠治理员的配置来实现组播的方式是不现实的 。因此 , 就需要有一个二层组播协议来动态治理组员 。这就是为什么需要二层组播协议的原因 , 目前 , 许多高档的交换机都把实现802.1p和802.1Q协议作为一个主要的性能指标 。
GVRP是VLAN协议 , 由于它与GMRP都是基于GARP之上的 , 所以它们之间的关系很紧密 , 它们都要对交换机的数据库进行操作 , 这个协议的具体定义在802.1Q中 。