交换机 vlan设置

交换机原理

  • 交换机基于数据的源mac地址进行学习
    由于交换机可以学习mac地址,把学习到的mac地址,存放到mac-address table,每一个表项可以保存300秒,这个表也叫cam表,也可以叫mac地址表
  • 基于数据的目的mac地址,查询交换机的mac地址表,如果找到了,单播出去,如果没有找到,则泛洪
  • 交换机的一个接口可以学习多个mac地址
    为什么一个接口会学习多个mac地址呢?因为接口还可以连另一个交换机,另一个交换机下面有好多pc。
  • 一个mac地址只能被一个交换机接口学习
    一台交换机的2个接口都接收到了相同的mac地址,把这个mac记录到哪个接口呢?后到的优先。
  • 如果3台交换机形成了一个环,就会产生广播风暴,交换机有防环协议。

由糟糕的网络设计,引出划分vlan的必要性

  • 巨大的广播域,导致泛洪验证,性能低下
  • 一台机器中了病毒,由于没有隔离,会迅速传染给网络内的其他主机。
  • 不方便管理

vlan概要

办公楼有3层,每层都有IT部,HR部,销售部。把在1,2,3层的IT划分成一个vlan;把在1,2,3层的HR部划分成一个vlan;在1,2,3层的销售划分成一个vlan;这样做的目的是便于管理。

vlan特点

相同vlan即便在不同的交换机下,也可以相互通信;不同vlan即便是在同一个交换机下也不能通信。

vlan运作

红色的是一个vlan,黑色的是一个vlan,绿色的是一个vlan,它们都在交换机A里。

虽然红色和黑色在同一个交换机下,但是它们之间不能通信。

红色的是一个vlan,黑色的是一个vlan,绿色的是一个vlan,它们既在交换机A里,也在交换机B里。

即使不在同一个交换机下,红色的vlan是可以跨交换机通信的。

交换机A和交换机B连接的2个接口,必须修改成Trunk接口。Trunk接口不属于任何vlan,所以所有vlan的数据都能通过它传输。

那么trunk如何能够识别vlan号的呢,出交换机A时,trunk接口在原来的报文的以太网头部加一个4个字节的标记,标记里存放的是vlan号,然后传到了交换机B的trunk接口后,trunk接口查看以太网头部的标记,就知道了是哪个vlan过来的数据,然后把标记去掉后,传递个目标vlan。

打标记和去掉标记的协议有2种:

  • ISL:cisco专有的协议,是在报文的以太网头部在加一个ISL头部,把vlan号放进去。
  • 802.1Q:国际标准,所有厂商的交换机都支持。直接把vlan号放到报文的以太网头部里。所有一般都使用此协议。

  • cisco交换机下所有接口,默认都属于vlan1
  • 交换机最多支持4096个vlan号。范围是0-4095.其中0号和4095号不能用。
  • vlan1,vlan1002,vlan1003,vlan1004,vlan1005是交换机初始就有的vlan号,而且不能被删除。vlan1能使用,其他4个不能使用,是保留的。
    • 1-1001:标准vlan
    • 1006-4094:扩展vlan。cisco 3560以上的型号才支持,vtp协议的transparent模式下可用。

实验

添加2个pc,给pc设置ip的命令:

PC1> ip 192.168.1.10 255.255.255.0
Checking for duplicate address...
PC1 : 192.168.1.10 255.255.255.0

添加一个交换机,查看vlan表show vlan brief

IOU2#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/1, Et0/2, Et0/3
                                                Et1/0, Et1/1, Et1/2, Et1/3
                                                Et2/0, Et2/1, Et2/2, Et2/3
                                                Et3/0, Et3/1, Et3/2, Et3/3
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup

创建vlan方法1:先进入创建模式vlan database,然后vlan vlan号

但执行完vlan database后,不是立即创建vlan,必须使用exit,保存并退出后,才真正创建vlan。

IOU2#vlan database
% Warning: It is recommended to configure VLAN from config mode,
  as VLAN database mode is being deprecated. Please consult user
  documentation for configuring VTP/VLAN in config mode.
IOU2(vlan)#vlan 10
VLAN 10 added:
    Name: VLAN0010
IOU2(vlan)#exit
APPLY completed.
Exiting....
IOU2#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/1, Et0/2, Et0/3
                                                Et1/0, Et1/1, Et1/2, Et1/3
                                                Et2/0, Et2/1, Et2/2, Et2/3
                                                Et3/0, Et3/1, Et3/2, Et3/3
