RIP(7/19,84min)
路由信息协议RIP(Routing information protocol),基于距离矢量
配置简单;易于维护;适合小型网络
源目端口都是UDP 520
周期性更新(大概30s)
[RouterA]rip 1
[RouterA-rip-1]ver 2
[RouterA-rip-1]net 12.0.0.0
//接口地址匹配主类则加入rip进程,如12.0.0.1(gi0/0/0)加入rip进程
[RouterA-rip-1]net 1.0.0.0
[RouterB]rip 1
[RouterB-rip-1]ver 2
[RouterB-rip-1]net 12.0.0.0
[RouterB-rip-1]net 2.0.0.0
此时2.2.2.2可以Ping通1.1.1.1
[RouterB]ping -a 2.2.2.2 1.1.1.1
RIP工作原理
路由器运行RIP后,首先发送路由更新请求,收到请求的路由器会发送自己的RIP路由进行响应。
网络稳定后,路由器会周期性(30s)蠢发送路由更新信息。(直连路由优先于RIP,故路由表中优先出现直连路由)
[RouterB]dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 11 Routes : 11
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.0/24 RIP 100 1 D 12.0.0.1 GigabitEthernet
0/0/0
2.2.2.0/24 Direct 0 0 D 2.2.2.2 LoopBack1
2.2.2.2/32 Direct 0 0 D 127.0.0.1 LoopBack1
2.2.2.255/32 Direct 0 0 D 127.0.0.1 LoopBack1
12.0.0.0/24 Direct 0 0 D 12.0.0.2 GigabitEthernet
0/0/0
12.0.0.2/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
12.0.0.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
RIP传递路由信息为A→B→C,每次传递都需要30s
RIP度量
RIP使用跳数作为度量值来衡量到达目的网络的距离;
缺省情况下,直连网络的路由跳数为0,当路由器发送路由更新时,会将度量值加1;(发送时即+1,而非对方收到后对方+1)
RIP规定超过15跳为网络不可达。(15跳为最大,16跳即不可达,当删除一条RIP路由时,传递信息会显示该路由跳数为16,且超过16时则不在路由表中显示,如下)
[RouterB]rip 1
[RouterB-rip-1]undo net 2.0.0.0
RIP v1与RIP v2
RIPv1:
有类路由协议,不支持VLSM和CIDR;以广播形式发送报文;不支持认证
RIPv2:
无类路由协议,支持VLSM,支持路由聚合与CIDR;支持以广播或者组播(224.0.0.9)方式发送报文;支持明文认证与MD5密文认证。(明文认证抓包可见)
RIPv2版本下的路由信息:
改成V1试试?
[RouterB]rip
[RouterB-rip-1]ver 1
再抓包:目标地址为广播,且路由信息没有掩码。
RIP v1报文格式、RIP v2报文格式及RIP v2认证
略
RIP环路
如果RouterB删除路由2.0.0.0,且当前没有防环机制(进入两台路由器,接口视图下undo rip split-horizon,此命令默认开启,用于防环,当前关闭此机制用于演示)
[RouterA-rip-1]int gi0/0/0
[RouterA-GigabitEthernet0/0/0]undo rip split-horizon
[RouterB-rip-1]int gi0/0/0
[RouterB-GigabitEthernet0/0/0]undo rip split-horizon
[RouterB-rip-1]undo net 2.0.0.0
此时RouterB已经失去了2.0.0.0路由,应该发送metric为16的2.0.0.0给RA,但在这30s还未到达时(时间差),RouterA传递2.0.0.0(之前第一次从RouterB学习的路由)给RouterB,跳数为2,RouterB收到后确认metric 2优于metric 16,故重新收录2.0.0.0且再次传递给RouterA,如此往复,直到路由到达16跳,此时双方才会删除这条路由,路由回环结束。
正常情况下(即开启水平分割split-horizon时),RouterB的2.0.0.0路由跳数为0,传递给RouterA时为1,若RouterA再传递给B,跳数为2,RouterB会拒绝(因为自身存在更优,即跳数更小的路由)
正常情况下,若RouterB undo network 2.0.0.0,RouterB立即更新信息传递给RouterA,且因为水平分割,RouterA不会将原有的2.0.0.0传递回给RouterB,故双方会即刻删除2.0.0.0路由,不引发环路。
环路避免-水平分割
路由器从某个接口学到的路由,不会从该接口再回发给邻居路由器。 (我已经告诉你的事情你就别再告诉我了)
环路避免-触发更新
触发更新是指当前路由信息发送变化时,立即向邻居设备发送触发更新报文
路由稳定时,更新周期默认为30s
环路避免-毒性反转/毒性逆转/路由中毒
毒性反转是路由器从某个接口学到路由后,将该路由的跳数设置为16,并从原接口发回给邻居路由器。(默认不生效)
若与水平分割同时使能,则毒性反转机制优先
[RouterB]int GigabitEthernet 0/0/0
[RouterB-GigabitEthernet0/0/0]rip poison-reverse
其他
若路由器存在2个接口Gi 0/1 172.16.0.1/24与Gi 0/2 172.16.1.1/24
但是宣告进程只能network 172.16.0.0,2个接口都会加入rip进程,我只需要172.16.1.1运行RIP,应该怎么办?
[RouterB]int gi
[RouterB]int GigabitEthernet 0/1
[RouterB-GigabitEthernet0/1]undo rip input
//禁止接收RIP数据包
[RouterB-GigabitEthernet0/1]undo rip output
//禁止接收RIP数据包
[RouterB]rip
[RouterB-rip-1]silent-interface GigabitEthernet 0/1
//配置被动/抑制接口,对于RIP数据包只收不发
[RouterB]int GigabitEthernet 0/0/0
[RouterB-GigabitEthernet0/0/0]rip metricin 5
//从该接口接收的路由Metric加5,默认为1
[RouterB-GigabitEthernet0/0/0]rip metricout 5
//从该接口发出的路由Metric直接变为5
抑制接口的优先级大于rip input/output
以上命令都用于控制RIP选路问题