poetry

浮云一别后,流水十年间。

交换技术主要用于构建局域网,主要实现的局域网内的通信和隔离。交换机即插即用,因为所有的接口默认分配在vlan 1 中,且vlan 1为native vlan,不需要进行封装。为了实现局域网的隔离,可以将不同的接口或者MAC地址划分到不同的vlan,同一个vlan下的地址可以相互通信。

交换机主要存在的问题和解决方法:

  1. 广播风暴,链路防环:使用Spanning-Tree或者快速生成树(MSTP、RSTP等)以及一系列生成树补丁来解决
  2. Vlan同步:交换机不能转发自己没有的vlan信息,比如一个只有vlan 10,20,30的交换机不能转发和接受vlan40的报文,有两种解决方式:(1)手动配置使之相同 (2)VTP vlan同步协议
  3. 带宽受限:因为spanning-tree的缘故,两个交换机之间只能存在一条链路,因此带宽受限。可以使用二层或三层链路捆绑,提高网络带宽
  4. 网关单点故障:因为只有一个默认网关,所以当down了之后,终端就无法与外界通信。可以使用网关冗余协议,如(FHRP,VRRP,GLBP)做高可用。

讲到交换机不得不讲MAC地址,MAC地址和交换机同属于OSI七层的第二层——数据链路层。MAC地址一共有48位,前24位厂家分配,类似于手机的前几位网络识别号。MAC地址有如下字段:

http://q5q3e2ctx.bkt.clouddn.com/switch_1.webp

其中:

  • 类型:用于标识上一层使用的协议
  • IP数据报长度:46 = 64 - 6 - 6 - 2 - 4
  • FCS:帧检验序列,使用CRC循环冗余校验

配置VLAN

ps:vlan的隔离包括广播,即使是发ARP,也只会发在自己的vlan。

1
2
3
4
5
6
7
8
9
10
11
12
# SW7 创建vlan
vlan 10,20

# SW7 将接口加入到vlan,e0/1,2 e1/0,1 都是这样配
int e0/1
switchport mode access # 将接口模式改为access
switchport access vlan 10 # 将接口加入到vlan 10 中

# SW7 串口配置,即和SW8连接的e0/3接口
int e0/3
switchport trunk encapsulation dot1q # 一律使用802.1Q封装
switchport mode trunk # 改变接口的模式为trunk

交换机接口的三种模式:Vlan的链路类型可以分为接入链路和干道链路。

Access:只能属于1个VLAN,且该端口不打tag,一般用于连接计算机端口; 

Trunk:可以允许多个VLAN通过,且该端口都是打tag的,一般用于交换机之间的连接;  

Hybrid:可以允许多个VLAN通过,至于该端口在vlan中是否打tag由用户根据具体情况而定,可以用于交换机之间的连接也可以用于交换机和用户计算机之间的连接。  

Trunk和Hybrid的区别主要是,hybrid端口可以允许多个vlan的报文不打标签,而 trunk端口只允许缺省vlan的报文不打标签,同一个交换机上不能hybrid和trunk并存。

Trunk也可以由交换机自行协商,但一般都是网络管理员手动配置。

VTP

VTP用于Vlan同步,分为三种模式:服务端(server)、客户端(client)、透传端(transparent),客户端只可以查看不可以修改,服务端和透传端既可以查看又可以修改。

VTP只会同步vlan和vlan的名字,vlan的接口信息不会被同步走。

配置VTP

1
2
3
4
5
6
7
8
9
10
11
12
# 配置服务端
vlan 10-20 # 创建vlan
vtp domain cisco # 更改域名, 可以改可以不改,用于让一个局域网有许多vtp
vtp mode server # 将本机vtp的模式改为server

# 配置透传端
vtp domain cisco
vtp mode transparent

# 配置客户端
vtp domain cisco
vtp mode client

其他命令

1
2
Switch#sh vlan brief 			# 查看本机vlan摘要
Switch#sh vtp ? # 查看vtp相关

VTP修剪:一种优化vlan的方法

