请思科专家和高手解答,可用专业术语。关于流量通过交换机时得VLAN标记,是不是有两种?还有本征VLAN问题

1 首先是从PC进入ACCESS口时,(假设是VLAN20)会在帧里面打上一个20的标记,当把该帧转发到TRUNK时,会再根据原先的20标记封装一次,让对面的TRUNK口知道是VLAN20.而两种封装的区别是,第一种不改变帧的结构,而第二种会改变,如使用802.1Q封装就会加4个字节。另外是,PC机不管是第一种还是第二种封装后都是不认识帧的,这个对吗?这个是对VLAN标记的理解
2 为什么TRUNK口要再封装一次,而不直接发送呢?按道理交换机已有能力识别VLAN,是因为当初制定中继端口是规则就是如此吗?必须要再封装,才能使所有VLAN都能通过。另外的是,华为有个HYBIRD端口,他的原理是不是像我猜想一样,不需要再重新封装就能识别?
3 请问第一种封装方式,是不是只是仅仅在原帧上的字段上的特定部位(VLAN ID)上加上ID?

4 关于本征VLAN的理解是:在传统的LAN中,如果有流量还没有打上第一种(ACCESS)口标记,这种流量就会被发往本征VLAN,既此时补充回第一种打标,标记号是本征VLAN的号,然后通过TRUNK时不再进行一次封装。
5 本征VLAN的问题来了:到底从TRUNK发送时,第一种标记是否还在?如果在,那么传统LAN一样不能识别,发到PC上应该也不能识别。如果第一种标记也不在,那么到了另一个中继端口的交换机里,就等同于另一个交换机收到的也是无标记流量,那么再重新重复前面的动作吗?
6 如果4和5的分析没问题,那么本征VLAN为什么一定要相同?不相同会出现什么安全问题?

请先看好我前面的理解,如果理解有误请指出并纠正,如果没问题,那么请详细地回答我下面的问题,尽量用专业术语。目前我大概刚刚入门CCNP的阶段,不介意接受难点的知识
7 如果802.1Q中继端口在本征vlan上收到有标记帧。则会将该帧丢弃。这句话是什么意思?上课的老师说是为了防止交换机之间的本征VLAN设置不同。可我认为的意思是,通过ACCESS已经有标记的帧,是不会进入本征VLAN的。而要防止VLAN不同也不成立,因为发送到第二个交换机的时候,不是已经会把所有标记去掉了吗?还是说不会去掉?

我也不是专家,就当大家讨论一下吧

1.两种种标记方法

一种:ISL(思科私有的),不改变帧结构

另一种:802.1q(公有的,其他厂商设备也支持),在以太网帧里面插入4个字节

PC机不认标签,只管源MAC和目标MAC

2.你的认识有误区,PC进入ACCESS口时根本就没有封装上VLAN20的标签,只是这个PC和交换机相连的端口是配置为VLAN20而已,真正封装打标签是在数据从TRUNK口出去前,只有TRUNK链路纯在,才会有打标签这一说

3.ISL是在整个的以太网帧的头部加上26个字节的ISL报头,在尾部加上4个字节的CRC(循环冗余校验)   总共30个字节



VLAN的字段应该就在ISL头里面


本征VLAN,我学的时候没有这个说法,大概就是Native VLAN吧?

Native VLAN是802.1q中的概念,Cisco Catalyst交换机默认Native VLAN是VLAN 1

Native VLAN是用来发送无标记的流量的

就算你发送的数据是有标记的(举例是VLAN10),如果你把VLAN10假如到Native VLAN中,那Native VLAN就会把标记去掉后,在通过中继链路发出

这里提醒你一个重点:Trunk端口互联Native VLAN必须相同



只是讨论,说的不对的地方,欢迎指出

追问

如果说第一个通过的交换机直接连接了目的PC,那么帧里面一直都没有标识自己是属于哪个VLAN吗?仅仅是这个交换机知道而已?
另外可以怎么做实验验证帧的结构有没有变化?

追答

我没看懂你问的第一个问题
我试着解释下吧:交换机的端口属于哪个VLAN,是你去配置的,配置后,交换机里就会有vlan对应端口的条目,用show vlan brief可以查看的到
它是用端口对应vlan的方式来分隔广播域的,这样能理解了吧,个人认为在没有中继链路前,是不改动数据帧结构的。

实验验证帧的结构有没有变化

个人建议你装个Sniferr,抓包来验证。我没试过用GNS桥接真机抓包,我认为应该可以的

追问

其实我的几个问题都是基于那一个假设,就是帧在一进入ACCESS就会打上VLAN ID,帧结构也会改变,这是我说的第一种封装。而通过中继的话会再封装一次,这就是第二种封装。因为上课的老师是这么说的。而我的第一个问题说,PC即使仅对第一种封装也无法识别,基于这些假设后面再提出关于本征VLAN的疑问。