10   VLAN0010                         active
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup

修改vlan的名字:vlan 10 name NAME

IOU2(vlan)#vlan 10 name hr
VLAN 10 modified:
    Name: hr
IOU2(vlan)#exit
APPLY completed.
Exiting....
IOU2#show vlan b
IOU2#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/1, Et0/2, Et0/3
                                                Et1/0, Et1/1, Et1/2, Et1/3
                                                Et2/0, Et2/1, Et2/2, Et2/3
                                                Et3/0, Et3/1, Et3/2, Et3/3
10   hr                               active
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup

创建vlan方法2:先进入全局模式conf t,然后vlan vlan号,然配置名字name Name

IOU2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
IOU2(config)#vlan 20
IOU2(config-vlan)#name it
IOU2(config-vlan)#exit
IOU2(config)#exit
*Jan 16 16:36:48.962: %SYS-5-CONFIG_I: Configured from console by console
IOU2#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/1, Et0/2, Et0/3
                                                Et1/0, Et1/1, Et1/2, Et1/3
                                                Et2/0, Et2/1, Et2/2, Et2/3
                                                Et3/0, Et3/1, Et3/2, Et3/3
10   hr                               active
20   it                               active
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup

把接口设置成输入接口

输入接口只能连pc。下面的设置:把交换机的接口e0/0设置成了输入接口

IOU2(config-if)#switchport mode access

IOU2(config)#int e0/0
IOU2(config-if)#switchport mode ?
  access        Set trunking mode to ACCESS unconditionally
  dot1q-tunnel  set trunking mode to TUNNEL unconditionally
  dynamic       Set trunking mode to dynamically negotiate access or trunk mode
  private-vlan  Set private-vlan mode
  trunk         Set trunking mode to TRUNK unconditionally
IOU2(config-if)#switchport mode access

把接口划分到某个vlan里

把接口e0/0划分到vlan 10里,

IOU2(config-if)#switchport access vlan 10
IOU2#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/1, Et0/2, Et0/3, Et1/0
                                                Et1/1, Et1/2, Et1/3, Et2/0
                                                Et2/1, Et2/2, Et2/3, Et3/0
                                                Et3/1, Et3/2, Et3/3
10   hr                               active    Et0/0
20   it                               active

虽然pc1和pc2在同一个局域网内,但由于pc1连接到了e0/0,pc2连接到了e0/1,e0/0和e0/1已经不在同一vlan里了,所有pc1和pc2已经不能互相通信了。

PC1> sho ip
NAME        : PC1[1]
IP/MASK     : 192.168.1.10/24
GATEWAY     : 255.255.255.0
DNS         :
MAC         : 00:50:79:66:68:00
LPORT       : 20004
RHOST:PORT  : 127.0.0.1:20005
MTU:        : 1500
PC1> ping 192.168.1.20
host (192.168.1.20) not reachable

PC2> show ip
NAME        : PC2[1]
IP/MASK     : 192.168.1.20/24
GATEWAY     : 255.255.255.0
DNS         :
MAC         : 00:50:79:66:68:01
LPORT       : 20006
RHOST:PORT  : 127.0.0.1:20007
MTU:        : 1500
PC2> ping 192.168.1.10
host (192.168.1.10) not reachable

把接口e0/1,划分到vlan 20

IOU2(config)#int e0/1
IOU2(config-if)#switchport mode access
IOU2(config-if)#switchport access vlan 20
IOU2(config-if)#exit
IOU2(config)#exit
IOU2#
*Jan 16 16:58:41.162: %SYS-5-CONFIG_I: Configured from console by console
IOU2#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/2, Et0/3, Et1/0, Et1/1
                                                Et1/2, Et1/3, Et2/0, Et2/1
                                                Et2/2, Et2/3, Et3/0, Et3/1
                                                Et3/2, Et3/3
10   hr                               active    Et0/0
20   it                               active    Et0/1

由于pc1和pc2已经不在同一vlan里了,所以最好修改pc2的ip,和pc1不在一个网段里。

PC2> ip 192.168.2.10 255.255.255.0
Checking for duplicate address...
PC1 : 192.168.2.10 255.255.255.0

再添加一台交换机switch2,和2台pc,分别是pc3和pc4

在交换机switch2里,添加vlan 10和vlan 20.

switch2#vlan database
switch2(vlan)#vlan 10 name hr
VLAN 10 added:
    Name: hr
