2009-5-7 来源:IT168 作者:lijun 我要评论
投稿
打印
MSN推荐
博客引用
大 | 中 | 小
导读:本文探讨VLAN的Hybrid和Trunk端口的区别。
关键词:VLAN Hybrid Trunk 端口 区别
有网友问这样一个问题: vlan 1 # vlan 2 # vlan 3 # vlan 4 # vlan 5 #
interface Ethernet0/1 port link-type hybrid
port hybrid vlan 1 to 4 untagged port hybrid pvid vlan 2
#
interface Ethernet0/2 port link-type hybrid
port hybrid vlan 3 to 5 untagged port hybrid pvid vlan 3 #
以上配置能不能传到另一台交换机? 也就是说和另一台交换机的同样的vlan Id 的端口能不能互通?也就是想知道什么时候用Hybrid,什么时候用Trunk?
这个问题的答案为:端口有三种模式:access,hybrid,trunk。access就不说了,trunk可以属于多个vlan,可以接收和发送多个vlan的报文,一般用于交换机之间的连接;hybrid也可以属于多个vlan,可以接收和发送多个vlan的报文,可以用于交换机之间的连接也可以用于交换机和用户计算机之间的连接。trunk和hybrid的区别主要是,hybrid端口可以允许多个vlan的报文不打标签,而trunk端口只允许缺省vlan的报文不打标签,同一个交换机上不能hybrid和trunk并存。 下边详细介绍一下三种端口:
untag就是普通的ethernet报文,普通PC机的网卡是可以识别这样的报文进行通讯; tag报文结构的变化是在源mac地址和目的mac地址之后,加上了4bytes的vlan信息,也就是vlan tag头;一般来说这样的报文普通PC机的网卡是不能识别的 下图说明了802.1Q封装tag报文帧结构
带802.1Q的帧是在标准以太网帧上插入了4个字节的标识。其中包含:
2个字节的协议标识符(TPID),当前置0x8100的固定值,表明该帧带有802.1Q的标记信息。 2个字节的标记控制信息(TCI),包含了三个域。
Priority域,占3bits,表示报文的优先级,取值0到7,7为最高优先级,0为最低优先级。该域被802.1p采用。
规范格式指示符(CFI)域,占1bit,0表示规范格式,应用于以太网;1表示非规范格式,应用于Token Ring。
VLAN ID域,占12bit,用于标示VLAN的归属。 以太网端口有三种链路类型:Access、Hybrid和Trunk。
Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口;
Trunk类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,一般用于交换机之间连接的端口;
Hybrid类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,可以用于交换机之间连接,也可以用于连接用户的计算机。
Hybrid端口和Trunk端口在接收数据时,处理方法是一样的,唯一不同之处在于发送数据时:Hybrid端口可以允许多个VLAN的报文发送时不打标签,而Trunk端口只允许缺省VLAN的报文发送时不打标签。
在这里先要向大家阐明端口的缺省VLAN这个概念
Access端口只属于1个VLAN,所以它的缺省VLAN就是它所在的VLAN,不用设置; Hybrid端口和Trunk端口属于多个VLAN,所以需要设置缺省VLAN ID。缺省情况下,Hybrid端口和Trunk端口的缺省VLAN为VLAN 1
当端口接收到不带VLAN Tag的报文后,则将报文转发到属于缺省VLAN的端口(如果设置了端口的缺省VLAN ID)。当端口发送带有VLAN Tag的报文时,如果该报文的VLAN ID与端口缺省的VLAN ID相同,则系统将去掉报文的VLAN Tag,然后再发送该报文。
注:对于华三交换机缺省VLAN被称为“Pvid Vlan”,对于思科交换机缺省VLAN被称为“Native Vlan”交换机接口出入数据处理过程如下: Acess端口收报文:
收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有则直接丢弃(缺省) Acess端口发报文:
将报文的VLAN信息剥离,直接发送出去
(所以,Access端口可以实现同一交换机上相同VLAN下的主机通信;也可以实现交换机级连时的缺省VLAN1报文交换,但不能实现VLAN透传。) trunk端口收报文:
收到一个报文,判断是否有VLAN信息:如果有,判断该trunk端口是否允许该 VLAN的数据进入:如果可以则转发,否则丢弃;如果没有VLAN信息则打上端口的PVID,并进行交换转发。 trunk端口发报文:
比较将要发送报文的VLAN信息和端口的PVID,如果不相等则直接发送。如果两者相等则剥离VLAN信息,再发送。
(所以,将交换机级连口统统设置为Trunk并允许所有VLAN通过后,VLAN2-VLAN4000直接透传,而VLAN1则因为和Trunk缺省 PVID相同,需要通过剥离VLAN信息又添加VLAN信息实现了透传。而如果更改Trunk的缺省PVID,则可以实现某一交换机下的VLAN-X和另一交换机下的VLAN-Y通信。) hybrid端口收报文:
收到一个报文,判断是否有VLAN信息:如果有,则判断该hybrid端口是否允许该VLAN的数据进入:如果可以则转发,否则丢弃(此时端口上的untag配置是不用考虑的,untag配置只对发送报文时起作用);
如果没有则打上端口的PVID,并进行交换转发。 hybrid端口发报文:
1、判断该VLAN在本端口的属性(disp interface 即可看到该端口对哪些VLAN是untag,哪些VLAN是tag)
2、如果是untag则剥离VLAN信息,再发送,如果是tag则直接发送 (所以,Hybrid实现了不同VLAN下的主机的通信。)
以下案例可以帮助大家深入理解华三交换机的hybrid端口模式 [Switch-Ethernet0/1]int e0/1
[Switch-Ethernet0/1]port link-type hybrid [Switch-Ethernet0/1]port hybrid pvid vlan 10
[Switch-Ethernet0/1]port hybrid vlan 10 20 untagged [Switch-Ethernet0/1] int e0/2
[Switch-Ethernet0/2]port link-type hybrid [Switch-Ethernet0/2]port hybrid pvid vlan 20
[Switch-Ethernet0/2]port hybrid vlan 10 20 untagged
此时inter e0/1和inter e0/2下的所接的PC是可以互通的,但互通时数据所走的往返vlan是不同的。
以下以inter e0/1下的所接的pc1访问inter e0/2下的所接的pc2为例进行说明
pc1所发出的数据,由inter0/1所在的pvid vlan10封装vlan10的标记后送入交换机,交换机发现inter e0/2允许vlan 10的数据通过,于是数据被转发到inter e0/2上,由于inter e0/2上vlan 10是untagged的,于是交换机此时去除数据包上vlan10的标记,以普通包的形式发给pc2,此时pc1->p2走的是vlan10
再来分析pc2给pc1回包的过程,pc2所发出的数据,由inter0/2所在的pvid vlan20封装vlan20的标记后送入交换机,交换机发现inter e0/1允许vlan 20的数据通过,于是数据被转发到inter e0/1上,由于inter e0/1上vlan 20是untagged的,于是交换机此时去除数据包上vlan20的标记,以普通包的形式发给pc1,此时pc2->pc1走的是vlan20。
对VLAN进行封装有两种协议.一种是思科专有的协议,叫做ISL. 另一种是RFC公有的协议叫做802.1Q. 两种协议都是针对TRUNK承载不同VLAN为防止混乱而产生的. 默认情况下.交换机上所有的接口都位于VLAN1下.也就是NATIVE VLAN. 事实上,本地VLAN中不仅仅有着接口,还有STP信息,比如BPDU桥接协议数据单元,VLAN ID的信息等等都要通过native vlan来传输. ISL协议和802.1Q的区别在于针对native vlan是否打标. ISL是全部都打,有几个VLAN打几个标记,而.1Q协议除了VLAN1也就是native vlan不打标记之外其他的VLAN都打标记,作用都是一样的,都能让TRUNK识别不同的VLAN. 那为什么不对VLAN1打标记呢.就是因为VLAN1中承载着许多信息对native vlan标记是相当不利的.
native vlan和native os的作用是什么?有什么意义?
如果一个VLAN跨多个交换机,则交换机和交换机之间的连接必须设为Trunk。Trunk可以传输多个VLAN的数据。Cisco Trunk分成两种技术ISL(Cisco私有),IEEE 802.1q。 Native Vlan是802.1q特有的术语。先解释802.1q的工作原理,比如有Switch A和Switch B两个交换机,每个交换机上的第一端口属于VLAN 3,连接在A的e0/1的主机C要和连在B的e0/1上的主机D通讯,C发出的以太网帧通过交换机间的连线到达B,B必须要能分辨出该以太网帧是属于哪个VLAN的,所以当以太网帧离开A的Trunk口时,A会在以太网帧头插入一个4个byte的字段,其中12位表示VLAN号,表明该以太网帧是哪个VLAN发出来的。这样当B从Trunk口接收该帧后,可以判断该转发给哪个VLAN,同时B在将以太网帧传给主机时,会拿掉A加上的tag,D主机收到的帧是标准的以太网帧。所谓Native Vlan指从该VLAN发出的数据帧在通过Trunk时,交换机不会做任何标记,当成一个普通的以太网帧。默认Native VLAN 为VLAN1,而且只能有一个Native VLAN。在Trunk两端交换机的Native VLAN应该一致,不能A上是Vlan1,B上是Vlan2,否则A上VLAN1的主机就能和B上VLAN2的主机通讯了。自己分析为什么!
Native VLAN:作为Trunk,这个口要属于一个native VLAN。所谓native VLAN,就是指在这个接口上收发的UNTAG 报文,都被认为是属于这个VLAN 的。显然,这个接口的缺省VLAN ID(即 IEEE 802.1Q 中的PVID)就是native VLAN 的VLAN ID。同时,在Trunk 上发送属于native VLAN 的帧,则必然采用UNTAG 的方式。
本文来自CSDN博客,转载请标http://blog.csdn.net/quanshengaa/archive/2008/06/20/2571052.aspx
明出处:
我大致解释一下:pc0和pc1属于vlan1,pc2和pc3属于vlan10,pc4和pc5属于vlan20,两个交换机之间我做了vlan trunk,并设置第一台交换机native vlan 10,第二台交换机native vlan 20。
我发现,
1)vlan1中的两台主机pc0和pc1可以进行通信; 2)vlan10中的两台主机pc2和pc3无法进行通信; 3)vlan20中的两台主机pc4和pc5无法进行通信;
按照我理解的通信过程是这样的:
1)vlan1中的主机pc0—>pc1:首先pc0发送数据帧给交换机0,交换机0发现该数据帧有vlan id(id=1),于是不对该数据帧进行操作,直接转发给交换机2,交换机2发现该数据帧有vlan id(id=1),不对其进行操作,转发给交换机2中的vlan1,所以可以ping通。 2)vlan10中的主机pc2—>pc3:首先pc2发送数据帧给交换机0,交换机0发现该数据帧有vlan id(id=10)且等于pvid,于是对数据帧进行untag操作,数据帧随后被转发给交换机2,交换机2发现该数据帧为untag,于是将交换机2的pvid标注给该数据帧,数据帧此时的pvid为20,随后交换机把该帧转发给交换机2中的vlan20,目的主机发现该数据帧中的目的mac地址不属于vlan20,所以pc2和pc3无法ping通。
3)vlan20中的主机pc4—>pc5:首先pc4发送数据帧给交换机0,交换机0发现该数据帧有vlan id(id=20),于是不对该数据帧进行操作,数据帧被转发给交换机2,交换机2发现该数据帧有vlan id(id=20),不对其进行操作,转发给交换机2中的vlan20,所以应该可以ping通。可是为什么我在实验的时候会ping不通呢?vlan1和vlan20中的通信过程不应该是一样的吗??是我理解有错误吗??如果我理解错误,那正确的通信过程是怎样的呢??
请各位高手指教!!!
另外我还有个问题:
native vlan是否必须要在trunk中使用?如果必须要在trunk中使用,那为什么在我不划分vlan的情况下,直接将两台交换机级联,在不设置trunk的情况下,vlan1中的主机之间就可以进行通信? 你的概念很有问题.
1. NATIVE VLAN是TRUNK的特性, 而不是交换机的特性
2. 你在SWITCH 0的TRUNK设置NATIVE VLAN 10, 在SWITCH 1的TRUNK设置NATIVE VLAN 20, 这本身就是一个NATIVE VLAN MISMATCH的错误. 当然作为实验环境也不能说什么.
3. VLAN 1 的PC发送FRAME给SWITCH 0, 在非特殊环境下这个FRAME是UNTAG的. 即使PC端有软件强制性打TAG, 在SWITCH 0上的ACCESS VLAN 1 端口也把这个TAG去除掉, 然后尝试在VLAN1中FORWARD这个UNTAG FRAME. 只有在向TRUNK传送的时候, SWITCH 0才会重新给这个FRAME打上VLAN 1的TAG.
4. SWITCH 0 收到VLAN 10的FRAME的时候的做法和VLAN 1的一样, 只不过在往TRUNK传送的时候, 因为VLAN 10是SWITCH 0 TRUNK的NATIVE VLAN, 所以SWITCH 0 并不会给VLAN 10 的FRAME 打VLAN 10的TAG, 而是保持UNTAG的状态. 重点是, 在
SWITCH 1的TRUNK收到这个UNTAG FRAME的时候, 因为SWITCH 1的TRUNK的NATIVE VLAN是20, 所以SWITCH 1会把这个原本在SWITCH 0 VLAN 10的UNTAG FRAME, 发到SWITCH 1的VLAN 20里面. 所以, PC 2不能PING 通PC 3. (ARP REQUEST没有人响应) 但是PC2的ARP REQUEST的确是可以在SWITCH 1的VLAN 20里面看到, 抓包看就知道.
5. SWITCH 0的VLAN 20 到达SWITCH 1的VLAN 20没有问题, 只不过从SWITCH 1的VLAN 20则会去到SWITCH 0的VLAN 10 (同4). 所以PC4 PING 不通PC 5. (PC5的ARP REPLY跑到SWITCH 0的VLAN 10去)
1)端口配置为Access模式,则只允许配置一个vlan----这个端口只能承载这个vlan的流量 2. 验证目的
1)Access端口收到tag(带vlan)报文:
A)如果报文的tag与端口所配置的access vlan 一样,则会接收报文;接收以后,会在交换中查找配置
相同access vlan的端口,从所有配置相同access vlan的端口转发出去(无arp表项时)。转发出去
的报文不带tag,vlan被剥离。
B)如果报文的tag与端口所配置的access vlan 不一样,则会被丢弃; 2)Access端口收到不带tag的报文: 报文会被加上access vlan 的tag
3)对于从access端口出去的报文,全部被剥掉tag—不会有tag存在
因篇幅问题不能全部显示,请点此查看更多更全内容