A ----> B -----> C -----D(I'm a PC)
1
vtp pruning			# 开启vtp修剪

比如:A、B、C是交换机,D是PC。

A的vlan:10,20,30,40

B的vlan:10,20

C的vlan:10,20

一旦开启vtp修剪,则C会告诉B:”我这没有vlan30,40,以后不要给我发vlan30,40的广播或者其他消息了”,B收到后会告诉A:”我这没有vlan30 ,40,以后不要发这个vlan的消息了”。A就会把这接口上的这两个vlan剪掉。

生成树

生成树(Spanning-tree)是一种工作在OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路.用于确保以太网中无环路的逻辑拓扑结构.从而避免了广播风暴,大量占用交换机的资源。

生成树使用封锁接口的方式避免环路,被封锁的接口有如下判定方式:

  1. 每个广播域选择一个根桥(注意是广播域,不是局域网)Root Bridge
  2. 每个非根桥选择一个根端口 Root Port
  3. 每个段选择一个指定端口 Designated Port
  4. 选择一个非指定端口,以上所有选择策略,都是以越小越优为准则

根桥的制定:谁的MAC地址最小,谁就是根桥

根端口的指定:谁离根桥进,谁就是根端口

指定端口的指定:

  1. 离根桥近
  2. COST值小
  3. 发送者的端口ID小,端口ID即交换机的接口

非指定端口将被封锁。

全网一开始是如何知道谁是根桥?

全网交换机开机,一开始,每台交换机都认为自己是根桥ID向外发送BPDU报文,如果在收到的BPDU报文中,发现了比自己还小的MAC地址,就把根桥ID改为那一台交换机的ID。经过一段时间,就可以确定全网的唯一的根桥ID。(可以抢占)

BPDU报文格式:

字节 字段 描述
2 协议 代表上层协议(BPDU),该值总为0
1 版本 (802.1D的总为0)
1 TYPE “配置BPDU” 为0,“TCN BPDU”为80,TCN,topology change notification,拓扑改变时发送的报文,自下而上。
1 标志 LSB最低有效位表示TC标志,MSB最高的有效位表示TCA标志
8 根桥ID 根网桥的桥ID
4 路径开销 到达根桥的STP cost,如果是根桥则写0,带宽越大,开销越低
8 网桥ID BPDU发送桥的ID
2 端口ID BPDU发送网桥的端口ID(优先级+端口号),优先级默认128
2 消息寿命Message age 从根网桥发出BPDU之后的秒数,每经过一个网桥都减1,本质上是到达根桥的跳数
2 最大寿命Max age 当一段时间未收到任何BPDU,生存期达到MAX age,网桥认为该端口连接链路发生故障,默认20S
2 HELLO时间 根网桥连续发送BPDU之间的时间间隔,默认2S
2 转发延迟 在监听和学习状态停留的时间间隔,默认15S

关于生成树,要配置的内容很少,都是现象,因为一切默认都已经配置好了,除非是改变生成树的种类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
show spanning-tree		#查看生成树的状态
spanning-tree vlan 1 priority 4096 #修改VLAN中spanning-tree的优先级。必须是4096的倍数
VLAN0001 #VLAN 1
Spanning tree enabled protocol ieee
Root ID Priority 32769 #32769=32768+VLAN.Nbr
Address aabb.cc00.0100 #MAC地址
Cost 100 #这个VLAN的COST值
Port 2 (Ethernet0/1) #RootID所用的端口
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
#Hello报文2s,最大寿命20s,转发延迟15s

Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) #系统扩展ID就是VLAN 的序号
Address aabb.cc00.0300
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec #网络拓扑变化时,会变成15s,快速刷新mac表

Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0 Desg FWD 100 128.1 Shr
Et0/1 Root FWD 100 128.2 Shr
Et0/2 Altn BLK 2 128.3 Shr
Et0/3 Desg FWD 100 128.4 Shr
接口 角色 端口状态 Cost值 优先级.序号 类型

生成树中的端口状态

状态 说明
Disabled 不收发任何报文
Blocking 不接受也不转发帧,接受但不发送BPDU,不学习MAC地址
Listening 不接受也不转发帧,接受并且发送BPDU,不学习MAC地址
Learning 不接受也不转发帧,接受并且发送BPDU,学习MAC地址
Forwarding 接收并转发帧,接受并且发送BPDU,学习MAC地址

实验现象

image-20200209154918120

1
2
3
4
5
6
7
8
9
R6 ping R7

原本sw4的e0/3没有连接sw1的e0/3,现在将他们连接起来。此时,链路会有30s的不通,这是spanning-tree协议工作:
原本的路由是R6 -- SW4 -- SW3 -- SW2 --SW1 --R7
现在SW4和SW1连通,造成了SW3的e0/2接口发生了阻断BLK。
路由路线变为:R6 -- SW4 -- SW1 -- R7
SW4的e0/3接口从LIS -- LRN -- FWD需要30s的时间,所以30sping不通。

然后将sw4的e0/3 shutdown ,SW3发现没有BPDU出现了,进入Lost BPDU Max age=20s,20sBPDU不出现,然后进入Listening(15s)和Learning(15s),一共恢复需要30s。

