(一)vlan原理
首先说下802.1q协议(也叫dot1q),802.1q协议定义了vlan字段的结构和vlan字段在以太网帧中的位置。上一篇文章有介绍以太网帧的格式,传统的以太网数据帧在目的mac地址和源mac地址之后封装的是上层协议的类型字段,如图1-2所示。
其中DA表示目的mac地址,SA表示源mac地址,Type表示报文所属协议类型。
IEEE 802.1q协议规定在目的mac地址和源mac地址之后封装4个字节的vlan tag,用以标识vlan的相关信息。
这样的以太网帧有时也被称为802.1q帧,提起802.1q帧实际就是在标准以太网帧中加入了vlan tag,vlan tag包含4个字段:
1. TPID:2个字节,0X8100, 标识802.1q协议。
2. 802.1p优先级:3个bit,标识报文的优先级,这个字段用于qos功能。
3. CFI:1个bit,取0表示mac地址以标准形式封装,取1则以非标准形式。
4. VLAN ID:12个bit,0-4095,其中0和4095为协议保留。
思科除了支持802.1q的封装,还有自己私有的vlan协议----cisco ISL。
(二)vlan接口简介
不同vlan间的主机不能直接通信,需要通过路由器或三层交换机等网络层设备进行转发,设备提供vlan接口实现对报文进行三层转发的功能。
vlan接口是一种三层模式下的虚拟接口,主要用于实现vlan间的三层互通,它不作为物理实体存在于设备上。每个vlan对应一个vlan接口,在为vlan接口配置了ip地址后,该接口即可作为本vlan内网络设备的网关,对需要跨网段的报文进行基于ip地址的三层转发。
(三)基于端口的vlan简介
基于端口的vlan就是我们平常最常用的划vlan的方法,将指定端口加入到指定vlan中之后,端口就可以转发指定vlan的报文。
1.端口的类型
端口有三种类型,access端口,trunk端口,hybrid端口:
(1)access端口:只属于一个vlan,端口发送报时,去掉vlan tag,一般用于和PC设备相连。
(2)trunk端口:可以属于多个vlan,端口发送报文时,如果是缺省vlan的报文,去掉vlan tag, 如果是其他vlan的报文,则必须带vlan tag发送, 一般用于交换机直接互联。
(3)hybrid端口:可以属于多个vlan,但与trunk口相比,他有一点更具灵活性,他可以自由决定发送报文时,是去掉tag,还是带上tag。
其实打个不恰当的比喻:这三种端口类型类似于三个国家海关:
(1)access端口类似朝鲜,极其封闭,去他们国家旅游出海关时,管你是自己东西还是他们国家的东西,一律扣押掉(去tag)。
(2)trunk端口类似我们,有一定的自由度,出海关时,我们国家的扣押掉,其他的你带走(带tag)。
(3)hybrid端口类似发达国家,完全自由,出海关时完全按你的个人意愿来决定,带走(带tag),还是留下(去tag)。
2.pvid 和 vid
(1)其实pvid和vid是两个概念。其实网上有条解释说的很到位:vid是vlan的标识,而pvid是端口的属性。所以一个vlan一个vid,同样一个端口也只有一个pvid。
(2)一个端口可以属于多个vlan,但却只有一个缺省vlan,vid=pvid这个vlan就是缺省vlan,因此,设置端口的pvid值就是设置该端口的缺省vlan。
(3)缺省vlan有什么作用?当端口接收到一个untag报文时,报文没有vlan信息,交换机不知道报文往哪里送,丢掉?显然不合理,因此打上pvid的值,将报文送到缺省vlan。
(4)需要注意的是:比如端口ge1属于vlan1,vlan2,vlan3,vid的值是1,2,3,建议pvid的值在vid中选取。
3. 交换机收发数据全过程
(1)access端口:
发报文时,去掉tag再发送。
收报文时,untag报文(一般与PC相连,PC不识别带tag报文),打上端口pvid,送到缺省vlan。
(2)trunk端口:
发送报文时,当报文vid = 端口pvid时,去掉tag,再发送。否则,保持原有tag发送。
收到报文时,untag报文,给报文打上端口pvid,送到缺省vlan。
tag报文,送到tag标识的vlan。
(3)hybrid端口:
发送报文时,可以自由配置以还是untag的形式发送。
收到报文时,和trunk端口一样处理。
4.trunk端口的意义
trunk是什么意思?trunk可以叫做“干道,中继”,一个trunk可以通过多个vlan的流量。什么时候要用到trunk口?
如上图,在没有trunk口之前,左边的vlan2,3,4要和右边的vlan2,3,4通讯,就需要在交换机拉3根线,一个vlan一条,这就会有扩展性的问题,如果两边的vlan多了,就会成蜘蛛网。
有了trunk口以后,trunk口可以存在于多个vlan,trunk口可以收发带vlan tag的数据,将左边vlan2的数据送到右边vlan2,vlan3送到vlan3,vlan4送到vlan4,一根线足以。
Trunk链路之所以可以承载所有VLAN的流量,主要是因为来自于每个VLAN的数据帧,在经过Trunk的时候,都会在这个数据帧里插入一个VLAN ID字段,对端交换机收到这个数据时,检查找到这个VLAN ID所对应的VLAN,然后把这个数据转发到对应的VLAN中。
5. access, trunk端口和tag,untag端口的关系
access,trunk,hybrid都是上层的概念,其实在底层只有tag,untag概念。
比如:ge3 是access端口,他任何时候只能存在于一个vlan,在底层实际他是untag端口。
ge3如果说trunk端口,他可能存在于多个vlan,那么他在底层实际是tag端口,但在缺省vlan是untag端口。
6.vlan配置的基本命令
比如配置两个vlan(vlan2 和vlan 3),vlan2成员ge1,ge2,ge3,vlan3成员ge3,ge4,ge5。其中ge3是trunk口。
以下命令是我司switch的CLI,不同公司可能存在差异:
vlan 2-3
创建vlan2和vlan3
int range ge 1-2
进入到端口ge1和ge2
switchport pvid 2
设置端口的pvid同时将ge1,ge2加入到vlan2
int range ge 4-5
进入到端口ge4和ge5
switchport pvid 2
设置端口的pvid同时将ge4,ge5加入到vlan3
int ge3
进入到端口ge3
switchport mode trunk
设置端口为trunk模式
switchport trunk vlan 2-3
将端口加入到vlan2和vlan3 中。
switchport pvid 2
设置vlan2为ge3的缺省vlan。