字数超过限制,请看我的图片


追答

书上的那句话说的没错
首先Native VLAN是802.1q中的概念,CiscoCatalyst交换机默认Native VLAN是VLAN 1
其次Trunk端口互联Native VLAN必须相同,要不然就无法通信。
Native VLAN是干什么用的,要先搞清楚,是为了兼容与不支持VLAN的交换机混合部署用的。

就是说它允许trunk端口上转发未被标记的帧
一旦某个VLAN被配置为Native VLAN,那只要是这个VLAN的数据帧,在经过中继链路都时,都不会被打标签
像你上面说的,如果中继端口在Native VLAN上收到有标记帧,就说明对面的Native VLAN配置和自己不一样,所以丢弃。
这样能理解了吧。
至于你说的:帧在一进入ACCESS就会打上VLAN ID,帧结构也会改变,个人认为是错的。你可以用Sniferr抓包来试试。
我的看法是交换机是有一张:端口对应VLAN的表来查找VLAN信息的(通过show vlan brief能看到)
但是跨交换机之间的VLAN通信,才会有中继链路和打标签这一说法

这个应该是CCNA的技术点吧??你是在考CCNA?
其实我连CCNA都没去考过,虽然我已经学到CCNP技术了...
有什么问题,还可以再交流ლ(╹◡╹ლ)

追问

对于那句话的解释,我是这么理解的。如果说两个交换机的NATIVE VLAN不一样,比如第一个是10,第二个20.那么第二个收到一个VLAN 20的有标记帧,就会丢弃,但是收到其他的VLAN都不会丢弃。虽然原本作用是为了防止NATIVE VLAN不同,可实际上,就算不同了,只要第一个交换机里不会有与第二个交换机NATIVE VLAN相同的VLAN,那么一样不会出现问题。
而更为奇怪的是,我用PT模拟做实验,在中继端口里不管是哪一种情况都不会丢弃帧

追答

这个我确实没有这么仔细的验证过native vlan不同后,另外的VLAN还是否能正常通信。你可以试试
PT是指Cisco Packet Tracer?
你可以用GNS再试试

追问

那你能说一下你对那一句话的理解吗?详细过程是怎样的?你假设一个帧出现怎样的情况才会被第二个交换机的本征VLAN丢弃?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-25
你对vlan的封装理解有点错误。
1,数据只有在进入和离开交换的时候才会有封装动作
2,access口是不会有封装动作的
3,native只在trunk口中才有意义

解释一下:
一定要先理解access是没有封装的。按你的思路,在access口上的pc可以识别交换机上的数据包,所以这个类型的端口必定是没有封装。这也就是为什么pc在trunk口上无法识别到交换机的数据。

所以trunk的工作原理如下:当这个端口收到数据时,先查找vlan封装标示,根据标示将数据分配到对应的vlan中去(同时剥去这个数据的vlan标示)。当数据从trunk口离开交换机的时候,做逆操作。根据送上这个数据的vlan,为每个数据打上标示,再从trunk口中发送出去。

native其实是trunk标示的一种,比如你有三个vlan,1、10、20,1是native,那在送出交换机的时候vlan 10、20的数据会打上标签,1不打标签。然后很重要,如果下一台交换机配置更改了,native是10,那这时候第一台交换机的vlan1就会和第二台交换机的vlan10打通。而第二台交换机收到vlan10的数据时,尽管本地有vlan 10,但vlan10是native,它就会遵循native原则,丢弃该这个有标示的数据追问

1 关于本征VLAN,意思是不是假如两个交换机不同,比如第一个是1第二个是10.当第一个交换机有一个VLAN 10的进入了第二个,因为10是第二个的本征,所以他会丢弃掉。对吗?‘
2 我在PACKET TRACER模拟器试过这种情况,交换机并没有丢弃该帧,是模拟器出错吗?
3 还有一个问题是 一个无标记帧进入了TURNK ,TRUNK是会马上就对它进行封装吗?
4 一个无标记的帧能通过TRUNK口进入交换机然后从分配了VLAN的ACCESS口发出吗

追答

1,是不是一定丢弃,这个和交换机厂商、交换机型号甚至IOS的版本都有关系,不能肯定。但如果vlan10的本地是native,那一定不会有打vlan10标签的数据。也就是如果从你的第二台交换机的vlan10发数据到第一台,那一定是进入第一台的vlan1,变成了跨vlan通信。
2,这个模拟器只是个flash,千万别当真。
3,所有进入trunk的数据都是无标记的,所有的数据标签都是trunk根据数据的来源vlan进行封装
4,在trunk中的无标记帧,一定是native,当然可以从access口发出,只要这个端口属于native vlan

追问

