带你走进网络世界交换篇——交换机接口的故事
VLAN基本概念

●一个VLAN中所有设备都是在同一广播域内,不同的VLAN为不同的广播域
●VLAN之间互相隔离,广播不能跨越VLAN传播,因此不同VLAN之间的设备一般无法互访,不同VLAN间需通过三层设备实现相互通信
●一个VLAN一般为一个逻辑子网,由被配置为此VLAN成员的设备组成
●VLAN中成员多基于交换机的端口分配,划分VLAN就是对交换机的接口划分
●VLAN工作于OSI参考模型的第二层
●VLAN是二层交换机的一个非常根本的工作机制
VLAN基本通信原理
为了提高处理效率,交换机内部的数据帧一律都带有VLAN Tag ,以统一方式处理。当一个数据帧进入交换机端口时如果没有带VLAN Tag ,且该端口上配置了PVID( Port VLAN ID )那么该数据帧就会被标记上端口的PVID.
如果数据帧已经带有VLAN Tag ,那么,即使端口已经配置了PVID ,交换机不会再给数据帧标记VLAN Tag.
PVID是“端口缺省VLANID"的意思,即一个端口缺省属于的VLAN,
由于端口类型不同,交换机对帧的处理过程也不同。下面根据不同的端口类型分别介绍。
01
Access 端口处理帧的过程
Access端口处理VLAN帧的过程如下:
1) 收到一个二层帧。
2)判断帧是否有 VLAN Tag.
没有Tag,则标记上Access端口的PVID ,进行下一步处理。
有Tag ,则比较帧的VLAN Tag和端口的PVID ,两者一致则进行下一步处理;否则丢弃帧。
3)二层交换机根据帧的目的 MAC地址和VLAN ID查找VLAN配置信息,决定从哪个端口把帧发送出去。
4)交换机根据查到的出接口发送数据帧。
当数据帧从 Access端口发出时,交换机先剥离帧的VLAN Tag ,然后再发送出去。
当数据帧从 Trunk端口发出时,直接发送帧。
当数据帧从Hybrd 端口发出时交换机判断VLAN在本端口的属性是Untag还是Tag.如果是Untag ,先剥离帧的VLAN Tag ,再发送;如果是Tag ,直接发送帧。
02
Trunk端口处理帧的过程
Trunk端口处理VLAN帧的过程如下:
1) 收到一个二层帧。
2)判断帧是否有 VLAN Tag.
没有Tag ,则标记上Trunk端口的PVID ,进行下一步处理。
有Tag,则判断该Trunk端口是否允许该VLAN帧进入。允许则进行下一步处理,否则丢弃帧。
3)二层交换机根据帧的目的 MAC地址和VLAN ID ,查找VLAN配置信息,决定从哪个端口把帧发送出去。
4)交换机根据查到的出接口发送数据帧。
当数据帧从 Access端口发出时,交换机先剥离帧的VLAN Tag ,然后再发送出去。
当数据帧从Trunk端口发出时,直接发送帧。
当数据帧从Hybrid端口发出时,交换机判断VLAN在本端口的属性是Untag还是Tag.如果是Untag,先剥离帧的VLAN Tag ,再发送;如果是Tag ,直接发送帧。
Protected port

Protected port虽然同处一个VLAN ,但是彼此无法互相通信
Protected pot只能与unprotected port (默认)互相通信
Protected port特性无法跨交换机实现
配置非常简单:
Switch(onfig-f)# switchport protected
TRUNK
01
Trunk概述

●当一条链路,需要承载多VLAN信息的时候,需使用trunk来实现
●Trunk 两端的交换机需采用相同的干道协议
●一般见于交换机之间或交换机与路由器、服务器之
02
封装协议

1. baby giant frame大于标准的MTU1500字节,但是小于2000字节
对于采用ISL封装的, MTU=1548 (下文有解释)
对于Dot1Q
MTU=1522
2. Vlan 范围和映射
ISL支持的vlan编号是1-1005 (默认允许正常的), 802.1q是1-4094 (默认允许所有正常和扩展的)
所以当穿过802.1q和ISL的干道的时候就需要映射。
(1) 单台交换机上最多允许8个802.1q到ISL vlan的映射
(2)只能映射到ethernet的vlan
(3)该被映射的ethernet vlan将被阻塞
(4)映射仅在本地有效
3.链路聚集模式
●trunk
永久链路聚集模式,强制trunk,发送DTP帧
●Nonegotiate
永久链路聚集模式,必须手动将邻居配为干道口,不发送DTP帧。一般用于对端设备
不支持DTP的情况
●Desirable
主动尝试将链路成为干道(默认模式)发送DTP帧如果邻接接口为trunk. desirable.或AUTO ,那么此接口成为Trunk.
●Auto
接口愿意成为trunk ,如果邻接接口被设置为trunk 或desirable ,那么接口就成为trunk
●Access
永久的nontrunking模式,并且与对端接口协商,使其成为nontrunking链路

03
ISL

