曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4436|回复: 2
打印 上一主题 下一主题

[华为] [交换机]access,trunk,pvid,tag,802.1q一起说

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2016-2-2 22:32:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Access 是接入,访问之意; trunk 是躯干的意思。在交换机中,这两者是端口的连接类型。看下面的拓扑图:



上图中,用户主机和交换机之间的链路为接入链路(Access);交换机与交换机之间的链路为干道链路(trunk)。

关于将交换机的端口链路类型配置为 Access 的 VLAN 实验,请参考:《基本 VLAN 实验演示 》。在这个实验中,忽略了一些技术术语的说明,比如 Tag,PVID 等,下面会讨论到这些内容。事实上,划分 VLAN 有多种方法,比如基于端口的,基于 MAC 地址的,基于 IP 子网划分的等等。实际应用中最常见的 VLAN 划分方法一般是基于端口的,我们这里也是基于端口划分。

先了解 access,trunk,pvid 的一些基本概念和规则,后面则会用实验来说明并验证这些规则:

Access 端口类型



说明

1. Access 端口在收到数据后会添加 VLAN Tag,VLAN ID 和 端口的 PVID 相同。

2. Access 端口在转发数据前会移除 VLAN Tag 。


trunk 端口类型

在跨交换机的 vlan 访问时,需要用到交换机的 trunk 技术。参考下面拓扑图:

上图中,两台交换机通过 trunk 链路相连(需要配置)。

说明

1. 当 trunk 端口接收到帧时,如果该帧不包含 tag,则打上端口的 PVID; 如果该帧包含 tag 时,则不改变。

2. 当 trunk 端口发送帧时,该帧的 VLAN ID 在 trunk 的允许发送列表中(也需要在交换机配置出这个列表): 若与端口的 PVID 相同时,则剥离 tag 发送;若与端口的 PVID 不同时,则直接发送。


PVID

参考下面的拓扑图:


说明:

PVID 是 Port Vlan ID 的缩写,也就是端口的虚拟局域网ID号,它表示端口在缺省情况下所属的 VLAN ;默认情况下,X7系列交换机每个端口号的 PVID 为 1 。

如上图,主机A 的数据走到 主机C 没有问题,那为什么不能走到 主机D 呢?

主机A 发送出来的数据帧是一种原始的,不外加任何附带 “条件” 的以太网数据帧。但是 主机A 现在已经被配置到 vlan2 中,那么它发出的数据帧经过交换机时,会被修改,即给该帧加上对应的 PVID 信息,意味着它是个 vlan2 的帧。那么在该数据帧将从 trunk 链路上发送出去时,那么它到底是被动了什么手脚呢?这个改动,就是平时所见到的加了 tag ,即被加了 802.1q 的标签。看下图:

从上图可以明显的看到,正是通过 tag 来区分了不同的 VLAN,这是个对原始以太网帧进行了重新封装的过程 。

这个标签 tag,一共 4 个字节。前面 2 个字节 TPID 为 0x8100 是个固定值,代表这是一个 802.1q 的数据帧;PRI 表示帧的优先级,QoS 会利用到它;CFI 表示该帧是否正常,通常指为 1 ;剩下的 12 个比特位表示的就是 VLAN ID 了,表示该帧是哪个 vlan 上的帧。

所以,从主机A经过 SWA 的 trunk 端口出来的数据帧,就是上述这个带了标记的帧;当这个帧送达 SWB 时,该交换机也就知道了它要发往的是 vlan2,于是在该帧即将流出 主机C 所连接的端口时,该 tag 标记就被拆掉了。这样一来,主机C 收到 主机A 的帧仍然是一个原始的帧。

上面所述的数据帧在流经 trunk 时,是带有 tag 的;那么 “当 trunk 端口接收到帧时,如果该帧不包含 tag,则打上端口的 PVID” 这句话中说的不包含 tag 又会在什么情况下发生呢?---事实上,这是一个特例;也就是,当该帧的 VLAN ID 和 trunk 上的 PVID 相同时,那么在发送时会剥离 tag,然后再发送。比如说,接入 SWA 的一台机器,是属于 vlan1 (默认就存在的 vlan)的,且该 trunk 端口的 PVID 为 1,那么这台机器发送出去的帧就不会被打上标记。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
沙发
 楼主| 发表于 2016-2-3 01:18:42 | 只看该作者

