Files
2025-08-27 14:13:17 +08:00

431 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 08.RIP
## 1. 路由协议的分类
### 1.1 距离矢量
主要的特点:
是在更新消息的时候,发送的是自己的路由表条目,对方学习到之后,经过处理,放入自己的路由表。
等于每台路由器都把自己处理的结果让对方学习。
典型代表:
1. rip
2. eigrp
### 1.2 链路状态
主要的特点:
更新消息的时候,会发送自己链路的状态,比如带宽、网段等等信息,对方收到之后,需要经过计算,最终处理出路由表。
等于每台路由器都把自己接口的信息告诉对方,让对方自己判断路由是怎样的。
典型代表:
1. ospf
2. isis
## 2. RIP(routing information protocol)
### 2.1 实验拓扑
![image-20200314135810181](08.RIP/image-20200314135810181.png)
首先配置IP地址
```
```
配置RIP
```
R1
router rip
network 192.168.12.0
network 1.0.0.0
=============================
R2
router rip
network 192.168.12.0
network 2.0.0.0
network 192.168.23.0
============================
R3
router rip
network 192.168.23.0
network 3.0.0.0
network 192.168.34.0
===========================
R4
router rip
network 192.168.34.0
network 4.0.0.0
```
检查路由表中rip的条目确保学习到
```
R1#show ip route rip
R 2.0.0.0/8 [120/1] via 192.168.12.2, 00:00:14, Ethernet0/0
R 3.0.0.0/8 [120/2] via 192.168.12.2, 00:00:14, Ethernet0/0
R 4.0.0.0/8 [120/3] via 192.168.12.2, 00:00:14, Ethernet0/0
R 192.168.23.0/24 [120/1] via 192.168.12.2, 00:00:14, Ethernet0/0
R 192.168.34.0/24 [120/2] via 192.168.12.2, 00:00:14, Ethernet0/0
```
检查连通性
```
R1#ping 4.4.4.4 source 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/2 ms
```
### 2.2 RIPv1
#### 2.2.1 基本概念
- RIP的管理距离在cisco设备上是120
- RIP使用跳数(路由传递过程中经历的节点数量)来衡量路径好坏
- RIP使用UDP来携带更新消息UDP的源和目的端口号都是520
- RIP的更新消息中直接携带了路由条目和度量值
![image-20200314140810387](08.RIP/image-20200314140810387.png)
- RIPv1的更新数据内容中没有子网掩码所以RIPv1是不知道原始的子网掩码是多少只能根据ABC类IP地址来判断所以RIP是有类路由协议。
- RIP是周期性发送路由更新消息并且使用广播地址来发送。
- RIP每30秒发送更新消息接收方在收到消息之后会重置路由的计时器。
```
R1#show ip protocols
Routing Protocol is "rip"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Sending updates every 30 seconds, next due in 13 seconds
Invalid after 180 seconds, hold down 180, flushed after 240
Redistributing: rip
Default version control: send version 1, receive any version
Interface Send Recv Triggered RIP Key-chain
Ethernet0/0 1 1 2 No none
Loopback0 1 1 2 No none
Automatic network summarization is in effect
Maximum path: 4
Routing for Networks:
1.0.0.0
192.168.12.0
Routing Information Sources:
Gateway Distance Last Update
192.168.12.2 120 00:00:15
Distance: (default is 120)
```
![image-20200314141743163](08.RIP/image-20200314141743163.png)
### 2.3 RIPv2
#### 2.3.1 和RIPv1的区别
- RIP是周期性发送路由更新消息并且使用组播地址(224.0.0.9)来发送。
- RIPv2的更新消息中比RIPv1多出来
- Route Tag给路由条目加上标记方便后期对条目进行管理。
- netmask子网掩码也就是RIPv2是无类路由协议可以根据子网掩码来学习路由
- next hop默认都是0也就是不携带意思是哪里学来的条目下一跳就指向谁
![image-20200314142323414](08.RIP/image-20200314142323414.png)
### 2.4 RIP路由汇总
#### 2.4.1 自动汇总
RIP默认开启自动汇总RIPv1不支持关闭
自动汇总会将VLSM的路由条目根据ABC类IP地址将路由匹配位数写成/8,/16,/24
我们在R1和R3上都创建一个loopback接口并且配置一个IP地址。
```
R1
int lo100
ip add 100.1.1.1 255.255.255.0
router rip
network 100.0.0.0
====================
R4
int lo100
ip add 100.4.4.4 255.255.255.0
router rip
network 100.0.0.0
```
观察R2和R3路由表中`100.0.0.0/8`的条目
```
R2#sh ip route rip
R 100.0.0.0/8 [120/1] via 192.168.12.1, 00:00:25, Ethernet0/0
=============================
R3#sh ip route rip
R 100.0.0.0/8 [120/1] via 192.168.34.4, 00:00:27, Ethernet0/1
```
观察路由器到达R1和R4的情况
```
R2#ping 100.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
R2#ping 100.4.4.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.4.4.4, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)
```
虽然R2能够从R3和R1都收到`100.0.0.0/8`的条目,但是路由表只会使用最佳条目,对比度量值(在RIP中是跳数)发现R1传过来的是1R3传过来的是2所以路由表中关于`100.0.0.0/8`只有R1的方向。
关键的问题是在于RIP会自动将子网划分的条目去除子网比如`100.1.1.0/24`变成`100.0.0.0/8`这么做被称为路由自动汇总。我们一般将其关闭,不然在子网众多的网络中会出现上述问题。
由于子网划分需要子网掩码所以RIPv1不支持关闭自动汇总。
```
R1-4
router rip
no auto-summary # 关闭自动汇总只有v2支持
do clear ip route *
# RIP更新机制的原因导致路由发生变化更新极慢可以用这个命令快速刷新路由表
```
关闭了自动汇总以后RIPv2会根据接口配置的子网掩码来更新路由条目。这种条目被称为明细路由。
#### 2.4.2 手动汇总
只有RIPv2支持手动汇总在路由更新的出口方向配置可以对下游路由器造成影响。
注意,配置路由汇总的那台路由器,路由表中的明细路由不会受到影响。
在R1上配置三个lo接口然后我们在R2上进行汇总
```
R1
int lo1
ip add 172.16.1.1 255.255.255.0
int lo2
ip add 172.16.2.1 255.255.255.0
int lo3
ip add 172.16.3.1 255.255.255.0
router rip
network 172.16.0.0
======================================
R2
int e0/1
ip summary-address rip 172.16.0.0 255.255.0.0
```
然后观察路由更新下游的情况
```
R3
R3#sh ip route rip
R 172.16.0.0/16 [120/2] via 192.168.23.2, 00:00:03, Ethernet0/0
```
我们可以看到现在只有一条汇总路由
观察一下R2的路由表
```
R2#sh ip route rip
172.16.0.0/24 is subnetted, 3 subnets
R 172.16.1.0 [120/1] via 192.168.12.1, 00:00:06, Ethernet0/0
R 172.16.2.0 [120/1] via 192.168.12.1, 00:00:06, Ethernet0/0
R 172.16.3.0 [120/1] via 192.168.12.1, 00:00:06, Ethernet0/0
```
R2的路由表没有影响到明细路由
路由汇总,是将明细路由抑制向下游更新,并且产生一条新的汇总条目,然后更新出去。
#### 2.4.3 RIP的默认路由
如果R1是公司网络的出口R1还连接着运营商那么R1就有义务向所有的RIP路由器通告一条*的路由。
```
router rip
default-information originate
```
然后我们检查下游路由器的路由表
```
R2#sh ip route rip
Gateway of last resort is 192.168.12.1 to network 0.0.0.0
R* 0.0.0.0/0 [120/1] via 192.168.12.1, 00:00:01, Ethernet0/0
```
现在内网所有的路由器都知道了如果路由表中匹配不上的条目可以从R1走。
### 2.5 RIP的认证
只有RIPv2支持认证也就是在更新消息中加入认证信息。
在CISCO设备中可以使用`key chain`来提供认证的需要的密码。
```
key chain <钥匙环名字>
key <编号>
key-string <密码>
accept-lifetime <起始时间> <结束时间> # 能够被匹配的时间
send-lifetime <起始时间> <结束时间> # 发送的时间
```
RIPv2支持明文认证和密文认证
明文认证就是把密码明文的发送,这样很蠢,因为抓包能直接看到密码
在R1上配置认证
```
R1
key chain huawei
key 1
key-string cisco1
int e0/0
ip rip authentication mode text
ip rip authentication key-chain huawei
```
只配置R1的情况下我们在R2上调试RIP协议可以发现认证无效的警告
```
R2#debug ip rip events
*Mar 14 07:24:25.541: RIP: ignored v2 packet from 192.168.12.1 (invalid authentication)
```
在R2上配置好认证就可以正常的学习路由
抓包,发现明文密码。
![image-20200314153035435](08.RIP/image-20200314153035435.png)
更改为密文加密
![image-20200314153512307](08.RIP/image-20200314153512307.png)
### 2.6 RIP防环机制
#### 2.6.1 环路的产生
![image-20200314153744703](08.RIP/image-20200314153744703.png)
R3会将e0/1的网段更新给R2
![image-20200314153830761](08.RIP/image-20200314153830761.png)
R2收到了之后会更新给自己相邻的路由器然而R3直连接口是192.168.34.0管理距离是0所以R3不会接收R2的更新。
![image-20200314154014478](08.RIP/image-20200314154014478.png)
但是如果R3的e0/1接口损坏就回导致R3开始学习R2更新的192.168.34.0的条目
![image-20200314154123472](08.RIP/image-20200314154123472.png)
最终出现R3认为去往192.168.34.0/24需要走R2而R2认为需要走R3最终形成环路。
#### 2.6.2 防环机制1最大跳数
RIP使用跳数去衡量一个路线的好坏为了防止环路规定最大跳数是15跳。
一个路由条目最多传递15个节点这个也导致RIP无法用于大型网络。
##### 2.6.2.1 offset-list 偏移列表
可以用于修改距离矢量协议的度量值
我们在R2上修改1.1.1.0/24的跳数为13跳然后观察R3
```
R2(config)#access-list 1 permit 1.1.1.0
R2(config-if)#router rip
R2(config-router)#offset-list 1 out 13
====================================
R3#sh ip route rip
R 1.1.1.0 [120/15] via 192.168.23.2, 00:00:04, Ethernet0/0
```
由于在R3上已经达到15跳最大的跳数所以在R4的路由表中就学习不到`1.1.1.0`
```
R4#sh ip route rip
R* 0.0.0.0/0 [120/3] via 192.168.34.3, 00:00:01, Ethernet0/0
2.0.0.0/24 is subnetted, 1 subnets
R 2.2.2.0 [120/2] via 192.168.34.3, 00:00:01, Ethernet0/0
3.0.0.0/24 is subnetted, 1 subnets
R 3.3.3.0 [120/1] via 192.168.34.3, 00:00:01, Ethernet0/0
100.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
R 100.1.1.0/24 [120/3] via 192.168.34.3, 00:00:01, Ethernet0/0
R 172.16.0.0/16 [120/3] via 192.168.34.3, 00:00:01, Ethernet0/0
R 192.168.12.0/24 [120/2] via 192.168.34.3, 00:00:01, Ethernet0/0
R 192.168.23.0/24 [120/1] via 192.168.34.3, 00:00:01, Ethernet0/0
```
#### 2.6.3 防环机制2水平分割
路由器从某个接口学到的路由不会在发送回给邻居路由器,水平分割是默认开启的
比如R2给R3的更新中就不包含从R3那边收到的条目
![image-20200314155023560](08.RIP/image-20200314155023560.png)
#### 2.6.4 防环机制3 毒性反转
路由器从某个接口学到路由后将该路由的条数设置为16跳并从原接受接口发送回给邻居路由器
#### 2.6.5 防环机制4 路由毒化
当路由表中某个直连条目消失了会立马发送一个该路由条目的更新但是会将其跳数改成16跳来让相邻路由器快速删除这个条目。
![image-20200314155500891](08.RIP/image-20200314155500891.png)
#### 2.6.6 防环机制5 触发更新
当路由表发生变化的时候会立马的更新条目而不用等到30s周期的到来
#### 2.6.7 防环机制6 更新计时器
见基本概念里面的计时器相关内容
### 2.7 RIP被动接口
由于RIP的更新是周期性的这就导致RIP路由器之间的链路会不停收到广播或者组播。
![image-20200314160046640](08.RIP/image-20200314160046640.png)
像上图这种情况PC会不停的收到RIP发来的无用信息所以RIP出现被动接口功能。
开启了被动接口之后RIP不会主动发出任何的广播或者组播比如要手动指定邻居RIP才会以单播更新条目。
```
R1
router rip
passive-interface Ethernet0/0
neighbor 192.168.12.2
=================================
R1
router rip
passive-interface Ethernet0/0
neighbor 192.168.12.1
```
![image-20200314160558514](08.RIP/image-20200314160558514.png)
之后的RIP就会以单播开始更新
疑问RIP可以不直连传递路由条目么