#import "labtemplate.typ": *
#show: nudtlabpaper.with(title: "虚拟局域网（VLAN）配置",
  author: "程景愉", 
  id: "202302723005", 
  training_type: "无军籍",
  grade: "2023",
  major: "网络工程",
  department: "计算机学院",
  advisor: "张军",
  jobtitle: "工程师",
  lab: "306-707",
  date: "2025.09.17",
  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)
    // #counter(heading).display()
    // #h(0.5em)
    #it.body
  ]

#outline(title: "目录",depth: 3, indent: 2em)
#pagebreak()
#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[
  要求学员能根据需求划分和配置VLAN，实现VLAN的基本功能。了解端口安全的作用，掌握端口安全的配置方法。
]
 
= 实验原理
== VLAN
#para[
  虚拟局域网（VLAN）是一种将局域网划分为多个逻辑上的局域网的技术。VLAN技术可以将不同的用户、不同的网络设备、不同的网络数据流分隔开，提高网络的安全性和管理性。VLAN技术可以实现以下功能：
]
  - 逻辑划分：将一个物理局域网划分为多个逻辑局域网，不同的逻辑局域网之间相互隔离，提高网络的安全性。
  - 广播控制：VLAN可以控制广播域的范围，减少广播风暴，提高网络的性能。
  - 管理灵活：VLAN可以根据网络的需求随时调整，提高网络的管理灵活性。
  - 负载均衡：VLAN可以将不同的用户、不同的网络设备、不同的网络数据流分隔开，实现负载均衡。
// == 链路聚合
// #para[
//   链路聚合是一种将多个物理链路聚合成一个逻辑链路的技术。链路聚合技术可以实现以下功能：
// ]
//   - 增加带宽：可以将多个物理链路聚合成一个逻辑链路，增加带宽，提高网络的性能。
//   - 提高可靠性：可以将多个物理链路聚合成一个逻辑链路，提高网络的可靠性。
//   - 负载均衡：可以将多个物理链路聚合成一个逻辑链路，实现负载均衡。
== 端口安全
#para[
  端口安全是一种保护网络安全的技术，可以防止未经授权的设备接入网络。端口安全技术可以实现以下功能：
]

  - 限制MAC地址：可以限制接口学习的MAC地址数量，防止未经授权的设备接入网络。
  - 防止ARP攻击：可以防止ARP攻击，提高网络的安全性。
  - 防止MAC地址冲突：可以防止MAC地址冲突，提高网络的稳定性。


= 实验环境
== 实验背景
#para[
  本实验模拟某公司网络场景。公司规模较大，员工200余名，内部网络是一个大的局域网。公司放置了多台接入交换机（如S1和S2）负责员工的网络接入。接入交换机之间通过汇聚交换机S3相连。公司通过划分VLAN来隔离广播域，由于员工较多，相同部门的员工通过不同交换机接入。为了保证在不同交换机下相同部门的员工能互相通信，需要配置交换机之间链路为干道模式，以实现相同VLAN跨交换机通信。
]
== 实验设备
#align(center)[#table(
  columns: (auto, auto,auto),
  rows:(2em,2em,3em),
  inset: 10pt,
  align: horizon+center,
  table.header(
    [*设备名称*], [*设备型号*], [*设备数量*]
  ),
  "交换机", "华为S5735", "2",
  "PC", "联想启天M410
  Windows 10", "4",
)]
#para[
  另有网线若干，控制线2条。
]
= 实验步骤及结果
== 实验拓扑
#para[
  按实验背景，绘制拓扑图如下：
 ]
 #figure(image("实验拓扑.png",format: "png",fit:"stretch",width: 100%),caption: "实验拓扑图")

== 按照拓扑图接线
#para[
  按照拓扑图接线，将PC1、PC2、PC3、PC4分别连接到LSW1、LSW2上。
]
#figure(image("接线图.jpg",format: "jpg",fit:"stretch",width: 90%),caption: "接线图")

== 配置前检验
#para[
  设置PC1、2、3、4的IP地址，分别为`10.130.81.{210, 211, 212, 213}`。设置PC的网关均为`10.130.81.1`。以PC1为例，配置如下：
]
#figure(image("PC1IP.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "配置前检验")
#para[
  说明PC1的IP地址、网关地址已经设置成功。
  然后，在PC1上ping PC2、PC3、PC4，查看是否能够ping通。结果显然是PC1能够ping通PC2、PC3、PC4，网络连接正常。下面开始进行VLAN配置。
]

== 配置VLAN
#para[
  下列许多步骤在LSW1和LSW2上都有相同的操作，这里只列出LSW1上的操作步骤。
]

