网络基础协议综合实验
本文结合所学的一些基础网络协议来完成一个综合性的实验(实验完整代码放在最后)
会先说明使用协议的原理,然后分析具体在拓补图中的应用过程,最后再给出配置
明确实验目标:拓扑分 核心层(R1)、汇聚层(SW3、SW4,需配置 SVI 实现三层转发)、接入层(SW1、SW2,纯二层) ,目标是让所有 PC 能互访,且核心路由器 R1 能与外网(Net)通信,同时内网流量按预期路径转发。
整体思路:静态路由手动配置、dhcp动态路由、vlan划分网络、mstp解决二层环路、vrrp保障网关冗余、ospf动态选路实现三层设备互联、nat内网访问外网、acl访问控制
数据传输完整流程(以 PC1 访问公网为例 )
阶段 1:PC1 发起到网关的流量(二层 + VRRP )
1. PC1 封装帧:PC1 要访问公网(如 203.0.113.1 ),先判断目标 IP 是外网,需发往默认网关 192.168.2.254 (VRRP 虚拟 IP )。
- PC1 用 ARP 请求解析 192.168.2.254 的 MAC 地址。
- SW3 是 VLAN2 的 VRRP 主设备(优先级 120 ),会响应 ARP,告知 PC1: 192.168.2.254 的 MAC 是 SW3 的 VLAN2 SVI 接口 MAC。
2. 流量到汇聚层 SW3:PC1 封装以太网帧(源 MAC:PC1,目的 MAC:SW3 VLAN2 MAC;源 IP: 192.168.2.1 ,目的 IP: 203.0.113.1 ),通过接入层 SW1(Trunk 链路 )、MSTP 计算的最优路径,转发到 SW3。
阶段 2:汇聚层 SW3 转发到核心 R1(三层 + OSPF )
1. SW3 三层转发:SW3 收到帧后,解封装看目的 IP 是外网,查路由表(OSPF 学习的路由 ),发现需发往核心 R1。
- OSPF 已在 SW3、R1 间建立邻居,传递了 192.168.10.0/30 (SW3 - R1 互联段 )、 192.168.2.0/24 (VLAN2 )等路由。
- SW3 路由表中,外网网段( 0.0.0.0/0 )的下一跳指向 R1 的 192.168.10.2 (OSPF 动态学习或静态路由 )。
2. 封装新帧转发:SW3 重新封装帧(源 MAC:SW3 互联口 MAC,目的 MAC:R1 互联口 MAC;源 IP: 192.168.2.1 ,目的 IP: 203.0.113.1 ),通过 G0/0 接口发往 R1。
阶段 3:核心 R1 做 NAT + 转发(NAT + 静态路由 + ACL )
1. NAT 转换:R1 收到帧,解封装后触发 NAT:
- 因 PC1 是静态 NAT( ip nat inside source static 192.168.2.1 192.0.2.10 ),R1 会把源 IP 替换为 192.0.2.10 ,同时记录转换表项(便于回包时还原 )。
2. ACL 过滤(可选):R1 外网口 f2/0 应用了 access-list 100 (假设允许 ICMP 等 ),检查流量是否符合规则。若符合,继续转发。
3. 静态路由转发:R1 查路由表,默认路由 ip route 0.0.0.0 0.0.0.0 f2/0 指导流量发往外网口 f2/0 ,封装新帧(源 MAC:R1 f2/0 MAC,目的 MAC:公网网关 MAC;源 IP: 192.0.2.10 ,目的 IP: 203.0.113.1 ),发往公网。
阶段 4:公网回包到 R1(反向路径 )
1. 公网路由:公网设备(如 203.0.113.1 )收到包,回包时目的 IP 是 192.0.2.10 ,根据公网路由(由 ISP 配置 ),发回 R1 的 f2/0 接口。
2. NAT 还原:R1 收到回包,查 NAT 表项,将目的 IP 192.0.2.10 还原为 192.168.2.1 ,然后查路由表(OSPF 学习的 192.168.2.0/24 路由 ),下一跳指向 SW3 的 192.168.10.1 。
3. 转发回 SW3:R1 封装帧(源 MAC:R1 互联口 MAC,目的 MAC:SW3 互联口 MAC;源 IP: 203.0.113.1 ,目的 IP: 192.168.2.1 ),发往 SW3。
阶段 5:SW3 转发回 PC1(OSPF + 二层 )
1. SW3 三层转发:SW3 收到回包,查路由表(OSPF 学习的 192.168.2.0/24 直连路由 ),目的 IP 是 PC1,需发往 VLAN2 SVI 接口。
2. ARP 解析 PC1 MAC:SW3 用 ARP 请求解析 192.168.2.1 的 MAC 地址,PC1 响应后,SW3 封装帧(源 MAC:SW3 VLAN2 MAC,目的 MAC:PC1 MAC;源 IP: 203.0.113.1 ,目的 IP: 192.168.2.1 ),通过 MSTP 最优路径,经 SW1 转发回 PC1
一. 静态路由的配置:(sw3、sw4、r1)
静态路由核心是 “告诉设备:到达某网段,下一跳给谁” ,需梳理每个设备的 “已知网段” 和 “需要转发的网段”。
定义:由管理员手工配置的,是单向的,拓扑关系缺乏灵活性
优点:配置灵活,管理员手工配置,节省链路开销。
缺点:当拓扑发生改变时,需要管理员去每台路由器上修改路由配置。
R1 作为核心层路由器,需连通内网(汇聚、接入层网段)和外网(假设 192.0.2.0/24 是公网或上级网络 ),同时汇聚层 SW3、SW4 也需通过它访问外网。假设内网主要需互通的网段有:- 接入层 VLAN 网段: 192.168.2.0/24 (VLAN2 )、 192.168.3.0/24 (VLAN3 )、 192.168.4.0/24 (VLAN4 )- 汇聚与核心互联网段: 192.168.10.0/30 (R1 - SW3 )、 192.168.10.4/30 (R1 - SW4 )等R1R1(config)# ip route 192.168.2.0 255.255.255.0 192.168.10.1 // 去往 VLAN2 网段,下一跳指向 SW3
R1(config)# ip route 192.168.3.0 255.255.255.0 192.168.10.1 // 去往 VLAN3 网段,下一跳指向 SW3
R1(config)# ip route 192.168.4.0 255.255.255.0 192.168.10.5 // 去往 VLAN4 网段,下一跳指向 SW4
R1(config)# ip route 0.0.0.0 0.0.0.0 192.0.2.2 // 默认路由,指向外网出口(假设对端是 192.0.2.2 )
SW3(config)# ip route 0.0.0.0 0.0.0.0 192.168.10.2 // 默认路由,指向核心 R1,让非直连网段走 R1
SW3(config)# ip route 192.168.4.0 255.255.255.0 192.168.10.10 // 去往 VLAN4(SW4 侧),下一跳指向 SW4
// 若需更精细控制,也可针对 R1 侧其他网段单独写,或依赖默认路由
SW4(config)# ip route 0.0.0.0 0.0.0.0 192.168.10.6 // 默认路由指向 R1,让非直连网段走核心
SW4(config)# ip route 192.168.3.0 255.255.255.0 192.168.10.9 // 去往 VLAN3(SW3 侧),下一跳指向 SW3
// 同理,可根据实际网段细化,或依赖默认路由覆盖
二. DHCP 动态路由
工作过程:
四次会话
1)discover:客户端广播向DHCP服务器请求一个ip地址
2)offer:服务器收到后在地址池中寻找合适的IP地址,广播回复提供给客户端
3)request:客户端选择合适的ip地址并告知服务器
4)ack:服务器广播确认分配ip地址,向客户端告知信息
拓补图中,可以看到pc2和pc4都是由dhcp自动获取ip地址的
分析:以pc2为例:pc2广播发送dhcp请求,dhcp中继sw3收到广播请求后改为单播发往dhcp服务器r1,r1收到请求在地址池选择合适的ip地址单播回复给sw3,sw3收到后发给pc2,pc2选择ip地址并广播告知r1,sw3改为单播发给r1,r1收到win的选择信息单播发送确认信息给pc2
这里提到了dhcp中继 什么是中继
Dhcp中继:当dhcp服务器与客户端不在同一网络的时候无法直接通信,这时需要一个代理者代为转发,这个代理者就是dhcp中继。
分析:图中pc2发起dhcp请求请求一个IP地址,因为与服务器r1不在同一网段,所以sw3充当中继接收到来之pc2的dhcp广播请求,把广播请求改为单播发送给服务器r1
dhcp配置:
// DHCP 地址池配置(给 192.168.3.0/24、192.168.4.0/24 网段分配 )
Router(config)#ip dhcp pool h
Router(dhcp-config)#network 192.168.3.0 255.255.255.0
Router(dhcp-config)#default-router 192.168.3.254
Router(dhcp-config)#dns-server 222.246.129.80
Router(dhcp-config)#exitRouter(config)#ip dhcp pool t
Router(dhcp-config)#network 192.168.4.0 255.255.255.0
Router(dhcp-config)#default-router 192.168.4.254
Router(dhcp-config)#dns-server 222.246.129.80
Router(dhcp-config)#exit// DHCP 中继相关(信任中继信息 )
Router(config)#ip dhcp relay information trust-all// 环回接口(OSPF RID 依赖 )
Router(config)#interface Loopback0
Router(config-if)#ip address 1.1.1.1 255.255.255.255
Router(config-if)#exit
注意这里配置了lookback地址,也就是回环接口地址,好处就是因为回环接口状态是稳定的,当链路损坏或原接口故障,管理者可以通过回环接口进入
三.vlan划分网络
定义:虚拟局域网
作用:将网络划分成多个广播域
access:连接个1vlan,与终端相连
收报文 | 判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有则直接 丢弃(缺省) |
发报文 | 将报文的VLAN信息剥离,直接发送出去 |
trunk:连接多个vlan,与交换机、路由器相连
收报文
收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有判断该trunk端口是否允许该 VLAN的数据进入:如果可以则转发,否则丢弃
发报文
比较端口的PVID和将要发送报文的VLAN信息,如果两者相等则剥离VLAN信息,再发送,如果不相等则直接发送
sw1配置:
Switch(config)#vlan 2,3
Switch(config)#int e0/0
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 2
Switch(config-if)#spanning-tree portfast
Switch(config-if)#no shutdown
Switch(config)#int e0/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 3
Switch(config-if)#spanning-tree portfast
Switch(config-if)#no shutdown
Switch(config)#int e0/2
Switch(config-if)#switchport mode trunk
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#no shutdown
Switch(config)#int e0/3
Switch(config-if)#switchport mode trunk
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#no shutdown
sw2配置:
Switch(config)#vlan 2
Switch(config)#vlan 4
Switch(config)#int e0/0
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 2
Switch(config-if)#spanning-tree portfast
Switch(config-if)#no shutdown
Switch(config)#int e0/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 4
Switch(config-if)#spanning-tree portfast
Switch(config-if)#no shutdown
Switch(config)#int e0/2
Switch(config-if)#switchport mode trunk
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#no shutdown
Switch(config)#int e0/3
Switch(config-if)#switchport mode trunk
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#no shutdown
sw3配置:
Switch(config)#vlan 2 - 4
Switch(config)#int g0/0
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk
Switch(config-if)#no shutdown
Switch(config)#int g0/2
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk
Switch(config-if)#no shutdown
Switch(config)#int g0/3
Switch(config-if)#no switchport
Switch(config-if)#no shutdown
Switch(config-if)#ip address 192.168.10.1 255.255.255.252
Switch(config)#int g0/1
Switch(config-if)#no switchport
Switch(config-if)#no shutdown
Switch(config-if)#ip address 192.168.10.9 255.255.255.252
Switch(config)#ip routing
sw4配置:
Switch(config)#vlan 2 - 4
Switch(config)#int g0/0
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk
Switch(config-if)#no shutdown
Switch(config)#int g0/2
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk
Switch(config-if)#no shutdown
Switch(config)#int g0/3
Switch(config-if)#no switchport
Switch(config-if)#no shutdown
Switch(config-if)#ip address 192.168.10.5 255.255.255.252
Switch(config)#int g0/1
Switch(config-if)#no switchport
Switch(config-if)#no shutdown
Switch(config-if)#ip address 192.168.10.10 255.255.255.252
Switch(config)#ip routing
r1配置
Router(config)#int f0/0
Router(config-if)#ip address 192.168.10.2 255.255.255.252
Router(config-if)#no shutdown
Router(config)#int f0/1
Router(config-if)#ip address 192.168.10.6 255.255.255.252
Router(config-if)#no shutdown
Router(config)#int fa2/0
Router(config-if)#ip address 192.0.2.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#ip nat outside
四. MSTP解决二层环路
首先了解二层环路
危害:
1)可能会造成广播风暴
广播风暴是指网络中出现大量无意义的广播帧,导致网络带宽被占满、设备处理能力耗尽
最终使网络瘫痪的现象。
2)数据在环路中循环传输,耗费资源
3)mac地址表紊乱:交换机是通过mac地址来转发数据的,但环路中同一mac地址会在不同端口频繁出现,导致mac表不断刷新,造成混乱
MSTP通过选择规则来防止环路:
选举报网桥
选举规则:
a. 先比较BID中的优先级,具有最小优先级的交换机定为根桥。
b. 如果优先级一样,再比较BID中的MAC地址,MAC地址最小的确定为跟桥。
选举根端口
选举规则:
a. 非根桥交换机上,到根桥的根路径开销最小的端口,即为该非根交换机的根端口
b. 如果根路径开销相同,则比较对端交换机的BID,越小越优
c. 如果对端交换机的BID相同,则比较对端的PID,越小越优
d. 如果对端的PID相同,则比较本端的PID,越小越优。
选举指定端口
选举规则:
a. 在各个链路上,到根桥的根路径开销最小的端口,即为指定端口
b. 如果根路径开销相同,则比较两端交换机的BID,越小越优
c. 如果对端交换机的BID相同,则比较两端交换机的PID,越小越优
阻塞其余端口选举规则:
至此,其余既不是根端口也不是指定端口的都是阻塞端口。
分析:拓补图中,可以看到二层的主要两个环路,分别是sw1、sw3、sw4形成的三角形环路和sw2、sw4、sw3的三角形环路 ,这里就需要用到mstp来解决这个环路问题
mstp配置:
sw1
// MSTP 配置
Switch(config)#spanning-tree mode mst
Switch(config)#spanning-tree mst configuration
Switch(config-mst)#name mst
Switch(config-mst)#revision 1
Switch(config-mst)#instance 2 vlan 2
Switch(config-mst)#instance 3 vlan 3
Switch(config-mst)#instance 4 vlan 4
Switch(config-mst)#exit
sw2
// MSTP 配置
Switch(config)#spanning-tree mode mst
Switch(config)#spanning-tree mst configuration
Switch(config-mst)#name mst
Switch(config-mst)#revision 1
Switch(config-mst)#instance 2 vlan 2
Switch(config-mst)#instance 3 vlan 3
Switch(config-mst)#instance 4 vlan 4
Switch(config-mst)#exit
sw3
// MSTP 配置
Switch(config)#spanning-tree mode mst
Switch(config)#spanning-tree mst configuration
Switch(config-mst)#name mst
Switch(config-mst)#revision 1
Switch(config-mst)#instance 2 vlan 2
Switch(config-mst)#instance 3 vlan 3
Switch(config-mst)#instance 4 vlan 4
Switch(config-mst)#exit
Switch(config)#spanning-tree mst 0 priority 0
Switch(config)#spanning-tree mst 2 priority 4096
Switch(config)#spanning-tree mst 3 priority 0
Switch(config)#spanning-tree mst 4 root primary
sw4
// MSTP 配置
Switch(config)#spanning-tree mode mst
Switch(config)#spanning-tree mst configuration
Switch(config-mst)#name mst
Switch(config-mst)#revision 1
Switch(config-mst)#instance 2 vlan 2
Switch(config-mst)#instance 3 vlan 3
Switch(config-mst)#instance 4 vlan 4
Switch(config-mst)#exit
Switch(config)#spanning-tree mst 0 priority 4096
Switch(config)#spanning-tree mst 2 priority 0
Switch(config)#spanning-tree mst 3 priority 4096
Switch(config)#spanning-tree mst 4 root secondary
五. vrrp保障网关冗余
工作过程:
优先级高的选举为主路由器,优先级相同时接口IP大的为主路由器。 主路由器激活虚拟IP地址,转发数据报文,并定期向广播域内发送VRRP组播报文通告自己的状态,定期通告间(Advertisement Interval)默认为1秒。 备份路由器不发送但接收VRRP报文,在MASTER_DOWN_TIMER(一般为3个通告周期)3s内没有收到主路由器的VRRP报文,则备份路由器将成为主路由器。
分析:拓补图中sw3、sw4两台三层交换机满足等级保护要求中的设备冗余,需要使用vrrp协议来保障一台路由损坏后,其他路由仍然可以这次工作的作用,可以看到sw3、sw4之间有两根线,下面的线是二层线路,用来进行vrrp的主备路由器的状态通告
vrrp配置
sw3
// 逻辑接口(SVI) + VRRP 配置
Switch(config)#int vlan 2
Switch(config-if)#ip address 192.168.2.253 255.255.255.0
Switch(config-if)#ip helper-address 192.168.10.2
Switch(config-if)#no shutdown
Switch(config-if)#vrrp 2 ip 192.168.2.254
Switch(config-if)#vrrp 2 priority 120
Switch(config-if)#vrrp 2 preemptSwitch(config)#int vlan 3
Switch(config-if)#ip address 192.168.3.253 255.255.255.0
Switch(config-if)#ip helper-address 192.168.10.2
Switch(config-if)#no shutdown
Switch(config-if)#vrrp 3 ip 192.168.3.254
Switch(config-if)#vrrp 3 priority 100
Switch(config-if)#vrrp 3 preemptSwitch(config)#int vlan 4
Switch(config-if)#ip address 192.168.4.253 255.255.255.0
Switch(config-if)#ip helper-address 192.168.10.2
Switch(config-if)#no shutdown
Switch(config-if)#vrrp 4 ip 192.168.4.254
Switch(config-if)#vrrp 4 priority 100
Switch(config-if)#vrrp 4 preempt
sw4
Switch(config)#int vlan 2
Switch(config-if)#ip address 192.168.2.252 255.255.255.0
Switch(config-if)#ip helper-address 192.168.10.6
Switch(config-if)#no shutdown
Switch(config-if)#vrrp 2 ip 192.168.2.254
Switch(config-if)#vrrp 2 priority 100
Switch(config-if)#vrrp 2 preemptSwitch(config)#int vlan 3
Switch(config-if)#ip address 192.168.3.252 255.255.255.0
Switch(config-if)#ip helper-address 192.168.10.6
Switch(config-if)#no shutdown
Switch(config-if)#vrrp 3 ip 192.168.3.254
Switch(config-if)#vrrp 3 priority 120
Switch(config-if)#vrrp 3 preemptSwitch(config)#int vlan 4
Switch(config-if)#ip address 192.168.4.252 255.255.255.0
Switch(config-if)#ip helper-address 192.168.10.6
Switch(config-if)#no shutdown
Switch(config-if)#vrrp 4 ip 192.168.4.254
Switch(config-if)#vrrp 4 priority 120
Switch(config-if)#vrrp 4 preempt
六.OSPF动态路由选路
工作过程:
五种报文:
ospf的种类以及作用:
拓补图中当数据传到核心层就需要ospf协议进行动态路由选路
ospf配置
sw3
// OSPF 配置
Switch(config)#interface loopback 0
Switch(config-if)#ip address 3.3.3.3 255.255.255.255
Switch(config)#router ospf 1
Switch(config-router)#router-id 3.3.3.3
Switch(config-router)#network 3.3.3.3 0.0.0.0 area 0
Switch(config-router)#network 192.168.10.1 0.0.0.0 area 0
Switch(config-router)#network 192.168.10.9 0.0.0.0 area 0
Switch(config-router)#network 192.168.2.0 0.0.0.255 area 0
Switch(config-router)#network 192.168.3.0 0.0.0.255 area 0
Switch(config-router)#network 192.168.4.0 0.0.0.255 area 0
// 被动接口
Switch(config-router)#passive-interface g0/0
Switch(config-router)#passive-interface g0/2
sw4
// OSPF 配置
Switch(config)#interface loopback 0
Switch(config-if)#ip address 4.4.4.4 255.255.255.255
Switch(config)#router ospf 1
Switch(config-router)#router-id 4.4.4.4
Switch(config-router)#network 4.4.4.4 0.0.0.0 area 0
Switch(config-router)#network 192.168.10.5 0.0.0.0 area 0
Switch(config-router)#network 192.168.10.10 0.0.0.0 area 0
Switch(config-router)#network 192.168.2.0 0.0.0.255 area 0
Switch(config-router)#network 192.168.3.0 0.0.0.255 area 0
Switch(config-router)#network 192.168.4.0 0.0.0.255 area 0
// 被动接口
Switch(config-router)#passive-interface g0/0
Switch(config-router)#passive-interface g0/2
R1
// 静态路由 + OSPF
Router(config)#ip route 0.0.0.0 0.0.0.0 f0/0
Router(config)#interface loopback 0
Router(config-if)#ip address 1.1.1.1 255.255.255.255
Router(config)#router ospf 1
Router(config-router)#router-id 1.1.1.1
Router(config-router)#network 192.168.10.2 0.0.0.0 area 0
Router(config-router)#network 192.168.10.6 0.0.0.0 area 0
// 传递默认路由给 OSPF 邻居
Router(config-router)#default-information originate
七. NAT 内网访问外网
NAT主要用于内网地址访问公网地址
静态NAT:内网地址与公网地址一对一映射,主要用于公网资源充足的场景或是特定的设备(摄像头等)
动态NAT:内网地址与公网地址是临时的动态映射,随机从公网地址池中分配一个公网地址。主要用于主机或服务器集群的地方
PAT:多对一映射,不同内网地址使用同一公网地址,但端口不同
NAT配置:
// NAT 配置
// 1. 静态 NAT:内网 192.168.2.1 → 外网 192.0.2.10
Router(config)#ip nat inside source static 192.168.2.1 192.0.2.10// 2. 动态 NAT(ACL 1 匹配 192.168.3.0/24 ,映射到 pool1 )
Router(config)#access-list 1 permit 192.168.3.0 0.0.0.255
Router(config)#ip nat pool 1 192.0.2.21 192.0.2.30 netmask 255.255.255.0
Router(config)#ip nat inside source list 1 pool 1// 3. 出接口 NAT(ACL 2 匹配 192.168.2.2/32 ,直接映射外网口 )
Router(config)#access-list 2 permit 192.168.2.2 0.0.0.0
Router(config)#ip nat inside source list 2 interface FastEthernet2/0// 4. NAPT(PAT,ACL 3 匹配 192.168.4.0/24 ,复用 pool3 地址 )
Router(config)#access-list 3 permit 192.168.4.0 0.0.0.255
Router(config)#ip nat pool 3 192.0.2.31 192.0.2.32 netmask 255.255.255.0
Router(config)#ip nat inside source list 3 pool 3 overload
完整代码:(以图片展现)