生成树拓扑变化

也叫STP 拓扑变化。

image-20200209091346870

Topology Change Notification Bridge Protocol Data Unit = TCN BPDU

网络拓扑变更报文 网桥协议单元,即当下层交换机拓扑发生变化时,次级交换机向Root Bridge传递TCN BPDU报文,即BPDU字段中的Type改为80。沿着根端口就可以最终把报文传送给Root,Root接收到后,发送TC标志设置,内容为空,目的是为了泛洪。

image-20200209091358909

35s = age老化时间(20s) + Learning(15s)[生成树的计算时间]

Portfast:快速端口

一个接口从开启到能正常运行会经历三个阶段,需要一定的时间。这是为了防止环路。如果不需要防环,可以使用Portfast来快速启动,这样已启动就变成FWD。

配置命令

1
spanning-tree portfast

PVST+:Peer Vlan Spanning-Tree Plus

每个VLAN都有一个生成树,Cisco私有。

Cisco Catalyst交换机的MAC地址池最多可以容纳1024个地址,交换机的型号决定了可用MAC的数目,并不是所有catalyst交换机都能支持到这么多个MAC

这些MAC地址作为VLAN生成树中的网桥ID的MAC地址部分,不同交换机型号支持不同的可用MAC地址数目,交换机依照次序分配MAC地址

show run int | include bia可以看到所有的MAC,其中第一个MAC将被生成树使用,也就是CPU的MAC,接下去就是每个以太网接口的MAC

我们知道交换机能够支持的VLAN数据是很庞大的,如果开启PVST+,每个VLAN一棵生成树,而每棵生成树都要有一个独立的标识,都需要耗费MAC的话,那么MAC地址池肯定是无法承受的

因此需要用到MAC地址缩减方案,这也是为什么优先级必须是4096倍数的原因。

image-20200227162938052
1
2
3
4
5
show spanning-tree

Priority 4097 (priority 4096 sys-id-ext 1)
#因为系统扩展ID是1,所以优先级要+1
#系统扩展ID=1是因为VLAN是1

实验:

  • VLAN 10,20 SW1为Root
  • VLAN 30,40 SW2为Root

image-20200209092821283

1
2
3
4
show spanning-tree										#查看生成树的状态
spanning-tree vlan 1 priority 4096 #修改PVST+的优先级
spanning-tree vlan 10,20 root primary #将vlan10,20的优先级比当前环境下最小的优先级低两个档次
spanning-tree vlan 10,20 root primary #将vlan10,20的优先级比当前环境下最小的优先级低一个档次

快速生成树

由于生成树的速度过慢,一般会采用快速生成树。数据中心不会使用生成树,而是大二层的结构,但园区网还是会用到生成树。下面介绍两种快速生成树,一种是Cisco私有的RSTP,一种是公开的MSTP。

RSTP:Rapid Spanning Tree Protocol

特点:

  • 802.1W
  • 端口角色:根端口、指定端口、替代端口、备份端口
  • 端口状态:转发、丢弃、学习
  • 在Cisco Catalyst交换机上,PVST+是基于RSTP实现的perVLAN版本

配置:

1
spanning-tree mode rapid-pvst			#BPDU的速度又多了快这个生成树就有多快
image-20200209162727580

MSTP:Multiple Spanning Tree Protocol

集成了RSTP的优点,每实例一个生成树,PVSTP是每个vlan一颗生成树。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
spanning-tree mst configuration
instance 1 vlan 10,20 # 创建实例,并把vlan10,20归入实例1
instance 2 vlan 30,40
show pending

#配置优先级,系统扩展id变为实力号Instance.Nbr
SW1
spanning-tree mst 1 root primary
spanning-tree mst 2 root secondary

SW2
spanning-tree mst 1 root secondary
spanning-tree mst 2 root primary

生成树补丁

Spanning-tree Patch,主要有六种生成树补丁,针对解决生成树反应慢、出差错、及故障检测。

1、BPDUGuard

该接口在手都BPDU报文后,会立即切换到err-disable状态,把接口down了,常搭配portfast特性在接口上一起使用,用于连接主机,可在接口模式上激活,也可在全局模式上配置,两者有所不同。

1
2
3
spanning-tree bpduguard enable 							# 接口
spanning-tree portfast bpduguard default # 全局
show err recov # 查看状态

2、BPDUFilter

一旦收到BPDU,就把接口上的Portfast删除。相当于可以智能判断是PC还是Switch。

1
2
spanning-tree portfast bpdufilter default 				# 全局
spanning-tree bpdufilter enable # 接口

3、UplinkFast

