计算机网络课程设计
基于
PactTracer
仿真平台,根据拓扑结构设计一个简单的企业网络
实验一:静态路由的部署与实施
Router0
为某公司总部,Router1
、Router3
是两个分部,主机PC0
、PC1
所在的网段分别模拟两个分部中的办公网络。现需要总部与各个分部、分部与分部都能够通信,且分部之间在进行通信时,之间的直连链路为主用链路,通过总部的链路为备用链路。
静态路由:需要网络管理员手动在路由器上配置路由信息;定义的路径是固定的,除非管理员手动修改,否则不会改变,即使网络拓扑结构发生变化;仅指定数据包从源到目的地的路径,需要额外配置回程路由以实现双向通信
浮动静态路由及负载均衡静态路由拓扑图
1 | 【Router0】 |
1 | ip route <目标网络> <子网掩码> <下一跳地址> [管理距离] |
最后这里的配置是确保Router0通过Router1和Router2来访问PC0和PC1。具体实现是通过PC0的默认网关可知Router1的FastEthernet0/1接口是PC0的直接网关,它通过该接口去访问网络,总体上Router0能够将数据包转发到Router1,从而通过Router1访问192.168.10.0/24
网络;到PC1同理
值得注意的是,这里两条静态路由命令是单向通信的,若PC0要访问Router0则需要Router1上配置反向静态路由,但PC0和Router1之间是可以进行双向通信的,因为两者在同一网络端下
show ip route查看路由表
1 | 【Router1】 |
这里有一个管理距离,管理距离用于衡量路由的可信度,值越小表示路由越可信。默认情况下,静态路由的管理距离是1
所以这两条命令的意思是,Router1会优先将数据交给Router2去转发到PC1,如果这条路失效那么我们选择由Router0去转发到PC1,至于到了Router0后又怎么转发,那就是我们刚才Router0配置的静态路由规则所决定的
1 | 【Router2】 |
该路由器同理
负载均衡
负载均衡是一种将网络流量或工作负载分配到多个服务器、链路或其他资源的机制,旨在优化资源使用、最大化吞吐量、最小化响应时间,并避免单个资源的过载。通过负载均衡,系统可以提高可靠性、可用性和性能。
这里我们去掉管理距离120,使两条路由的管理距离相同,这样,路由器会将流量均衡分配到两条路径,实现负载均衡
实验二:OSPF动态路由的部署和实施
OSPF(Open Shortest Path First,开放式最短路径优先)是一种用于TCP/IP网络的动态路由协议,主要用于路由器和三层交换机之间确定数据包转发目的地。它是一种内部网关协议(IGP),适用于单一自治系统(AS)内的网络
OSPF动态路由通过路由协议自动学习和更新路由信息,不需要手动指定具体路径,能够自动适应网络的变化,当网络拓扑结构发生变化时,路由协议会自动更新路由表,适用于大型网络、网络拓扑结构复杂或变化频繁的环境;
而实验一中静态路由由网络管理员手动配置路由信息,需要明确指定数据包从源地址到目的地址的路径,路径是固定的,不会随着网络的变化而自动调整,适用于小型网络、网络边界控制以及安全需求高的网络
我们介入一个场景来理解
首先为了实现公司总部的网络互通,考虑到公司网络的扩展性,我们决定使用
OSPF
路由协议,由于目前的路由设备并不多(包括Switch0、Router0,Router1、Router2、Router5
),我们就将所有的设备划分到区域0内,组成OSPF
的骨干网。
使用OSPF路由协议比静态路由有以下优势:
- 动态适应性:OSPF能够自动适应网络拓扑的变化,当网络结构发生变化时,OSPF会自动更新路由表,而静态路由需要手动修改
- 快速收敛:OSPF在网络拓扑发生变化时能够快速收敛,确保最小的服务中断时间,这在动态网络环境中尤为重要
- 可扩展性:OSPF支持大规模网络的扩展,不受路由跳数限制,适合公司网络的未来扩展需求
- 避免路由环路:OSPF使用链路状态数据库和SPF算法,能够有效避免路由环路问题,确保网络的稳定性和可靠性(这是RIP协议所存在的问题)
相当于OSPF提供一种算法来解决路由规则的制定(利用 Dijkstra 的最短路径算法计算出到达每个网络的最短路径,也就是路由表中的内容)
⚠OSPF并不是单纯靠路径长短来制定规则,在下面的RIP&OSPF
有所讲解
1 | 【Switch0】 |
Loopback虚拟配置接口:通常用于作为路由器的Router-ID,因为它始终处于Up状态,这确保了Router-ID的稳定性,即使物理接口出现故障,也不会影响OSPF邻居关系的建立和维护。OSPF为何需要Loopback接口
Router-ID:是一个32位值,用于唯一标识OSPF网络中的每个路由器,1.1.1.1
是作为Router-ID使用的,不是一个需要被访问的真实IP地址
255.255.255.255:需要注意的是,在Loopback接口中,这里是为了确保该接口仅作为一个单一的主机地址,整个IP地址都是主机部分,使用/32
掩码可以简化配置,提供一个稳定的标识符
配置VLAN接口
由于3560是三层交换机,因此我们使用VLAN接口来实现该接口的IP和子网掩码配置
1 | 【Switch0】 |
1 | 【Router0】 |
1 | 【Router1】 |
1 | 【Router2】 |
接下来需要配置一个缺省路由
1 | 【Router2】 |
这条命令配置了一条静态默认路由,指向IP地址为202.44.43.2
的下一跳设备。这意味着当Router2收到目的地址不在其路由表中的数据包时,它将将这些数据包发送到202.44.43.2
1 | 【Router5】 |
实验三:RIP的规划与配置
在实现了公司总部的网络互通之后,我们接下来进行公司分部的网络互通的配置。
因为公司分部规模较小,且其扩展性不大,我们决定使用配置简单的RIP路由协议,也方便维护。
RIP 是一种基于距离向量的路由选择协议,它使用跳数(Hop Count)作为度量值来衡量到达目的地址的距离。直接相连的路由器跳数为 1。跳数最多为 15,超过则表示不可达。
RIP 每隔30秒和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
RIP非常适合小型网络,几乎所有路由器都支持它,但是跳数有限,限制了网络的规模;
RIP网络收敛速度非常慢,当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器;
RIP不支持同一路由上的多条路径,这可能会产生更多的路由环路
RIP&OSPF
RIP是距离矢量协议,它认为经过最少路由器的路径是最佳路径,不考虑带宽、速度或路径拥塞等因素;
而OSPF是链路状态协议,OSPF使用开销(Cost)作为度量值,开销通常根据接口的带宽计算,带宽越高,开销越低。它综合考虑了速度、成本和路径拥塞等因素来选择最短路径
让我们回到实验中来,此次需要路由器2811(3台)、Switch2950T(1台)、PC机(2台)
1 | 【Router3】 |
no auto-summary:禁用自动汇总功能。主要针对有类网络边界,当我们启用汇总时,如果路由器连接了多个子网,并且这些子网属于同一个有类网络(如172.16.0.0/16
),RIP会将它们汇总为一个有类网络地址(如172.16.0.0
)向外通告
路由器连接了
172.16.1.0/24
和172.16.2.0/24
两个子网,如果启用了自动汇总,RIP会向外通告172.16.0.0/16
,而不是具体的子网172.16.1.0/24
和172.16.2.0/24
若遇到不连续子网,自动汇总会导致路由信息丢失
网络A:
172.16.1.0/24
和172.16.2.0/24
通过路由器R1连接网络B:
172.16.3.0/24
和172.16.4.0/24
通过路由器R2连接如果R1和R2都启用了自动汇总,它们会向外通告
172.16.0.0/16
,这就会导致其他路由器无法区分172.16.1.0/24
和172.16.3.0/24
,导致路由混乱或数据包无法正确转发
同时遇到子网划分不一致时,/24、/26
,自动汇总也会导致路由信息不准确
version 2:这条命令将RIP版本设置为RIPv2
。RIPv2
支持无类域间路由(CIDR)、可变长子网掩码(VLSM)以及组播更新(使用组播地址224.0.0.9),而RIPv1
不支持这些功能。RIPv2
比RIPv1
更适用于现代网络。
network 172.16.0.0:我们可以看到这里不像OSPF配置那样需要指定具体的子网掩码,这是因为RIP这种种传统的距离矢量路由协议,最初设计时是基于有类网络的,即有类网络地址会自动根据地址范围确定默认的子网掩码172.16.0.0/16
,那我们根据接口表来看就很正常了
1 | 【Router4】 |
1 | 【Router5】 |
passive-interface Serial0/0/0:这个接口是与总部的Router2相连的,在实验二中我们知道总部使用的是OSPF路由协议,这显然与分部的RIP路由协议冲突,这两种路由协议不能直接交换路由信息;如果没有设置,这些RIP更新报文对Router2来说是无效的,会导致CPU的资源、带宽浪费
passive-interface
命令用于指定某个接口为被动接口,在该接口上,路由器不会发送RIP协议的路由更新报文
但值得注意的是,两者之间仍然可以相互通信,因为他们对接的接口属于直连网络,属于同一个子网下
由于我们现在的实验是分开的,在整合时,你会看到Router5的路由表上存在RIP和OSPF两种路由规则
这里依旧有一点和实验二不同的是,我们这里使用的是2950二层交换机,主要工作在OSI模型的第二层(数据链路层),通过MAC地址进行数据转发,也就不需要单独配置IP了
OSPF与RIP路由协议的重发布
在整合时,你会发现总部无法直接发送信息到分部的PC,这是因为两者使用的不同路由协议,我们要进行路由重发布的操作,否则双方网络无法学习彼此的路由条目
1 | 【Router5】 |
观察与Router5连接的路由器,协议已互相注入,此时就可以互相访问了
实验四:VLAN的规划与配置
公司总部园区网为了方便管理,将公司的各部门划分到不同的VLAN,并用二层、三层交换机将其连接起来,通过交换机实现不同公司内部不同部门的相互联系。
为了使VLAN间可以互相通信,我们使用三层交换机的方式进行,通过开启交换机的路由功能并配置vlanif接口实现三层互通。
在VLAN配置完成后,为了让员工电脑可以访问公司网络以及外部网络,我们需要将vlanif接口宣告进ospf协议中。
VLAN也就是虚拟局域网,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,不同部门业务也相互隔离
1 | 【Switch0】 |
这里只有一点,配置VLAN分为Access端口和Trunk端口,前者多用于连接终端设备,仅允许一个VLAN的流量通过;后者主要用于交换机之间的连接,传输多个VLAN的流量。当然也不绝对,可以看到在前面配置F0/12,因为只有一个VLAN因此也用了Access端口
销售部,财务部,服务器同上,Switch1的VLAN配置同上
现在给两个交换机配置Trunk
1 | 【Switch0】 |
switchport trunk encap dot1q:指定 Trunk 端口使用 802.1Q 封装协议(携带 VLAN 标签),但是Cisco 交换机默认是这个封装协议,所以不太清楚这个命令的意义
接着仅允许 VLAN 200 和 VLAN 500 通过 Trunk 链路
⚠这里也需要注意底层逻辑,事实上销售部和财务部依然可以访问服务器,VLAN300会将数据包通过交换机交给VLAN500的网关发出去,在经过Trunk链时是被打上了VLAN500的标签。如果确实需要限制访问,我们可以采用ACL(访问控制列表),禁止VLAN300和VLAN400到VLAN500的通信
⚠思科交换机中没有 vlanif
命令,要实现不同VLAN之间的通信,要在VLAN端口上配置IP地址(这里是网关地址);在实验二中已经给出解决办法
接下来在Switch0启用路由协议,创建VLANIF虚拟接口,将VLANIF接口设置为员工电脑的默认网关实现不同VLAN之间的互通
VLANIF 虚拟接口(也称为 SVI,Switch Virtual Interface)是三层交换机或支持三层功能的交换机上的一个逻辑接口,用于实现 VLAN 间的路由 或为 VLAN 提供 网关功能。
其为不同 VLAN 提供三层转发功能,使不同 VLAN 的设备可以互相通信;同时为 VLAN 内的设备提供默认网关,使它们能够访问其他网络;VLANIF 接口需要配置 IP 地址,该 IP 地址通常作为 VLAN 内设备的网关
1
2
3
4
5
6
7
8
9
10
11 【Switch0】
Switch(config)#ip routing(开启路由功能)
Switch(config)#interface vlanif 200
Switch(config-if)#ip add 192.168.2.254 255.255.255.0
Switch(config-if)#interface vlanif 300
Switch(config-if)#ip add 192.168.3.254 255.255.255.0
Switch(config-if)#interface vlanif 400
Switch(config-if)#ip add 192.168.4.254 255.255.255.0
Switch(config-if)#interface vlanif 500
Switch(config-if)#ip add 192.168.5.254 255.255.255.0
Switch(config-if)#exit
因此
1 | 【Switch0】 |
⚠这里需要注意,Switch1不需要单独给VLAN设置IP网关,这里是二层交换机和三层交换机相连,二层交换机的核心职责是VLAN划分和帧转发,网关由三层交换机Switch0统一管理
例如,现在要发送信息从PC0到Server0192.168.5.1/24
,PC0发现该IP地址不在同一子网,于是将数据包发送到网关192.168.2.254
,也就是Switch0的VLAN200接口,查询路由表发现,VLAN500子网192.168.5.0/24
直连,通过VLAN500接口192.168.5.254
转发,数据包通过Trunk链(携带VLAN500标签)到达Switch1,由Switch1根据VLAN500成员端口转发至Server0
将VLAN加入到OSPF网络中
为了保证总部PC可以访问到分部PC,我们需要将VLAN加入到OSPF网络中
1 | 【Switch0】 |
实验五:路由策略
我们已经配置好了总部的ospf网络以及公司分部的rip网络,但是我们会发现,虽然总部和分部都配置好了路由协议,但是实现了各自的网络互通,并没有实现总部和分布的互通,原因是总部和分部之间使用了不同的路由协议
在大型的企业中,可能在同一网内使用到多种路由协议,为了实现多种路由协议的协同工作,路由器可以使用路由重分发(route redistribution)将其学习到的一种路由协议的路由通过另一种路由协议广播出去,这样网络的所有部分都可以连通了。为了实现重分发,路由器必须同时运行多种路由协议,这样,每种路由协议才可以取路由表中的所有或部分其他协议的路由来进行广播
在实验三中我们已经解决
实验六:动态NAT的配置
Router2为公司总部的出口路由器,公司内网都使用私网地址,为了实现公司内部员工可以访问外网,需要在路由器Router2上配置NAT。出口路由器使用静态默认路由指向运营商路由器。公司可以使用私有地址对他们的主机进行寻址,然后使用NAT访问公共的因特网。使用私有地址+NAT,可以对外部网络隐藏内部地址,因此增加了网络的保密性
NAT(Network Address Translation) 是一种用于将内部网络的私有IP地址转换为公共IP地址的技术,主要解决IPv4地址短缺问题。它使得局域网内的设备能够与外部互联网进行通信
当内部网络的设备需要访问外部互联网时,数据包会发送到NAT设备(通常是路由器);NAT设备将源IP地址从私有IP转换为公共IP,并记录这种转换关系,当响应数据包返回时,NAT设备会根据记录将目标IP地址转换回原来的私有IP,并将数据包转发给内部设备
1 | 【Router2】 |
1 | 【Router6】 |
ip nat inside:将该接口标记为NAT的“内部”接口,表示该接口连接的是内部网络(私有网络)
access-list 1 permit:创建一个标准访问控制列表(ACL),允许设定的网段的流量通过
ip nat pool p1 202.33.43.1 202.33.43.254 netmask 255.255.255.0:创建一个名为p1
的NAT地址池,地址范围从202.33.43.1
到202.33.43.254
,子网掩码为255.255.255.0
,这个地址池将用于NAT转换
ip nat inside source list 1 pool p1:将ACL 1中定义的内部网络流量通过NAT地址池p1
进行转换。这意味着内部网络的私有IP地址将被转换为地址池p1
中的公共IP地址
而后需要在Router6中配一个静态回程路由
⚠显然这么做了以后,内网依旧是无法访问外网的,因为在202.44.43.0/30
子网内,根本就无法与NAT池里面的IP进行通信,但是之前我们在实验二中配了一个缺省路由
1
2
3
4 【Router2】
Router(config-router)#default-information originate
Router(config)#ip route 0.0.0.0 0.0.0.0 202.44.43.2
Router(config-router)#exit
这样一来该默认路由就会将所有未知目的地的IP转发到运营商路由器中
当然如果我们只想让内部PC访问特定的外网IP,我们就需要在NAT路由器上配一个静态路由,最重要的是因为我们的NAT路由器本身已经属于OSPF网络的范畴,因此我们需要将静态路由注入到OSPF中,以供他学习
1
2
3
4 【Router2】
Router(config)#ip route 47.103.3.0 255.255.255.0 202.44.43.2
Router(config)#router ospf 1
Router(config-router)#redistribute static subnets
以上我们采用的是动态NAT,他会从NAT池中选公网IP,当然我们也可以使用下面这种静态NAT,即一对一绑定
在动态NAT中如果过了超时时间,分配的外网IP就会发生变化。因此,看具体需求,以下绑定的固定公网IP可以使得外网Ping内网主机分配的外网IP
1
2
3
4
5 【Router2】
Router(config)#ip nat inside source static 192.168.2.1 202.44.43.4
Router(config)# access-list 100 permit icmp any host 202.44.43.4
Router(config)# interface Serial0/0/1
Router(config-if)# ip access-group 100 in