switch2(vlan)#vlan 20 name it
VLAN 20 added:
    Name: it
switch2(vlan)#exit
APPLY completed.
Exiting....
switch2#show vlan b

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/1, Et0/2, Et0/3
                                                Et1/0, Et1/1, Et1/2, Et1/3
                                                Et2/0, Et2/1, Et2/2, Et2/3
                                                Et3/0, Et3/1, Et3/2, Et3/3
10   hr                               active
20   it                               active

把交换机switch2的接口e0/1划分到vlan10;把e0/2划分到vlan20

switch2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
switch2(config)#int e0/1
switch2(config-if)#switchport mode access
switch2(config-if)#switchport access vlan 10
switch2(config-if)#int e0/2
switch2(config-if)#switchport mode access
switch2(config-if)#swi acc vlan 20
switch2(config-if)#exit
switch2(config)#exit
switch2#show vlan b

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/3, Et1/0, Et1/1
                                                Et1/2, Et1/3, Et2/0, Et2/1
                                                Et2/2, Et2/3, Et3/0, Et3/1
                                                Et3/2, Et3/3
10   hr                               active    Et0/1
20   it                               active    Et0/2

配置pc3和pc4的ip,让pc3和pc1在同一个网段,让pc4和pc2在同一个网段

PC3> show ip

NAME        : PC3[1]
IP/MASK     : 192.168.1.20/24
GATEWAY     : 255.255.255.0
DNS         :
MAC         : 00:50:79:66:68:02
LPORT       : 20014
RHOST:PORT  : 127.0.0.1:20015
MTU:        : 1500

PC4> show ip

NAME        : PC4[1]
IP/MASK     : 192.168.2.20/24
GATEWAY     : 255.255.255.0
DNS         :
MAC         : 00:50:79:66:68:03
LPORT       : 20016
RHOST:PORT  : 127.0.0.1:20017
MTU:        : 1500

这时pc1和pc3能ping通吗

是ping不通的,因为连接switch1(e0/2)和swtch2(e0/0)的接口,还并没有划分在vlan 10里。

划分到vlan 10里后,pc1和pc3就能ping通了。

IOU2(config)#int e0/2
IOU2(config-if)#switchport access vlan 10
IOU2#show vlan b
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/3, Et1/0, Et1/1, Et1/2
                                                Et1/3, Et2/0, Et2/1, Et2/2
                                                Et2/3, Et3/0, Et3/1, Et3/2
                                                Et3/3
10   hr                               active    Et0/0, Et0/2

switch2(config)#int e0/0
switch2(config-if)#switchport acc vlan 10
switch2#show vlan b
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/3, Et1/0, Et1/1, Et1/2
                                                Et1/3, Et2/0, Et2/1, Et2/2
                                                Et2/3, Et3/0, Et3/1, Et3/2
                                                Et3/3
10   hr                               active    Et0/0, Et0/1
20   it                               active    Et0/2

这时,pc2和pc4能ping通吗?

不能ping通,因为连接switch1(e0/2)和swtch2(e0/0)的接口,划分在vlan 10里,而pc2和pc4划分在vlan 20里。

修改switch1(e0/2)和swtch2(e0/0)的接口,为trunk接口后,pc2和pc4就能ping通了。

执行:IOU2(config-if)#switchport mode trunk,会报下面的错误
Command rejected: An interface whose trunk encapsulation is "Auto" can not be configured to "trunk" mode.

错误原因:前面说过打标记和解标记有2个协议,一个是cisco特有的ISL,另一个是国际标准802.1Q,所以设置trunk接口时要明确告诉交换机用哪个协议。

告诉交换机用哪个协议:IOU2(config-if)#switchport trunk encapsulation dot1q

dot1q就是802.1Q。

IOU2(config)#int e0/2
IOU2(config-if)#switchport mode trunk
Command rejected: An interface whose trunk encapsulation is "Auto" can not be configured to "trunk" mode.
IOU2(config-if)#switchport trunk encapsulation dot1q
IOU2(config-if)#switchport mode trunk

switch2(config)#int e0/0
switch2(config-if)#swi
switch2(config-if)#switchport mo
switch2(config-if)#switchport mode tru
switch2(config-if)#switchport mode trunk
Command rejected: An interface whose trunk encapsulation is "Auto" can not be configured to "trunk" mode.
switch2(config-if)#switchport trunk encapsulation dot1q
switch2(config-if)#switchport mode trunk