可能我的问题说的有点不清楚
1 我知道跨VLAN通信,那情况是发出方本身就是NATIVE VLAN。我是想问的是,一个VLAN 10的帧通过鉴,对第一个交换机来说,1才是NATIVE,10不是NATIVE,而此帧到了第二个交换机,VLAN 10对第二个交换机来说是NATIVE。这种情况是不是按照那句话的解释会把帧丢弃?
2后面的问题是一起问的,意思是一个PC机如果直接连接到TRUNK口,进入交换机后会有标记么?如果无标记,这样的帧能否正常的通过ACCESS发出去

追答

这2个问题都没测试过,只是理论解释
1,看你用什么端口发送这个vlan10的帧,用acess的话,这个帧没任何标签,所以直接进入第二台交换机的native vlan(也就是vlan10),如果用trunk口发送,那数据会被打上vlan10的标签,到达第二台交换机时这个vlan不存在,应该被丢弃。
2,PC进入trunk,理论上是不可行,因为trunk两段是需要协商的,pc机没有这种协商机制,端口无法通信。那假设它可以接入trunk,由于pc的端口无法打标签(这只是正常情况,也有用软件或者其他方法加标签的),那这就相当于送了一个无标签的帧到trunk隧道内,那出trunk的时候因为和native一样,当然也会被送到native vlan里。

追问

非常感谢你的回答,不过允许我啰嗦一下,还是有一点问题您还没回答完我的。到时追加分
1 前面说到打上了VLAN10进入第二台交换机了,此时第二台交换机是存在VLAN 10,此正是它的本征VLAN。那么第二台交换机是不是会丢弃帧?我就是问这个
2 前面您也解释清楚了,不过我最后想问的是这样的一个帧(无标记)能不能从ACCESS发出
就是问无VLAN ID的帧能不能从ACCESS口发出去

追答

1,第二台交换机确实有vlan10,但没有vlan10的标签,因为vlan10是native了,所以数据携带vlan10的标签进入第二台,应该就属于一个错误数据,只能被丢弃。
2,access发出的帧都是无标签的,只有在trunk里才有标签。这个要顶要搞清楚,比如你把一个vlan10的口和一个vlan20的口接起来,它们是可以通信的。
不明白欢迎继续追问

追问

一个帧能从ACCESS口出去,那是因为他本身的VLAN属于ACCESS口对应的VLAN,出去的时候如果已经标记过那把标记去掉。而属于NATIVE VLAN的帧应该是无法从ACCEES出去的吧?我假设的是PC直接通过TRUNK进入交换机,先假设这成立,那就成为了本征VLAN的帧了。然后因为它不属于ACCEES口所对应的VLAN,所以发不出去,对么

追答

不对,帧标签只在trunk里有,不是在交换机里就有,先搞清楚这个。

一个交换机的vlan10和vlan20,其内部的数据结构是一样的,不包含任何标签。所以我前面说,你如果用网线把vlan10和vlan20连起来,是可以通信的。
所以如果一台交换机,你不配置trunk口,那开再多的vlan,也没有帧标签存在。
只有当数据进入trunk通道的时候(因为在通道内vlan混跑),所以才被打上了vlan标签。这个标签只是为了在出trunk通道的时候标示数据的来源vlan。
所以数据一旦离开trunk,又是都没有任何标签的状态。
native数据的无标签,也只是体现在trunk隧道内,access不属于trunk,当然不可能有任何标签,所以在vlan内本来就没有本征区别

追问

我知道在ACCESS里传播的帧是无标签的。我都说我只是问,交换机是否把该帧从ACCESS会发出去!因为目标主机所属的VLAN是属于一个特定的VLAN,即所连ACCESS口所属的那个VLAN。按道理,一个属于本征VLAN的帧(不管有没有标签)交换机是不会发过去的

追答

既然你知道access里的帧无标签,那交换机为什么不发?当然发送啊。
这里你还是没搞清楚一个问题,帧的标签是在进入trunk的时候加的。这点你可以去查一下本征的配置,本征只能在trunk端口的inter-if下配置,不属于全局配置。也就是说,每个trunk口,其实是可以配置不同的vlan为自己本征,不是说一个交换机只有一个本征。

对于access口,端口本身并不知道自己属于什么vlan,这个划分是交换机判定的。你可以查一下vlan的定义是什么?这可以连接是一种虚拟交换机的技术,也就是简单的将一台交换机分割成N个使用。

那交换机又是怎么工作的呢?192.168.1.1和192.168.1.2在一个交换机下可以通信,如果同时在一个交换机下接入192.168.1.1、192.168.1.2、10.1.1.1、10.1.1.2,后面2个不能通信吗?交换机本省无法判定自己的vlan,二层设备只看mac地址,从这点上来看也无法判定vlan。

本回答被网友采纳