实验部分

拓扑如下图所示:



先进第一个交换机 LSW1,创建 3 个 vlan :
<Huawei>sys
[Huawei]sysname S1   //为方便起见,重命名交换机
[S1]vlan batch 10 20 30   //一次性创建 3 个 vlan

配置 S1 的 3 个与主机相连的接口为 access 类型和相应的 vlan:
[S1]int e0/0/1
[S1-Ethernet0/0/1]port link-type access
[S1-Ethernet0/0/1]port default vlan 10


[S1-Ethernet0/0/1]int e0/0/2

[S1-Ethernet0/0/2]port link-type access
[S1-Ethernet0/0/2]port default vlan 20

[S1-Ethernet0/0/2]int e0/0/3

[S1-Ethernet0/0/3]port link-type access
[S1-Ethernet0/0/3]port default vlan 30

disp vlan 查看创建情况:


没有问题,都已经创建好了。

同样方法设置第二台交换机,这里就不做赘述了。

但还没有对 trunk 口配置,此时像在 CLIENT2 上 ping CLIENT4 是不会通的。所以接下来还要配置 trunk 接口,在第一台交换机上:
[S1]int g0/0/1
[S1-GigabitEthernet0/0/1]port link-type trunk
[S1-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 30   //允许 vlan10 vlan20 vlan30 可以通过 trunk 链路

这个例子里并没有用到 vlan10,上面可以不用对 vlan10 进行配置。实际上,有一条不必要敲入的命令:
  1. port trunk pvid vlan 1
复制代码

这条命令是用来配置 trunk 上的 pvid 。如上,如果 pvid 的值为 vlan1,那么就是说 vlan1 中的数据帧通过 trunk 时,是不会打上 tag 的,而其他的则需要打上标记。

运行 display port vlan 命令,查看一下端口上的 vlan 配置情况:


从上图中可以看到,g0/0/1 上的 PVID 值为 1 ,最后一栏 “Trunk VLAN List” 里可以看到可以通过的 vlan 为 vlan1, vlan10, vlan20, vlan30 中的数据。

可以运行 display port vlan active 命令即可验证 vlan1 中的数据通过 trunk 时是不打标记的,而 vlan10, vlan20, vlan30 是打标记的,如下图所示:



再用 display vlan 命令查看一下:



从图中可以看到,vlan10, vlan20, vlan30 中,都存在有 TG:GE0/0/1(U) 这一行,这是说明这几个 vlan 中的数据通过 G/0/0/1 这个端口时,是需要打上标记的。

此外,这每个 vlan 里都有 GE0/0/1 这条,那么 trunk 接口到底是属于哪个 vlan 呢?有的人说 trunk 不属于任何接口;也有人说 trunk 不属于任何接口(貌似这种说法和命令的输出结果更为贴切)。

交换机 S2 上同样方法配置,这里就不赘述了。

OK,到此就整个配置完了。可以再次从 CLIENT2 上 ping CLIENT4 或从 CLIENT3 上 ping CLIENT5 ,此时应该都能 ping 通了,反之亦然。

为了从图形上更直观的体验这个 tag,可以对 trunk 接口进行抓包(抓 ping 的 ICMP 包),由下图可以明显得看到这个标记了:


到这里,应该算完了,但似乎还有点意犹未尽。上面对 trunk 配置的 pvid 是 vlan1,那下面再来修改一下其它值,以进一步理解。
在 S1 中,将 trunk 的 pvid 配置为 vlan 20 :
[S1-GigabitEthernet0/0/1]port trunk pvid vlan 20

同样,在 S2 中,将 trunk 的 pvid 配置为 vlan 20 ,然后查看一下:


这时可以看到,这时 trunk 上的不打标记的是 vlan20 了,同样向上面抓包可以验证 CLIENT2 发往 CLIENT4 的数据帧中不再有 802.1q 这个标记了;从从 CLIENT3 ping CLIENT5 时,所抓的数据帧中仍然会带有该标记。

现在知道,在划分 VLAN 后,在交换机的内部,始终都会先打上标签;而当数据包流经 trunk 链路时,会根据 trunk 上的 pvid 配置的不同,会决定剥去那些 VLAN ID 与 pvid 具有相同的值的数据帧的标记。那么此时又有个问题,如果两台交换机 trunk 端口上配置的 pvid 值不同,那会发生什么情况?

假设在 S1 上配置的 PVID 为 vlan20,在 S2 上配置的 PVID 为 vlan30,那么当 CLIENT2 发送数据到 CLIENT5 (S2 下的 vlan30 中)时,数据包在流出 S1 的 trunk 口时,会被剥去标记;当流入 S2 的 trunk 时,由于该包没有 tag,于是 S2 会为其加上 tag (vlan30),这样一来造成的结果是,vlan2 中的主机可以直接和 vlan3 中的主机进行通讯了。同样按照修改 trunk 上 pvid 值的方法,看看修改后,是不是 CLIENT2 可以 ping 通 CLIENT5 了 。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
板凳
 楼主| 发表于 2016-2-3 03:09:52 | 只看该作者

小结

下面是 VLAN 端口类型的总结,如下图所示:



 Aaccess接口:access端口只能承载一个vlan的流量,通常用于交换机与PC相连的接口,当access接口收到一个数据帧时,先判断是否有vlan信息,如果没有则打上自己的PVID,如果有则直接丢弃;当access接口要转发一个数据帧时,先判断该数据帧的vlan是否和自己在一个vlan,如果是,则剥离vlan信息,再转发,如果不是,则丢弃。

  Trunk接口:trunk接口可以承载多个vlan的流量,但在华为交换机上默认情况下只允许默认vlan的流量通过,只允许对默认vlan不打标记。通常用于与其它交换机相连的接口。当trunk接口收到一个数据帧时,先判断是否允许该vlan的流量通过,如果允许,则转发到相应的接口,由相应的接口进行处理,如果不允许,则丢弃。Trunk接口发送数据帧时,同样判断是否允许该vlan通过,如果允许则转发到相应的接口,由相应的接口进行处理,如果不允许,则直接丢弃。

  Hybrid接口:hybrid接口可以承载多个vlan的流量,可用在与PC或交换机相连的接口,与trunk接口的最大区别是可以对任何vlan打标记或不打标记。当hybrid接口接收数据帧时,先判断该数据帧是否有vlan信息,如果有,则看该接口是否对该vlan打标记,如果对该vlan打标记,则直接转发到相应的接口,由相应的接口进行处理;如果没有明确说对该vlan打标记,则丢弃。因为默认情况下,hybrid 接口只允许默认vlan的数据帧通过,如果要允许其它的vlan 通过,就要对相应的vlan打标记。如果收到的数据帧没有任何标记,则标记为自己的PVID。在接口上配置对某些vlan标记所起的作用只是允许和不允许该vlan的数据帧通过的问题,在接口上配置为对某些vlan不打标记时只在接口发送数据帧时起作用,当接口收数据时,是不起作用的。hybrid 接口发送数据帧时,若该数据帧有标记,则判断该数据帧的标记vlan和自己是否在同一个vlan,如果是在同一个vlan,则去掉标记后转发;如果该数据帧和自己不在同一个vlan,则判断接口对该数据帧是标记还是不标记,如果是不标记,则去掉标记后再进行转发,如果是标记,则直接转发,若没有明确说明是标记,还是不标记,则直接丢弃。如果要发送的数据帧没有标记,则直接转发。当把一个接口加入到vlan2后,再把该接口设置为hybrid接口时,该接口的PVID就变成了vlan2,同时对vlan2的数据帧不打标记。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 15:37 , Processed in 0.082017 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表