当唯一的根端口Down,立刻切换到转发状态 ,跳过了LIS和LER的30s延时,但还有20s的max age 。所有配置了Uplink的交换机,都会把自己的优先级升高、COST值增加3000,防止自己成为ROOT。

1
spanning-tree  uplinkfast

4、BackboneFast

image-20200209185752441

在部署了Backbone Fast后,SW3一旦收到SW2发送来的次优BPDU,会立即进行一系列的步骤以重新计算根端口,SW3会从跟端向根桥发送RLQ请求

Root SW1收到RLQ请求,立刻以RLQ响应进行恢复,以告知自己仍然存活

SW3立刻老化掉存储在Fae0/3上的BPDU,端口Fa0/3进入Listening状态开始发送BPDU

SW2从SW3收到BPDU,经过计算得出自己的Fa0/2为根端口

相当于去掉了20s BLK状态

1
spanning-tree backbonefast

5、RootGuard

image-20200209185915776

只要Service-Provider Network端收到其他地方发来的更优质的BPDU,就将那个区域置为inconsistent。注意inconsistent跟err-disable的区别是,err-disable会disable整个接口,而inconsistentport是针对特定的vlan的。

1
2
3
只会屏蔽当前VLAN(发给我更优的BPDU)
spanning-tree guard root # 接口上配置root防护,这个端口就不可以成为根段偶
show span inconsistentport # 查看接口

6、LoopGuard

image-20200209191229933
1
spanning-tree guard loop 	#接口上配置loop防护,这个端口就可以检测单向通行故障

单臂路由

单臂路由,路由器只有一条线连接,是三层交换机的替代品。其主要缺点就是三层交换机的优点:

  1. 故障多,路由器的故障, 交换机的故障,路由器到交换机只有一条链路,单点故障
  2. 带宽有限,如果是三层交换机,则三层交换机中的路由器和交换机传输速率几乎无限

