Repo initialized

This commit is contained in:
2025-09-22 19:26:43 +08:00
commit 09d1be207a
31 changed files with 1294 additions and 0 deletions

237
2_stp/main.typ Normal file
View File

@@ -0,0 +1,237 @@
#import "labtemplate.typ": *
#show: nudtlabpaper.with(title: "生成树协议STP配置",
author: "王李烜",
id: "202202001046",
training_type: "无军籍",
grade: "2022",
major: "网络工程",
department: "计算机学院",
advisor: "张军",
jobtitle: "工程师",
lab: "306-707",
date: "2024.11.07",
header_str: "《网络工程》实验报告",
)
#set page(header: [
#set par(spacing: 6pt)
#align(center)[#text(size: 11pt)[《网络工程》实验报告]]
#v(-0.3em)
#line(length: 100%, stroke: (thickness: 1pt))
],)
#show heading: it => box(width: 100%)[
#v(0.50em)
#set text(font: hei)
#it.body
]
#outline(title: "目录",depth: 3, indent: 2em)
#outline(
title: [图目录],
target: figure.where(kind: image),
)
#show heading: it => box(width: 100%)[
#v(0.50em)
#set text(font: hei)
#counter(heading).display()
// #h(0.5em)
#it.body
]
#set enum(indent: 0.5em,body-indent: 0.5em,)
#pagebreak()
= 实验目的
#para[
本实验旨在使学生掌握生成树协议STP的基本概念和配置方法通过实际操作学习如何在网络设备上配置STP理解其防止环路、优化网络拓扑的功能并培养分析和解决网络问题的能力。通过实验学生将深入理解STP在现代网络中的应用提升实践技能为未来的网络工程职业生涯和专业认证考试打下坚实的基础。
]
= 实验原理
== STP概述
#para[
生成树协议Spanning Tree Protocol简称STP是一种工作在OSI模型第二层数据链路层的通信协议其基本应用是防止交换机冗余链路产生的环路确保以太网中无环路的逻辑拓扑结构从而避免广播风暴和大量占用交换机资源的问题。
]
== STP工作原理
=== 基本概念
#para[
STP通过选举一个根交换机Root Switch来确定生成树其他交换机通过计算到根交换机的最短路径来决定端口的状态从而实现网络中的环路消除。
以下是一些基本概念的解释:
- 网桥BridgeSTP在IEEE标准中提出被提出时是施用于网桥上的。网桥是一种网络设备用于连接两个或多个局域网段能够根据数据帧的目的MAC地址来转发数据帧。在STP中网桥负责维护网络的拓扑结构防止环路的产生。交换机是一种高级的网桥。
- 根桥Root Bridge根桥是STP网络中的逻辑中心负责周期性发送配置BPDU桥协议数据单元以维持生成树的稳定性。根桥的选举基于桥IDBID即桥优先级和桥MAC地址的组合BID最小的设备会被选举为根桥。
- 桥IDBIDBridge ID桥ID由两部分组成桥优先级和桥MAC地址。桥优先级是一个2字节的数值其取值范围是0到61440缺省值通常为32768步长为4096。桥MAC地址是网桥的硬件地址。在STP网络中桥ID最小的设备会被选举为根桥。
- 端口IDPIDPort ID端口ID由端口优先级和端口编号组成用于标识每个接口在选举指定端口Designated Port时使用。端口优先级范围是0到240缺省情况下为128。
- BPDUBridge Protocol Data Unit交换机之间用于交换信息的数据帧。
- 根端口Root Port根端口是指非根桥上用于连接到根桥的最优路径的端口。每个非根桥只有一个根端口这个端口提供了到达根桥的最低路径开销。根端口负责将BPDU桥协议数据单元从非根桥传递到根桥。如果一个非根桥有多个端口连接到根桥那么根据路径开销、BID桥ID、PID端口ID等参数选择其中的一个作为根端口。
- 指定端口Designated Port指定端口是每个网段上用于转发BPDU和用户数据的端口。在每个网段上只有一个端口可以是指定端口它负责向所连接的网段转发BPDU。通常情况下根桥上的所有端口都是指定端口因为根桥是STP网络的逻辑中心。
- 备用端口Alternate Port/Backup Port备用端口是指那些既不是根端口也不是指定端口的端口。这些端口在STP中被阻塞不参与数据的转发但它们仍然会接收BPDU以便于在网络拓扑发生变化时可以快速转变为根端口或指定端口从而提供链路的备份。
]
=== STP算法的步骤
#para[
生成树算法有三个步骤,下面以@原始有环拓扑 为例说明STP的工作原理。
#figure(image("原始有环拓扑.jpg",format: "png",fit:"stretch",width: 25%),caption: "原始有环拓扑")<原始有环拓扑>
+ 选举根交换机
拓扑中BID最小者当选。
- BID的比较方法
- 优先级取值越小则网桥ID则越小。
- 若优先级相同则比较MAC地址从MAC地址的左侧开始依次比较数值小的则网桥ID就越小。
- 如A-MAC前四位是00-01B的前四位是00-05那么A的BID更小A当选根交换机。
+ 选举根端口
在每一个非根交换机上选出一个根端口RPRoot Port这个RP只能有一个。根端口用于接受根交换机发来的BPDU也用来转发普通流量。
- 根端口RP的选举
- 首先保证BPDU接收端口到根交换机的路径成本最小。链路带宽对应的成本值见下表#footnote[摘自#link("https://support.huawei.com/enterprise/zh/doc/EDOC1000128401/33f9bf9d")[IEEE 802.1d-1998标准方法、IEEE 802.1t标准方法和华为计算方法中规定的路径开销列表]]
#figure(
table(
align: horizon+center,
rows: 1.5em,
columns:(auto,auto,auto),
inset: 6pt,
table.header(
[*端口速率*], [*IEEE 802.1t标准的路径开销*], [*华为计算方法的路径开销*],
),
"100Mbps", "200 000", "200",
"1000Mbps", "20 000", "20",
"10Gbps", "2 000", "2",
"40Gbps", "500", "1",
),
caption: "链路带宽的成本"
)
例如一系列千兆网口组成的路径每经过一个设备的成本就是4。成本最小的口就是根端口。
#figure(image("线路成本.jpg",format: "png",fit:"stretch",width: 45%),caption: "链路成本示例")<链路成本>
@链路成本A是根交换机从B、C的G0/1口到A的成本值均为4所以它们都被选为根端口。但是D的G0/1与G0/2口成本值都是4+4=8成本值相同则还需要进行网桥ID的比较。
- 对端的网桥IDBID最小。如上文所述@链路成本 这种情况中D到A的无论哪条路成本都是8则需要继续比较双方中哪个接口的对端BID更小。
#figure(image("对端BID最小.jpg",format: "png",fit:"stretch",width: 80%),caption: "对端BID最小")<对端BID最小>
B是00-06C是00-05即对端C的BID更小所以D的G0/2被选举为了根端口。
- 对端的端口IDPID最小。在最后如果路径成本和网桥ID都相同则还要比较端口ID的大小。
#figure(image("对端PID最小.jpg",format: "png",fit:"stretch",width: 65%),caption: "对端PID最小")<对端PID最小>
此处的PID优先级都是默认值为128。而Fa0/1比Fa0/2小所以Fa0/1被选举成为了根端口RP。
+ 选举指定端口并阻塞备用端口AP
每条链路的两个端口中有且仅有一个端口需要被选为指定端口DPDesignated Port。指定端口DP用于转发根交换机发来的BPDU也用来转发普通流量
- 指定端口的选举条件
- 根交换机的所有端口都是指定端口DP。
- 根端口的对端端口一定是指定端口。如交换机D的RP是G0/2G0/2的对端是C的G0/3那么C的G0/3就是指定端口。
- BPDU转发端口到根交换机的路径成本最小的是指定端口DP。例如D、E之间的两条链路D到A的成本更低所以在这两条链路上DP均在D交换机处。
选举完指定端口剩余端口就成了备用端口APAlternate Port将他们阻塞Block即可在所有交换机之间形成一条无环的链路。
#figure(image("成品图.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "最终形成的链路拓扑(绿色粗线为连通的链路)")<成品图>
]
== BPDU保护
#para[
如果有人伪造RST BPDU恶意攻击交换设备当边缘端口接收到该报文时会自动设置为非边缘端口并重新进行生成树计算引起网络震荡。配置BPDU保护功能后如果边缘端口收到BPDU报文边缘端口将会被立即关闭防止网络中的恶意攻击。
]
// == RSTP
// #para[
// ]
// == MSTP
= 实验环境
== 实验背景
#para[
网工系的宿舍楼中有一套局域网各个寝室里有一些PC寝室之间有几台交换机PC和交换机之间通过网线连接。网工系学生热爱学习经常开展研讨会研究学术问题。在要求熄灯就寝之后网工系学生不能出寝室门于是他们在寝室的PC上开视频研讨会继续讨论学术问题。为了提高网络的可靠性他们在交换机之间安装了一些了冗余备份链路。但这会形成环路报文可能在环形网络中不断循环设备由于重复接收相同的报文处理能力会下降。所以他们还需要在交换机上配置生成树协议将环形网络结构修剪成无环路的树形网络结构。
]
== 实验设备
#para[
#align(center)[#table(
columns: (auto, auto,auto),
rows:(2em,2em,3em),
inset: 10pt,
align: horizon+center,
table.header(
[*设备名称*], [*设备型号*], [*设备数量*]
),
"交换机", "华为S5735S", "4",
"PC", "联想启天M410
Windows 10", "2",
)]
另有网线若干控制线1条。
]
= 实验步骤及结果
== 实验拓扑
#para[
按实验背景,绘制拓扑图如下:
#figure(image("实验拓扑.png",format: "png",fit:"stretch",width: 60%),caption: "实验拓扑图")<实验拓扑>
要求在配置好各个端口的路径开销值之后运行STP能将@实验拓扑 中的Blocked Port端口阻塞。
]
== 按照拓扑图接线
#para[
按照拓扑图接线。
#figure(image("接线图.png",format: "jpg",fit:"stretch",width: 80%),caption: "接线图")
]
== 配置PC
#para[
设置319寝室的IP地址为`192.168.3.19`319寝室的IP地址为`192.168.3.12`
]
== 配置STP
#para[下列许多步骤在LSW1、LSW2、LSW3和LSW4上都有相同的操作这里只列出*LSW2*上的操作步骤。]
=== 配置STP工作模式
#para[
配置环网中的设备生成树协议工作在STP模式
#figure(image("step0.png",format: "png",fit:"stretch",width: 100%),caption: "配置STP工作模式")
]
=== 配置根桥和备份根桥设备
#para[
配置根桥设备为LSW1备份根桥设备为LSW4
#figure(image("step1.png",format: "png",fit:"stretch",width: 35%),caption: "配置根桥LSW1")
#figure(image("step2.png",format: "png",fit:"stretch",width: 60%),caption: "配置备份根桥LSW4")
]
=== 配置端口路径开销
#para[
配置端口的路径开销值:
#figure(image("step3.png",format: "png",fit:"stretch",width: 60%),caption: "配置端口路径开销")
特别地LSW3的g0/0/1口的路径开销值为20000:
#figure(image("step4.png",format: "png",fit:"stretch",width: 70%),caption: "配置LSW3的g0/0/1口路径开销")
]
=== 使能STP破除环路
#para[
- 将与PC机相连的端口设置为边缘端口。配置LSW2
#figure(image("step5.png",format: "png",fit:"stretch",width: 70%),caption: "配置LSW2边缘端口")
配置LSW3的g0/0/1口为边缘端口并启用BPDU保护功能
#figure(image("step6.png",format: "png",fit:"stretch",width: 70%),caption: "配置LSW3边缘端口并启用BPDU保护")
- 设备全局使能STP:
#figure(image("step7.png",format: "png",fit:"stretch",width: 30%),caption: "全局使能STP")
]
== 实验结果验证
=== 查看各交换机端口状态
#para[
配置完成后,查看各个交换机的端口状态,确认生成树协议已经生效。
在LSW1上执行display stp brief命令查看端口状态和端口的保护类型结果如下
#figure(image("lsw1dis.jpg",format: "jpg",fit:"stretch",width: 75%),caption: "查看LSW1的STP状态")
将LSW1配置为根桥后与LSW2、LSW4相连的端口g0/0/2和g0/0/1在生成树计算中被选举为指定端口。
在LSW2上执行display stp interface g0/0/1 brief命令查看端口g0/0/1状态结果如下
#figure(image("lsw2dis.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "查看LSW2的g0/0/1端口状态")
端口g0/0/1在生成树选举中成为指定端口处于*FORWARDING*状态。
在LSW3上执行display stp brief命令查看端口状态结果如下
#figure(image("lsw3dis.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "查看LSW3")
端口g0/0/3在生成树选举中成为根端口处于*FORWARDING*状态端口g0/0/1在生成树选举中成为Alternate端口处于*DISCARDING*状态。此外由于我们配置了BPDU保护g0/0/1状态的Protection字段显示为*BDPU*
]
=== 查看网络连通性
#para[
在319寝室的PC1上执行ping命令查看与312寝室PC2的网络连通性结果如下
#figure(image("319ping312.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "查看网络连通性")
两台PC之间可以正常通信网络连通性正常。至此319与312寝室的学生可以在熄灯后继续通过视频研讨会进行学术讨论。
]
= 实验总结
#para[
本次实验通过配置生成树协议STP实现了对网络中的环路进行消除保证了网络的稳定性和可靠性。通过实验我掌握了生成树协议的基本概念和工作原理学会了如何在网络设备上配置STP理解了STP的防止环路、优化网络拓扑的功能。实验中我通过实际操作深入理解了STP在现代网络中的应用提升了实践技能为未来的网络工程职业生涯和专业认证考试打下了坚实基础。
]
#show heading: it => box(width: 100%)[
#v(0.50em)
#set text(font: hei)
// #counter(heading).display()
// #h(0.5em)
#it.body
]
#pagebreak()
#bibliography("ref.yml",full: true,title: "参考文献",style:"gb-7714-2015-numeric")