●CISCO 私有协议
●支持 PVST
●在原始的数据帧基础 上封装上ISL头及新的FCS
●没有修改原始的数据帧 ,因此处理效率比802.1Q高
●VLAN字段, 15个比特目前用了10个,那么最多支持2的10次方=1024个VLAN
●“原始以太网帧”最大是1518个字节,1500的IP MTU加上源目的MAC地址共12类型字段2个, CRC4,再加上30字节的ISL封装,就是1548字节了
上图中几个字段( ISL头)的描述如下:
●DA
40bit的组播地址用于标示这个FRAME是ISL的
●TYPE
标示这个帧是什么类型的,如以太、令牌环等
●SA
发送帧的原交换机MAC
●AAAAO3
SNAP (固定值)
●VLAN
15个比特目前用了10个,那么最多支持2的10次方=1024个VLAN
●INDEX
这个帧的对端交换机来源端口
所以ISL帧最大1548bytes ( 1518+26+4 )
04
Dot1q
1.帧格式

802.1Q Tag包含4个字段,其含义如下:
●EtherType
长度为2字节,表示帧类型。取值为0x8100时表示802.1Q Tag帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。
●PRI
Priority,长度为3比特,表示帧的优先级,取值范围为0~7 ,值越大优先级越高。
用于当交换机阻塞时,优先发送优先级高的数据包。
●CFI
Canonical Format Indicator,长度为1比特,表示MAC地址是否是经典格式。
CFI为0说明是经典格式,
CFI为1表示为非经典格式。用于区分以太网帧、FDDI ( Fiber Distributed Digital Interface )帧和令牌环网帧。
在以太网中, CFI的值为0.
●VID
VLAN ID长度为12比特表示该帧所属的VLAN,在VRP中可配置的VLAN ID取值范围为1 ~ 4094.
2.优缺点
缺点是破坏了原始以太帧以及重新计算FCS , ISL是直接封装头和尾。DOT1q公用,ISL私有
802.1Q支持4096个VLAN
最大帧: 1518+4=1522
3. Native Vlan
在802.1q的native vlan是不打标签的使用Dot1q的交换机把所有未被标记的frame转发到native vlan中,而ISL会对所有的数据帧,包括native vlan进行封装,因此如果收到没有封装的数据帧它会丢弃(ISL没有native VLAN的概念
)
●Native VLAN所属的帧在经过trunk时不打标签
●Native VLAN在Trunk两端必须匹配,否则会出现VLAN流量互串
●默认的native vlan是vlan 1
●建议将一个生僻的VLAN配置为Native vlan

我们看上面这个图,两台交换机trunk两端native Man 不样,会有什么问题?首先两端的vlan2通信肯定是没有问题的,但是vlan3和vlan4通信就有问题了, 左边vlan3的用户发出来的数据帧从左交换机出去上trunk ,是不打标签的,但是这些数据帧到了右交换机,它会认为这些数据帧是属于vlan4的,这就出现问题了。
Switch(config-if)# switchport trunk native vlan ?
在trunk上设置native vlan
Switch(confíg)# vlan dot1q tag native
上述命令将对 native vlan也打标签
4.vlan范围

05
DTP
●Trunk 可以手工静态配置或者通过DTP进行协商
●DTP使得交换机之间能够进行trunk协商

06
Trunk配置
Switch(config-if)# switchport mode access
●将接口设置为access模式
Switch(config-if)# switchport mode encapsulation {dot1q | ISL}
●如果接口为trunk ,设置干道协议类型
Switch(config-if)# switchport mode dynamic {auto | desirable}
●将接口设置为DTP动态协商,可选auto或desirable
Switch(config-if)# switchport nonegotiate
●将接口设置为nonegotiate ,不发送DTP帧,如果配置为非协商,那么就必须手工配置接口模式,为access或trunk



上图中,两端PC都属于vlan10d的话,如果SW1的fa0/23口将vlan 10remove掉,那么PC肯定就无法通信了。
07
MTU问题
MTU就是最大传输单元,不同的系统对于MTU的设定和理解是不同的。
CISCO IOS上, interface x接口模式下:
●MTU ?
指的是二层的MTU ,这是接口MTU ,指的是不包含二层帧头的、Payload 的MTU ,这个MTU值一般是不能手工修改的,默认是1500字节。如此-来CISCO路由器支持的二层数据帧最大值就是1500的payload加上二层帧头及二层FCS :目的mac6字节+源mac6字节+类型字段2字节+FCS4字节,所以总的就是1518字节。
●Ip mtu ?指的是三层的 MTU这个值可以手工修改,但是最大值必须小于接口的二层MTU值也就是1500。
这个MTU指的是三层IP包的总大小,如果接口发出的包大于这个接口的ip mtu ,那么这个IP包将被分片

做个测试:.上图中,R1的fa0/0口ipmtu为1500,
我们去ping 1.1.1.2 repeat 1 size 1500 ,我们会发现R1直接将一个ICMP包发出去了,没有分片,报文如下:

从报文中我们可以看到,这个IP包的大小为1500字节。
其中IP报头20字节,ICMP报头8字节,ICMPdata荷载1472字节,刚好1500字节。
因此在CISCO IOS设备上, ping后面跟着的size指的就是发出去的IP包整个的大小。
而在windows PC的cmd下, ping后跟的包大小就是ICMP data 大小, ping -1 1472 ,产生的包就是1500字节
还是上面的例子,如果我们在R1上,ping 1.1.1.2 repeat 1 size 1501 ,这个时候, R1由于产生的这个IP包大于mtu 1500 ,因此会被分片,然后在R2上,这两个分片被重组。

为了方便广大网络爱好学习者一起学(聚)习(众)交(搞)流(基),特开设思科干货交流群,里面已经上传大量学习资料,欢迎广大网络工程师进群学习!
扫我入群👇