这时pc1和pc3,pc2和pc4都能ping通了。

把switch1(e0/2)和swtch2(e0/0)设置成trunk接口后,它们就消失了。不属于任何一个vlan。

show vlan brief命令结果里消失的接口,有2种情况。一种是:它不属于任何vlan了;另一种是它是trunk接口了。

IOU2#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/3, Et1/0, Et1/1, Et1/2
                                                Et1/3, Et2/0, Et2/1, Et2/2
                                                Et2/3, Et3/0, Et3/1, Et3/2
                                                Et3/3
10   hr                               active    Et0/0
20   it                               active    Et0/1

switch2#show vlan b

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/3, Et1/0, Et1/1, Et1/2
                                                Et1/3, Et2/0, Et2/1, Et2/2
                                                Et2/3, Et3/0, Et3/1, Et3/2
                                                Et3/3
10   hr                               active    Et0/1
20   it                               active    Et0/2

到此为止,证明了:相同vlan即便在不同的交换机下,也可以相互通信;不同vlan即便是在同一个交换机下也不能通信。

查看哪个接口是trunk

IOU2#show interfaces trunk

Port        Mode             Encapsulation  Status        Native vlan
Et0/2       on               802.1q         trunking      1

Port        Vlans allowed on trunk
Et0/2       1-4094

Port        Vlans allowed and active in management domain
Et0/2       1,10,20

Port        Vlans in spanning tree forwarding state and not pruned
Et0/2       1,10,20

switch2#show interfaces trunk

Port        Mode             Encapsulation  Status        Native vlan
Et0/0       on               802.1q         trunking      1

Port        Vlans allowed on trunk
Et0/0       1-4094

Port        Vlans allowed and active in management domain
Et0/0       1,10,20

Port        Vlans in spanning tree forwarding state and not pruned
Et0/0       1,10,20
  • Encapsulation:802.1q:使用的协议

  • Native vlan:1.

    这个1是vlan号。

    trunk接口把过来的数据打上标记,对端的trunk接口读这个标记。【Native vlan】指定的vlan号,经过trunk接口时,trunk接口不给它打标记。对端的trunk接口读标记时,发现没有标记,则把这个数据包给,自己这段的trunk接口里【Native vlan】定义的vlan里的主机。

    对端的2个trunk接口的【Native vlan】一定要一样!!!

设置【Native vlan】:switchport trunk native vlan vlan号

IOU2(config)#int e0/2
IOU2(config-if)#swi
IOU2(config-if)#switchport tr
IOU2(config-if)#switchport trunk na
IOU2(config-if)#switchport trunk native v
IOU2(config-if)#switchport trunk native vlan 2

IOU2#show interfaces trunk

Port        Mode             Encapsulation  Status        Native vlan
Et0/2       on               802.1q         trunking      2

实验【Native vlan】:

添加pc5和pc6,pc5连switch1的接口e0/3,把e0/3的vlan设置从vlan 2;pc6连switch2的接口e0/3,使用接口e0/3默认的vlan号,就是vlan 1.

把pc5和pc6的ip设置到同一网段。pc5和pc6虽然在不同的vlan,但居然可以ping通了。原因就是对端的2个trunk接口的【Native vlan】不一样导致的。switch1的【Native vlan】是vlan2,所以vlan2下的主机通过此trunk时,没有被打上标记,传递到对端的trunk后,对端的trunk接口发现没有标记,则直接传递个自己的【Native vlan】,是vlan1,所以导致了不同vlan也能通信的现象。

IOU2(config)#int e0/3
IOU2(config-if)#
*Jan 16 18:27:37.386: %CDP-4-NATIVE_VLAN_MISMATCH: Native VLAN mismatch discovered on Ethernet0/2 (2), with switch2 Ethernet0/0 (1).
IOU2(config-if)#sw mo acc
IOU2(config-if)#sw acc v
IOU2(config-if)#sw acc vlan 2
% Access VLAN does not exist. Creating vlan 2

PC5> ip 192.168.3.10 255.255.255.0
Checking for duplicate address...
PC1 : 192.168.3.10 255.255.255.0

PC6> ip 192.168.3.20 255.255.255.0
Checking for duplicate address...
PC1 : 192.168.3.20 255.255.255.0