`

image-20200209192447894

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
R1
int e0/0
no sh
int e0/0.10
encapsulation dot1Q 10
ip add 192.168.10.254 255.255.255.0
int e0/0.20
encapsulation dot1Q 20
ip add 192.168.20.254 255.255.255.0
end
sh int e0/0.10

#sw
int e0/1
sw tr en do
sw mo tr
end
#交换机还要反应一会,从LIS-LRN-FWD

此时,R2 Ping R3

三层交换

三层交换就相当于二层交换加了一台路由器在上面,可以实现更加灵活的网络流量路由管控。

image-20200209194011387

现在R2处于vlan10,R3处于vlan20,想要R2 ping通R3 ,在SW上进行配置:

1、 配置接口 vlan 10,添加属于R2网段额IP地址

2、配置接口 vlan 20, 添加属于R3网段的IP地址

3、在R2和R3上配置默认路由

4、 然后就会发现,R2可以直接ping通R3了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#SW
int vlan 10 #启用SVI接口,Lay3SW的交换机接口是虚拟的
ip add 192.168.10.254 255.255.255.0
no sh
end
sh ip int bri

int vlan 20
ip add 192.168.20.254 255.255.255.0
no sh
end
sh ip int bri

#R,一定要记得配默认路由
ip route 0.0.0.0 255.255.255.255 Ethernet0/0

SVI(switch virtual interface) 交换虚拟接口的Line-State在以下条件满足的情况下,才会是UP

  • SVI对应的VLAN必须在vlan database中存在并且是激活的——vlan存在且激活
  • vlan interface存在并且不能是down状态——路由器接口up
  • 必须至少有一个二层接口是UP的,而且必须是Spanning-tree的FWD状态——二层交换机接口up

DHCP

  • Dynamic Host Configuration Protocal
  • 基于UDP协议端口67及68
  • bootPC:67(客户端端口号);bootPS:68(服务端端口号)

image-20200210154539047

这四条消息全部都是广播。

配置DHCP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(config-if)# ip dhcp pool cisico
(dhcp-config)# network 192.168.1.0/24
(dhcp-config)# default-router 192.168.1.1 # 默认路由器
(dhcp-config)# dns-server 114.114.114.114 114.114.115.115 # DNS
(dhcp-config)# lease 1 -租约时间1天
(config)# ip dhcp excluded-address 192.168.1.1 # 排除掉我们用的地址

还有一种写法:1~99不分配
ip dhcp excluded-address 192.168.1.1 192.168.1.99


#局域网的其他设备
(config)# ip add dhcp

sh ip dhcp bingding #查看DHCP的IP地址的绑定

#绑定IP地址
ip dhcp pool R1
host 192.168.1.10
client-identifier [client-id]
#如果client_id已被使用,则清楚
clear ip dhcp bind *

image-20200210160941108

1
2
3
4
5
#跨越路由器的广播DHCP请求
R4是DHCP服务器,R1想要请求DHCP的广播不能跨越R3,这是可以在R3上进行配置,如果收到请求DHCP的报文,则用单播的形式将消息发送给R4
R3
int e0/1
ip helper-address 192.168.34.4

链路捆绑

如果直接连接两个交换机,则会因为有spanning-tree,造成无论链接多少线,都只会有一根通,从而带宽得不到提高。链路捆绑最大支持8根线绑在一起,这里只介绍二层捆绑,三层捆绑要在接口上no switchport,然后再配置IP地址

EC:需要对端交换机都配

1
2
3
4
5
6
7
8
9
10
11
12
int range e0/1 -2
channel-group 1 mode on

此时再看生成树,就会发现e0/1和e0/2都消失了,只留下了Po1,查看带宽,也变大了。

配置Trunk
int port-channel 1
sw tr en do
sw mo tr

查看channel
sh etherchannel [summary]

修改负载均衡的方式

1
2
3
port-channel load-balance [] # src-dst-mac
#二层不能用IP地址
show etherchannel loadbalance

首跳冗余协议

FHRP:first hop redundancy protocal,用于配置多个网关,配在多个朝内的接口上。常用的FHRP协议有:

  1. HSRP
  2. VRRP
  3. GLBP

HSRP

其中以VRRP最常见,HSRP是Cisco私有的,GLBP有Bug。

image-20200210170625634

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@不让R2和R3建立邻居
R2# passive-interface e0/1
R3# passive-interface e0/1

@配置网关,R4网关指向的地址不存在
R4# ip route 0.0.0.0 0.0.0.0 192.168.1.254

@在R2,R3上配置standby ip 监听一个虚拟的IP
int e0/1
standby 1 ip 192.168.1.254

sh standby brief #查看standby的缩略信息

- standby 会向组播地址发送信息
- R2、R3会发现彼此,通过IP地址选出一个人来做网关

#上图是交换机,实际上交换机不行,需要换成集线器

image-20200210171831381

这个IP地址是规定死的,最后一位表示standby 1

HSRP状态机

State 说明
Initial 初始化接口状态,当接口UP时,或者某些配置变更时会有的状态
Learn 接口未设定虚拟IP(但激活了HSRP,用standby ip),等待从Active路由器学习到该组的虚拟IP
Listen 路由器已经获知虚拟IP,开始侦听其他同组HSRP路由器的HELLO消息
Speak 发送周期性的Hello消息同时参与Active/Standby选举
Standby 成为Standby路由器,同时周期性的发送Hello,持续侦听Active路由器的Hello消息,以便在其失效后接替位置
Active 成为Active路由器,响应PC对于虚拟IP的ARP请求,同时周期性发送Hello消息,宣告自己的存货状态。
1
2
3
4
5
6
7
8
9
10
11
12
(config-if)# standby 1 preempt		#打开抢占
(config-if)# standby 1 priority 110 #调高优先级



@有一种情形
@R2的上游支路shutdown了,但是因为R2的优先级比R3大,R4发包还是选择R2,但是却不能ping通R4
---
@如果R2上面的接口shutdown,则把R2的优先级降低20,这样Standby就被R3抢走
(config)# track 1 interface e0/0 line-protocol #在接口的协议上设置一个追踪
(config)# int e0/1
(config-if)# standby 1 track 1 decrement 20 #如果接口shutdown,则将优先级-20,会在show standby上显示详细条目

VRRP

VRRP和HSRP不一样的地方

  • 在Cisco上抢占模式不一样,VRRP默认开启
  • MAC地址不一样,就是开头的固定格式不一样
  • Hello包发送的周期不一样,HSRP是3s-10s,而VRRP 1s一个Hello包,3s收不到就挂了
  • 激活的状态不一样,一个是backup,一个是active,其他地方一样

GLBP

image-20200210175204079

AVG生成一堆虚拟的mac地址分发给局域网里面的路由器(假设有路由器A、B、C),此时有PC1来请求mac地址上网(这个mac地址是默认网关的mac,不是pc自己的mac),AVG会挑选一台路由器B给它,又有PC2来请求上网,AVG挑选路由器C给它,又有PC3,路由器把A给它。如果路由器B坏了,则重新分配给其他路由器,如果AVG坏了,则路由器重新选举新的AVG。IP地址大则为AVG

所以GLBP抢占的是AVG,而其他的则是抢占干活的机会。

GLBP、VRRP、HSRP配置命令都差不多。