=== 配置各个接口的VLAN属性
#para[
  创建VLAN并将接口加入VLAN。将与PC1、PC2相连接口的接口类型设置为access。将PC1划分到VLAN 10，将PC2划分到VLAN 20。
]
#figure(image("vlanbatch.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "将VLAN进行划分")
#para[
 配置VLAN10和VLAN20接口属性为access。
]
#figure(image("vlanset.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "配置VLAN属性(1)")
#para[
 配置trunk接口允许VLAN10和VLAN20通过。
]
#figure(image("vlantrunk.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "配置VLAN属性(2)")
#para[
  接下来需要验证配置结果，查看链路是否协商成功。
]
=== 阶段性检验
#para[
  在PC1上ping PC2、PC3、PC4，查看是否能够ping通。预期结果为PC1可以ping通PC3，无法ping通PC2、4。结果如下：
]
#figure(image("pingcheck1.jpg",format: "jpg",fit:"stretch",width: 50%),caption: "阶段性检验(1)")
#para[
  上述结果说明PC2可以ping通PC4，无法ping通PC1、2，VLAN配置成功。
]
== 配置VLANIF接口实现三层路由通信
#para[
  现在两部门之间展开交流，要求PC1，2，3，4能够互相访问。为此，需要在交换机上配置VLANIF接口以及网关地址。
]

=== 配置PC默认网关
#para[
  进行该实验时先调整PC3,4的IP地址，从`10.130.81.x/24`变为了`10.130.91.x/24`。
  并在PC3、PC4上调整网关为`10.130.91.1`。以PC3为例，配置如下：
]
#figure(image("PC3IP.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "PC3进行IP地址调整")

=== 配置VLAN网关
#para[
  配置VLANIF接口，作为学生PC的网关。在LSW1上配置VLANIF10接口的IP地址为`10.130.81.1/24`，配置VLANIF20接口的IP地址为`10.130.91.1/24`。
  具体命令如下：
]
#align(center)[`[LSW1] int vlanif 10`]
#align(center)[`[LSW1-Vlanif10] ip addr 10.130.81.1`]
#align(center)[`[LSW1-Vlanif10] int vlanif 20`]
#align(center)[`[LSW1-Vlanif20] ip addr 10.130.91.1`]
#para[
  配置好之后使用`display interface Vlanif <index>`命令查看VLANIF接口的状态，查看结果显示：
]

#figure(image("vlanif10.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "vlanif10接口状态")
#figure(image("vlanif20.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "vlanif20接口状态")

#para[
说明IP已经正确配置，且状态为UP。
]
=== 阶段性检验
#para[
  在PC1上ping PC1、PC2、PC3、PC4，查看是否能够ping通。预期结果为全通。结果如下：
]
#figure(image("pingcheck2.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "阶段性检验(2)")
#para[
  上述结果说明PC1可以ping通PC2、PC3、PC4，VLANIF配置成功。两个部门的电脑之间可以通信。
]
== 引入接口安全
#para[
  两个部门的交流活动中，有外部人员参与。为了保证网络安全，需要对接口进行安全配置，防止外部人员使用外部设备接入网络。
]
=== 配置接口安全
#para[
  将接口GigabitEthernet0/0/1、GigabitEthernet0/0/2的最大MAC地址数设置为1。以LSW1的GigabitEthernet0/0/1为例，配置如下：
]
#figure(image("macset.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "配置接口安全")
  配置好之后，让PC1与PC2、PC3、PC4进行一次ping通信，让交换机学习每个PC的MAC地址。用`ipconfig /all`命令查看PC的MAC地址，以PC1为例，查看结果如下：
#figure(image("macprint.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "查看PC1的MAC地址")
  可以看到PC1的MAC地址为`1C-69-7A-2F-93-70`。
  在LSW1上运行`display mac-address`命令查看交换机学习到的MAC地址，查看结果如下：
#figure(image("maccheck.jpg",format: "jpg",fit:"stretch",width: 80%),caption: "验证交换机学习到的MAC地址")
#para[
  可以看到交换机学习到了PC1的MAC地址。
]
=== 检验接口安全配置
#para[
  模拟外部人员进入，将PC1用于接入交换机LSW1的网线取下，改用个人笔记本电脑接入LSW1，并将IP地址与默认网关设置为与PC1相同。
]
#para[
  然后分别ping PC2、PC3、PC4，结果均无法正常ping通，查看交换机的MAC地址表，发现并没有学习到个人笔记本电脑的MAC地址，说明接口安全配置成功。
]

= 实验总结
== 内容总结
#para[
  通过本次实验，我深入了解了虚拟局域网（VLAN）和端口安全配置的基本原理和实际操作。具体来说，我完成了以下几项任务：
]

1. VLAN 配置：
   - 学习了 VLAN 的基本概念和作用，掌握了如何根据需求划分和配置 VLAN。
   - 通过实际操作，将一个物理局域网划分为多个逻辑局域网，实现了不同 VLAN 之间的隔离，提高了网络的安全性和管理性。

2. 端口安全配置：
   - 学习了端口安全的作用和配置方法，掌握了如何通过端口安全配置来防止未经授权的设备接入网络。
   - 通过实际操作，模拟了外部人员尝试接入网络的场景，验证了端口安全配置的有效性。

== 心得感悟
#para[
  本次实验，我在完成基础的VLAN配置后，我尝试学习课上讲到的安全技术，并在实验中成功利用。在实验中，我遇到了许多问题，但通过查阅资料、请教老师和同学，最终解决了问题。通过本次实验，我不仅学会了网络配置的方法，还提高了解决问题的能力。
]

#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")