PC5> ping 192.168.3.20
84 bytes from 192.168.3.20 icmp_seq=1 ttl=64 time=0.783 ms
84 bytes from 192.168.3.20 icmp_seq=2 ttl=64 time=0.985 ms
84 bytes from 192.168.3.20 icmp_seq=3 ttl=64 time=0.777 ms
84 bytes from 192.168.3.20 icmp_seq=4 ttl=64 time=2.228 ms
84 bytes from 192.168.3.20 icmp_seq=5 ttl=64 time=1.446 ms

PC6> ping 192.168.3.10
84 bytes from 192.168.3.10 icmp_seq=1 ttl=64 time=0.950 ms
84 bytes from 192.168.3.10 icmp_seq=2 ttl=64 time=1.014 ms
84 bytes from 192.168.3.10 icmp_seq=3 ttl=64 time=0.703 ms
84 bytes from 192.168.3.10 icmp_seq=4 ttl=64 time=0.498 ms
84 bytes from 192.168.3.10 icmp_seq=5 ttl=64 time=2.023 ms

实验加个路由器R1,实现用单臂路由(vlan间路由),连通vlan10和vlan20下的pc

实现思路:把vlan10和vlan20下的主机里的网关,都指定到路由器R1的接口e0/0下,网关在同一个接口下,那么2个vlan的跨网段请求都发送到了同一个接口,那么路由器就能够知道怎么转发请求了。

那就出现个问题,在一个接口下怎么配置2个网关ip呢?

先启用接口e0/0

R1(config)#int e0/0
R1(config-if)#no sh

在接口e0/0下建立2个子接口e0/0.1和e0/0.2。

子接口可以建立多少个?ip地址有多少个就能创建多少个。所以2个网关的地址问题解决了。

那么子接口如何知道,过来的数据是来自哪个vlan呢?

尝试在e0/0.1接口下,添加网关ip add 192.168.1.1 255.255.255.0,但提示下面的错误。

错误的意思是要提供:用什么协议打标记和解标记,和vlan号。

R1(config)#int e0/0.1
R1(config-subif)#ip add 192.168.1.1 255.255.255.0

% Configuring IP routing on a LAN subinterface is only allowed if that
subinterface is already configured as part of an IEEE 802.10, IEEE 802.1Q,
or ISL vLAN.

提供vlan号,就是告诉这个子接口,来自这个vlan的数据,归你管了。

提供dot1Q,就是告诉这个子接口,用哪个协议去解包,得到vlan号。

给子接口指定了vlan号和协议后,再添加网关就ok了。

R1(config-subif)#encapsulation dot1Q 10
R1(config-subif)#ip add 192.168.1.1 255.255.255.0

接口e0/0.2同样配置

R1(config)#int e0/0.2
R1(config-subif)#encapsulation dot1Q 20
R1(config-subif)#ip add 192.168.2.1 255.255.255.0

添加pc1-4的网关:

PC1> ip 192.168.1.10 255.255.255.0 192.168.1.1
Checking for duplicate address...
PC1 : 192.168.1.10 255.255.255.0 gateway 192.168.1.1

PC2> ip 192.168.2.10 255.255.255.0 192.168.2.1
Checking for duplicate address...
PC2 : 192.168.2.10 255.255.255.0 gateway 192.168.2.1

PC3> ip 192.168.1.20 255.255.255.0 192.168.1.1
Checking for duplicate address...
PC3 : 192.168.1.20 255.255.255.0 gateway 192.168.1.1

PC4> ip 192.168.2.20 255.255.255.0 192.168.2.1
Checking for duplicate address...
PC4 : 192.168.2.20 255.255.255.0 gateway 192.168.2.1

到此为止,vlan10和vlan20能通信了吗?不能?

由于路由器R1的e0/0配置了解包的协议和vlan号,但是交换机switch1的接口e0/3还不是trunk接口,那么从switch1的接口e0/3出来的数据包里,就没有vlan号,那么路由器R1就无法得到vlan号,所以就丢弃过来的数据了。

设置switch1的接口e0/3为trunk接口

IOU2(config)#int e0/3
IOU2(config-if)#switchport trunk encapsulation dot1q
IOU2(config-if)#switchport mo tr

现在vlan10和vlan10下的pc之间就可以互相通信了。

# c/c++ 学习互助QQ群:877684253 ![](https://img2018.cnblogs.com/blog/1414315/201811/1414315-20181106214320230-961379709.jpg) # 本人微信:xiaoshitou5854
posted @ 2020-01-17 13:24  小石王  阅读(2159)  评论(0编辑  收藏  举报