zoukankan      html  css  js  c++  java
  • 浅谈vlan中的pvid的作用

    vlan中的pvid其实就是处理标签的一种方式,在端口为access模式的时候pvid=access端口本身的vlan,也无法单独配置

    在端口为trunk的时候pvid是可以根据需求配置的,默认的pvid=vlan1,而在trunk端口模式中,pvid影响的是trunk端口双向的数据帧。在接收方向上trunk端口是对于没有标签的数据帧打上配置的pvid号(vlan号),至于有vlan标签的数据帧不归pvid管,归port trunk-allow vlan x管。在发送方向上trunk端口是对于vlan号和配置的pvid号相同的数据帧进行untag去掉vlan标签的操作(将之变为vlan1的数据帧,也就是没有vlan标签的普通的以太网数据帧)。

    在理解了以上的基础上,进行一个pvid功能的验证试验,topology如下:

    基础配置如下:

    sysname SW1
    #
    vlan batch 10

    interface GigabitEthernet0/0/1
     port link-type trunk
     port trunk allow-pass vlan 10
    #
    interface GigabitEthernet0/0/2
     port link-type access
    #
    interface GigabitEthernet0/0/3
     port link-type access
     port default vlan 10
    #

    ===============================

    sysname SW2
    #
    vlan batch 10

    interface GigabitEthernet0/0/1
     port link-type trunk
     port trunk allow-pass vlan 10
    #
    interface GigabitEthernet0/0/2
     port link-type access
     port default vlan 10
    #

    在PC1上分别ping PC2 PC3

    PC1>ipconfig
    IPv4 address......................: 192.168.1.1
    Subnet mask.......................: 255.255.255.0
    Gateway...........................: 0.0.0.0

    PC1>ping 192.168.1.2

    Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.1: Destination host unreachable
    From 192.168.1.1: Destination host unreachable

    PC1>ping 192.168.1.3

    Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.1: Destination host unreachable
    From 192.168.1.1: Destination host unreachable

    此时PC1无法与PC2 PC3通信,但是PC2和PC3在同一个vlan是可以通信

    PC2>ipconfig
    IPv4 address......................: 192.168.1.2
    Subnet mask.......................: 255.255.255.0
    Gateway...........................: 0.0.0.0

    PC2>ping 192.168.1.1

    Ping 192.168.1.1: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.2: Destination host unreachable
    From 192.168.1.2: Destination host unreachable

    PC2>ping 192.168.1.3

    Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.3: bytes=32 seq=1 ttl=128 time=62 ms

    下面我们以PC3通信为参照,分别修改sw1的pvid=10,sw2的pvid=1不变

    [SW1-GigabitEthernet0/0/1]display this
    #
    interface GigabitEthernet0/0/1
     port link-type trunk
     port trunk pvid vlan 10
     port trunk allow-pass vlan 10
    #

    PC3分别pingPC1和PC2

    PC3>ping 192.168.1.1

    Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.3: Destination host unreachable

    PC3>ping 192.168.1.2

    Ping 192.168.1.1: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.3: Destination host unreachable

    这时候发现都不通了,可以分析一下PC3数据帧转发的过程,首先PC3发送arp给pc1、pc2,arp报文到了sw1后,sw1发现pc3过来的帧是携带vlan10的arp广播,于是只向vlan10内的所有端口发送(包括允许vlan10的trunk口),此时pc1的端口是vlan1,自然无法收到vlan10的arp广播因此不通,而vlan10的arp在经过sw1的trunk时在出去的方向被pvid=10的trunk端口untag掉了vlan10变成vlan1的普通以太网数据帧传到了sw2,sw2发现是vlan1的帧,就只向vlan1内的所有端口发送,而pc3是属于vlan10的自然无法收到vlan1的数据帧。

    而后我们保持sw1的pvid=10,将sw2修改pvid=10,再看PC3的通信状况

    [SW2-GigabitEthernet0/0/1]disp th
    #
    interface GigabitEthernet0/0/1
     port link-type trunk
     port trunk pvid vlan 10
     port trunk allow-pass vlan 10
    #

    PC3>ping 192.168.1.1

    Ping 192.168.1.1: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.3: Destination host unreachable

    PC3>ping 192.168.1.2

    Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.2: bytes=32 seq=1 ttl=128 time=62 ms

    可以看到pc3能够ping通pc2,分析如下,pc3的vlan10的arp经过sw1的pvid10的untag变成vlan1转发给sw2后,sw2发现入向的arp是个vlan1的普通帧,而自己trunk的pvid=10,于是给这个没有tag的帧打上vlan10的标签,在广播到所有vlan10的端口中,这时身在vlan10中的pc2就可以收到了,pc2回包也是将自己的vlan10的arp应答消息发给sw2,sw2在出方向(由于pvid=10)将pc2发来的vlan10的帧untag变成vlan1的帧发给sw1,sw1发现入向的帧没有tag(自己的pvid又=10)于是给没有tag的帧打上vlan10的tag,并在vlan10内的所有端口下查找pc3的mac地址,发现pc3的mac地址在G0/0/3端口下,于是将帧通过G0/0/3口发给pc3,这样pc3就完成了一次和pc2的双向通信

    =======================================================================

    现在,我们将sw1的pvid=1,sw2的pvid=10看看,用pc3都无法ping通pc1和pc2,与之前的pc无法通信原理是一样的,但是不在同一个vlan的pc1却能和pc2通信,这里我们来看一下pc1和pc3的通信过程

    [SW1-GigabitEthernet0/0/1]display this 
    #
    interface GigabitEthernet0/0/1
     port link-type trunk
     port trunk allow-pass vlan 10
    #

    [SW2-GigabitEthernet0/0/1]disp th
    #
    interface GigabitEthernet0/0/1
     port link-type trunk
     port trunk pvid vlan 10
     port trunk allow-pass vlan 10
    #

    PC1>ping 192.168.1.3

    Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.1: Destination host unreachable

    PC1>ping 192.168.1.2

    Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
    From 192.168.1.2: bytes=32 seq=1 ttl=128 time=62 ms

    pc1发送vlan1的arp到sw1,sw1广播所有允许vlan1的端口中(包括允许vlan1的trunk中),于是arp到sw2,sw2发现是个没有tag的数据帧(自己的pvid=10)于是打上vlan10的标签,广播到vlan10的所有端口中被pc2收到,pc2回帧携带vlan10的帧给sw2,sw2在帧出方向的时候(由于pvid=10)untag掉vlan10的标签,变成vlan1的普通帧转发到sw1,sw1发现是vlan1的普通帧(自己的pvid=1)于是在vlan1的所有端口中查找pc1的mac,发现pc1的mac在g/0/0/2端口下,于是将帧转发给了pc1完成了一次双向的数据帧转发,所以pc1与pc3虽然不在一个vlan但是依然可以通信。

    到这里都能理解的话,对于pvid就已经完全掌握了。总结一句话,pvid只在trunk中有用,并且在入向只管没有tag的帧,在出向只管与pvid相同vlan-id的帧。

  • 相关阅读:
    基于深度学习的目标检测
    Redmine发送邮件
    用7次比较完成5个元素的排序
    在GEM5模拟器运行时,对Kill命令的使用
    GDB中的backtrace命令
    [译]如何定义python源文件的文件编码
    QEMU ELF_LOAER分析[基于MIPS]
    if语句的数据驱动优化(Java版)
    解决idea中Activiti的bpmn编辑器的中文乱码问题
    最简易的PHP Storm调试模式开启方式
  • 原文地址:https://www.cnblogs.com/liujunjun/p/14067458.html
Copyright © 2011-2022 走看看