前面学习了交换机的配置,现在开始搞路由器的配置。这次之所以很长时间才更新,是因为我把好几节的内容都放到这一篇文章里了。
路由器是一种用户网络互连的设备,它工作在OSI参考模型的第三层(即网络层)。与之对比的二层交换机,工作在数据链路层。长这么个样子
我花三十大洋淘的二手路由器长这个样子
路由器有以下这些功能:
可能很多人想问我有了交换机,为啥还需要路由器?
交换机和路由器虽然都是网络连接设备,但是它们在网络中的功能和应用层次是不同的。以下是它们主要的区别和作用:
工作层次不同:交换机主要工作在数据链路层(第二层),负责数据包的传输;而路由器主要工作在网络层(第三层),负责数据包的路由选择和网络互连。
功能不同:交换机的主要功能是实现不同设备间的信息传输,扩展网络的覆盖范围,简化网络结构;路由器除了能进行信息传输外,还能实现不同网络间的连接,如将局域网(LAN)与广域网(WAN)连接,实现信息在不同网络间的路由传输。
网络划分:交换机能实现VLAN(虚拟局域网)的划分,但是无法实现网络间路由,不同VLAN间的报文需要通过路由器才能实现交互;路由器可以划分子网,实现网络间的互联互通。
因此,即使有了交换机,我们仍然需要路由器来实现不同网络间的互联互通,以及提供更高级的网络管理和控制功能。在实际的网络结构中,交换机和路由器通常会根据需要共同使用,以构建出高效稳定的网络环境。
使用路由器必须知道网关的概念。
从一个网络向另一个网络发送信息,必须经过一道“关口”,这道关口就是网关。对应的就是路由器端口上配置的IP地址。
路由是指导路由器如何进行数据报文发送的路径信息。每个路由器都有路由表,路由表中的条目就是路由。
路由表如何生成的后面了解,我们先看一下路由表的组成。
最长匹配原则。当路由表中存在多个路由项可以同时匹配目的 IP地址时,路由查找进程会选择其中掩码最长的路由项用于转发。
如果路由表中没有路由项能够匹配数据包,则路由器丢弃该数据包。但如果路由表中有默认路由存在,则路由器按照默认路由来转发数据包。
当路由器收到一个数据包时,将数据包中的目的 IP 地址提取出来,然后与路由表字段中的“子网掩码”进行逐位“与”运算,运算的结果再与路由项包含的目的地址进行比较。如果与某路由项中的目的地址相同,则认为与此路由项匹配,路由选择成功;如果没有路由项能够匹配,则丢弃该数据包。
既然路由器是靠路由表里的路由项来进行转发的,那怎么配置路由项呢?有三种方案:直连路由、静态路由、动态路由。
直连路由 是指与路由器接口直接相连的网段的路由,由链路 层协议发现。
配置也很简单,给路由器的接口配置上IP地址,并将链路状态设置为UP即可:
指令配置为:
[RT1-Serial0/1/0]ip add 10.0.0.1 24 //配置路由器接口IP地址
[RT2]display ip routing-table //展示路由表
下图展示的是RT2的路由表,可以看到网段的地址(红色箭头)、自己端口IP(黄色箭头)、相连路由器的端口IP(绿色箭头)都有记录,且对应的下一跳地址、对应接口是有区别的。
静态路由,是由网络管理员在路由器上手动配置的路由信息。
命令:
[RT2]ip route-static ip-address {mask|masklen} {interface-type interface-name | nexthop-address} [preference value] [reject|blackhole]
系统视图下,用 ip route-static 关键字来配置,route-static表示静态路由
例如:
举个例子,如果想PC1和PC4通信:
在RT1和RT2上配置完接口的IP地址后,为其配置静态路由地址
查看路由表,能够发现在RT1上有了路由到30.0.0.0的路由条目:
默认路由,也叫缺省路由。它的目标网络号是 0.0.0.0,子网掩码为 0.0.0.0,它匹配所有的网络。它是路由器在找不到匹配的路由时,才会把数据包用默认路由转发。
命令:
[RT2]ip route-static 0.0.0.0 0.0.0.0 nexthop-address
大家如果是小型的网络环境,配置一下静态路由就够了。如果说恰巧网络环境复杂了,那再用动态路由。所以大家按照自己的需求学习吧。我之所以整理这块资料,纯粹是想有个了解,也想看看大学时期学的理论,是怎么映射到实际中的。
动态路由:它是路由协议根据网络结构或流量的变化,动态寻找网络的最佳路径。
路由协议工作过程如下:
路由交换的含义是这样的:
路由协议有很多分类,大家使用比较多的。
一是按照工作范围划分:
二是按照采用的算法划分:
RIP 的全称是 Routing Information Protocol 路由信息协议。
这是最早的动态路由协议:
其原理简单,配置容易;
RIP 是基于距离矢量(D-V,distance-vector)的路由协议;
它有 RIPv1 和 RIPv2 两个版本;
RIP 使用跳数来衡量到达目的网络的距离,最多 15 跳。大于或等于16 的跳数被定义为无穷大,即目的网络或主机不可达。适用于中小型网络;
跳数(也叫度量值,花费,路由权)在 RIP 中,路由器到与它直接相连的网络的跳数为 0,通过一个路由器可到达的网络的跳数为 1,依次类推。
RIP 协议中,路由器每隔 30s 向其相邻路由器广播自己知道的全部路由信息——即自己的整个路由表,用于通知相邻路由器自己可以到达的网络以及到达该网络的距离(通常用“跳数”表示),相邻路由器可以根据收到的路由表修改和刷新自己的路由表。
最终的效果如下所示:
RIP的配置命令也比较简单:
[RT1]rip [process-id] //启动rip
[RT1-rip-1]network network-address //指定网段启用rip,如network 10.0.0.0
像上面的拓扑图,这么配置完后,PC1和PC2就能通信了。
为啥要有RIPV2?
有无类别可以用这个例子解释,假设用RIPV1,因为使用的是有类路由协议,协议报文中不携带掩码信息,最终RT1上学到的10.0.0.8,和该目的网段与实际 RT2 的网络不一致。
如果使用RIPV2,且关闭自动聚合功能,就能获取到正确的目的网段。
常用配置命令
//选择版本
[RT1-rip-1]version {1 | 2} //RIP视图下指定RIP的全局版本
[RT1-Serial0/1/0]rip version 2 [broadcast | multicast] //接口视图下指定接口运行的RIP版本
[RT1-rip-1]undo summary //RIP视图下关闭自动路由聚合功能
[RT1-Serial0/1/0]rip authentication-mode {md5 {rfc2082 key-string key-id | rfc2453 key-string} | simple password } //配置认证信息。相邻的接口需要使用相同的密钥
如[RT1-Serial0/1/0]rip authentication-mode md5 rfc2453 jzszhn
因为RIP协议的工作机制,容易产生环路,为了避免这种情况,有几种解决方案:
通过这些防环机制可以抑制 RIP 协议中的路由环路的产生,但是却不能完全避免环路!
配置方案:
[RT1-Serial0/1/0]rip split-horizon //开启水平分割,默认是开启的
[RT1-Serial0/1/0]rip poison-reverse //开启毒性逆转,默认是关闭的
RIP有很多缺陷,如以跳数评估的路由并非最优路径,最大跳数16导致网络尺度小,收敛速度慢,更新发送全部路由表浪费网络资源。
OSPF(Open Shortest Path First,开放最短路径优先)是 IETF 开发的基于链路状态的自治系统内部路由协议。
OSPF协议工作过程为:
最终每台路由器会以自己为根节点计算最小生成树
而且OSPF支持多区域管理
一般的结构如下图所示:
常用配置命令
//1.配置router id
//Router ID 的作用是在 OSPF 自治系统内唯一标识一台路由器
//采用点分十进制的形式标识,如router id 10.0.0.1
[Router] router id ip-address
//2.启动 OSPF 进程,并指定进程 ID
//不指定默认为1, [Router]ospf 2
[Router]ospf [ process-id ]
//3.重启 OSPF 进程
//reset ospf 0
reset ospf [process-id]
//4.配置OSPF区域
//area 0,,进入区域视图
[Router-ospf-100]area area-id
//5.在指定的接口上启动 OSPF
//network 10.0.0.1 0.0.0.255
[Router-ospf-1-area-0.0.0.0]network network-address wildcard-mask
操作 | 指令 | 说明 |
---|---|---|
查看路由 | [RT2]display ip routing-table | |
路由器端口配置IP地址 | [RT1-Serial0/1/0]ip add 10.0.0.1 24 | |
配置静态路由 | [RT2]ip route-static ip-address {mask|masklen} {interface-type interface-name |nexthop-address} [preference value] [reject|blackhole] | |
去掉静态路由 | 增加undo,其它不变 | |
配置rip | [RT1]rip [RT1-rip-1]network 192.168.0.0 [RT1-rip-1]network 192.168.1.0 |
启动、路由器相邻的网段 |
查看rip信息 | display rip | |
关闭RIP | undo rip | |
配置OSPF | [RT1]router id 1.1.1.1 [RT1]ospf 1 [RT1-ospf-1]area 0 [RT1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0 [RT1-ospf-1-area-0.0.0.0]network 192.168.0.0 0.0.0.255 [RT1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255 |
配置唯一id、开启ospf、设置区域、配置区域连接的网段 |
查看OSPF | display ospf |
我们按照这个架构图,尝试一下各个功能。现在我只配置了PC的IP地址,修改了一下路由器的名称,其它没有变动。
现在PC3 ping PC4肯定是不通的。我们先查看一下路由器的路由情况,没啥信息。
[RT1]display ip routing-table
Destinations : 7 Routes : 7
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
我们在对应的端口上配置上IP地址。
[RT1]interface GigabitEthernet 0/0
[RT1-GigabitEthernet0/0]ip add 192.168.0.1 24
[RT1-GigabitEthernet0/0]exit
[RT1]interface GigabitEthernet 0/1
[RT1-GigabitEthernet0/1]ip add 192.168.1.1 24
[RT2]interface GigabitEthernet 0/1
[RT2-GigabitEthernet0/1]ip add 192.168.1.2 24
[RT2-GigabitEthernet0/1]exit
[RT2]interface GigabitEthernet 0/0
[RT2-GigabitEthernet0/0]ip add 10.0.0.1 24
现在再查看一下RT1的路由信息,可以看到接口对应的IP地址和网段显示出来了。
[RT1]dis ip routing-table
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.0/24 Direct 0 0 192.168.0.1 GE0/0
192.168.0.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.255/32 Direct 0 0 192.168.0.1 GE0/0
192.168.1.0/24 Direct 0 0 192.168.1.1 GE0/1
192.168.1.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.1.255/32 Direct 0 0 192.168.1.1 GE0/1
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
但现在ping肯定还是ping不通的。
我们配置一下静态路由。配置要连接到的网段、掩码、下一条的地址
[RT1]ip route-static 10.0.0.0 24 192.168.1.2
[RT2]ip route-static 192.168.0.0 24 192.168.1.1
可以看到已经有到对应网段的路由条目了。
[RT1]dis ip routing-table
Destinations : 14 Routes : 14
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
10.0.0.0/24 Static 60 0 192.168.1.2 GE0/1
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.0/24 Direct 0 0 192.168.0.1 GE0/0
192.168.0.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.255/32 Direct 0 0 192.168.0.1 GE0/0
192.168.1.0/24 Direct 0 0 192.168.1.1 GE0/1
192.168.1.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.1.255/32 Direct 0 0 192.168.1.1 GE0/1
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
尝试ping也能成功了
ping 10.0.0.2
Ping 10.0.0.2 (10.0.0.2): 56 data bytes, press CTRL_C to break
56 bytes from 10.0.0.2: icmp_seq=0 ttl=253 time=5.201 ms
56 bytes from 10.0.0.2: icmp_seq=1 ttl=253 time=3.537 ms
56 bytes from 10.0.0.2: icmp_seq=2 ttl=253 time=3.048 ms
56 bytes from 10.0.0.2: icmp_seq=3 ttl=253 time=4.605 ms
56 bytes from 10.0.0.2: icmp_seq=4 ttl=253 time=3.339 ms
--- Ping statistics for 10.0.0.2 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 3.048/3.946/5.201/0.819 ms
%Dec 3 22:00:15:209 2023 H3C PING/6/PING_STATISTICS: Ping statistics for 10.0.0.2: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 3.048/3.946/5.201/0.819 ms.
我们用RIP协议试试,这次就仅用rip1。我们需要先关掉静态路由。
[RT1]undo ip route-static 10.0.0.0 24 192.168.1.2
[RT2]undo ip route-static 192.168.0.0 24 192.168.1.1
可以发现静态路由没有了
[RT1]dis ip routing-table
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.0/24 Direct 0 0 192.168.0.1 GE0/0
192.168.0.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.255/32 Direct 0 0 192.168.0.1 GE0/0
192.168.1.0/24 Direct 0 0 192.168.1.1 GE0/1
192.168.1.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.1.255/32 Direct 0 0 192.168.1.1 GE0/1
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
开始配置RIP
[RT1]rip
[RT1-rip-1]network 192.168.0.0
[RT1-rip-1]network 192.168.1.0
[RT2]rip
[RT2-rip-1]network 192.168.1.0
[RT2-rip-1]network 10.0.0.0
可以看到,自动找到10.0.0.0了
[RT1-rip-1]dis ip routing-table
Destinations : 14 Routes : 14
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
10.0.0.0/8 RIP 100 1 192.168.1.2 GE0/1
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.0/24 Direct 0 0 192.168.0.1 GE0/0
192.168.0.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.255/32 Direct 0 0 192.168.0.1 GE0/0
192.168.1.0/24 Direct 0 0 192.168.1.1 GE0/1
192.168.1.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.1.255/32 Direct 0 0 192.168.1.1 GE0/1
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0
互相间仍能ping通
ping 10.0.0.2
Ping 10.0.0.2 (10.0.0.2): 56 data bytes, press CTRL_C to break
56 bytes from 10.0.0.2: icmp_seq=0 ttl=253 time=5.262 ms
56 bytes from 10.0.0.2: icmp_seq=1 ttl=253 time=3.289 ms
56 bytes from 10.0.0.2: icmp_seq=2 ttl=253 time=3.099 ms
56 bytes from 10.0.0.2: icmp_seq=3 ttl=253 time=3.038 ms
56 bytes from 10.0.0.2: icmp_seq=4 ttl=253 time=3.094 ms
--- Ping statistics for 10.0.0.2 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 3.038/3.556/5.262/0.857 ms
%Dec 3 22:12:20:771 2023 H3C PING/6/PING_STATISTICS: Ping statistics for 10.0.0.2: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 3.038/3.556/5.262/0.857 ms.
通过这次配置,大家能看到,使用RIP容易了很多,只需要配置和自己相连的网段即可。
为了测试OSPF,我们先关闭RIP。
[RT1-rip-1]undo rip
Undo RIP process? [Y/N]:Y
[RT2-rip-1]undo rip
Undo RIP process? [Y/N]:Y
没有相邻信息了
[RT1]dis ip routing-table
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.0/24 Direct 0 0 192.168.0.1 GE0/0
192.168.0.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.255/32 Direct 0 0 192.168.0.1 GE0/0
192.168.1.0/24 Direct 0 0 192.168.1.1 GE0/1
192.168.1.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.1.255/32 Direct 0 0 192.168.1.1 GE0/1
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0
现在使用OSPF进行配置
[RT1]router id 1.1.1.1
[RT1]ospf 1
[RT1-ospf-1]area 0
[RT1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
[RT1-ospf-1-area-0.0.0.0]network 192.168.0.0 0.0.0.255
[RT1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
[RT2]router id 2.2.2.2
[RT2]ospf 1
[RT2-ospf-1]area 0
[RT2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[RT2-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
[RT2-ospf-1-area-0.0.0.0]%Dec 3 22:27:39:829 2023 RT2 OSPF/5/OSPF_NBR_CHG: OSPF 1 Neighbor 192.168.1.1(GigabitEthernet0/1) changed from LOADING to FULL.
[RT2-ospf-1-area-0.0.0.0]network 10.0.0.0 0.0.0.255
能够看到路由器有了新的路由项,而且网段也正确了
[RT1-ospf-1-area-0.0.0.0]dis ip routing-table
Destinations : 14 Routes : 14
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
10.0.0.0/24 O_INTRA 10 2 192.168.1.2 GE0/1
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.0/24 Direct 0 0 192.168.0.1 GE0/0
192.168.0.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.255/32 Direct 0 0 192.168.0.1 GE0/0
192.168.1.0/24 Direct 0 0 192.168.1.1 GE0/1
192.168.1.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.1.255/32 Direct 0 0 192.168.1.1 GE0/1
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
ping也是通的
ping 10.0.0.2
Ping 10.0.0.2 (10.0.0.2): 56 data bytes, press CTRL_C to break
56 bytes from 10.0.0.2: icmp_seq=0 ttl=253 time=4.426 ms
56 bytes from 10.0.0.2: icmp_seq=1 ttl=253 time=3.146 ms
56 bytes from 10.0.0.2: icmp_seq=2 ttl=253 time=2.584 ms
56 bytes from 10.0.0.2: icmp_seq=3 ttl=253 time=2.975 ms
56 bytes from 10.0.0.2: icmp_seq=4 ttl=253 time=4.471 ms
--- Ping statistics for 10.0.0.2 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 2.584/3.520/4.471/0.780 ms
%Dec 3 22:29:55:246 2023 H3C PING/6/PING_STATISTICS: Ping statistics for 10.0.0.2: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 2.584/3.520/4.471/0.780 ms.
大家也能看到,使用OSPF虽然复杂一点,但是复杂的不多。鉴于它更强大的能力,性价比也是很高的。
如果大家不关注于原理的话,路由器配置其实挺简单的。大家上手试试吧。
大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
我的个人博客为:https://shidawuhen.github.io/
往期文章回顾: