目录
? 1. IP路由协议概述? 1.1 路由表? 1.2 路由的度量尺度/度量值? 1.3 路由管理距离 ? 2. RIP协议? 2.1 概述? 2.2 工作原理 ? 3. 报文格式? 3.1 RIP 协议报文? 3.2 RIP2 路由项? 3.3 RIP 请求报文? 3.4 RIP 鉴别报文? 3.5 报文发送 ? 4. 计数到无穷问题及协议改进? 4.1 计数到无穷? 4.2 改进:水平分割? 3.3 改进:触发更新 ? 5. 实验:静态路由和RIP配置? 5.1 静态路由? 5.2 RIP配置
? 1. IP路由协议概述
路由器接收到一个 IP 分组后:
从分组首部提取目的 IP 地址,检测目的地址是否属于某个直连网络,若属于则直接发送; 否则,在路由表中查找是否存在主机路由(静态或动态);否则,在路由表中查找匹配的路由;否则,在路由表中查找默认路由;否则,丢弃分组,向源主机发送 ICMP 差错报文; 经过多次接力转发,分组可以从源主机传输到目的主机。? 1.1 路由表
路由表为分组转发提供了到达目的地址的“最佳路径”。
路由项的基本信息:
<目的网络地址,下一跳地址,转发接口,路由代价>
Router#show ip routeCodes: C-connected, S-static, R-RIP, D-EIGRP,EX-EIGRP external,O-OSPF, IA-OSPF inter areaE1-OSPF external type 1,E2-OSPF external type 2,*-candidate defaultGateway of last resort is 10.5.5.5 to network 0.0.0.0172.16.0.0/24 is subnetted, 1 subnetsC 172.16.11.0 is directly connected, serial1/2O 172.22.0.0/16 [110/20] via 10.3.3.3,01:03:01, Serial1/2S* 0.0.0.0/0 [1/0] via 10.5.5.5
“C”代表该路由信息来源是直连网段。“O”代表该路由信息来源是通过OSPF动态路由协议。“S”代表该路由信息来源是静态路由。“172.22.0.0/16”表示其目标网段为172.22.0.0,其子网掩码为255.255.0.0。“[110/20]”就是指管理距离/度量值,OSPF的管理距离为110, 其度量值为20“10.3.3.3”是指数据包要想到达“172.22.0.0/16”的下一个转发路由器端口地址。“01:03:01”说明动态路由己学到该路由,且该路由已经存在1小时3分1秒。“Serial1/2”说明IP数据包将由本地路由Serial1/2接口发送出去。 路由表中的路由信息主要通过三种方式获得:
添加直连路由:到达路由器直接连接网络的路由。添加静态路由:网络管理员手动添加的路由。计算动态路由:在路由协议控制下,路由器之间通过交换路由信息而自动建立的路由。? 1.2 路由的度量尺度/度量值
跳数(Hop Count):最常用的路由度量尺度。它是数据包从源到达目的地途中经过的路由器的数目。 RIP路由选择协议就使用跳数度量值。 可信度(Reliability):网络连接的可靠性指标,链路的差错率。任何可靠性因素都能够影响可信度级别。 可信度级别通常由网络管理员指定给网络连接。 延时(Delay):延时是一种常用的有效度量尺度。它指数据包从源到达目的地所要求的时间。 延迟取决于多种因素,包括中继网络连接的带宽、路径上各路由器端口的数据包队列长度,中继网络连接的堵塞以及传输的物理距离。 带宽(Bandwidth):体现了网络连接可用的交通容量,链路的速度。 在所有其他条件相同的情况下,10Mbps以太网连接比64Kbps专线更可取。尽管带宽表明网络连接可达到的最大传输能力,但通过更大带宽连接的路由不一定比通过较慢连接的路由更好。 负载(Load):负载指网络设备(如路由器)的繁忙程度。可以根据各种各样的参数来计算负载,包括CPU利用率和每秒被处理的包的数目。 对这些参数持续不断的监视也会加重设备本身的负担。 通信代价(Communication Cost):又称为通信成本、通信开销等,也是一个重要的度量值。 OSPF协议就使用通信代价作为度量值。 管理距离(Administrative Distance):是路由器用来评价路由信息可信度的一个指标,定义了路由来源的优先级别。? 1.3 路由管理距离
管理距离是从0到255
的整数值,对于每个路由来源,包括特定路由协议、静态路由又或是直连网络,使用管理距离值按从低到高的优选顺序来排定优先级。
路 由 来 源 管理距离 直连路由 0 以一个接口为出口的静态路由 0 以下一跳为出口的静态路由 1 EIGRP 的归纳路由 (Summary Route) 5 外部 BGP (EBGP) 路由 20 内部 EIGRP 90 IGRP 100 OSPF 110 IS-IS 115 RIP (V1 和 V2) 120 外部 EIGRP 路由 170 内部 BGP (IBGP) 路由 200 不可信路由 255 \begin{array}{|c|c|} \hline \text { 路 由 来 源 } & \text { 管理距离 } \\ \hline \text { 直连路由 } & 0 \\ \hline \text { 以一个接口为出口的静态路由 } & 0 \\ \hline \text { 以下一跳为出口的静态路由 } & 1 \\ \hline \text { EIGRP 的归纳路由 (Summary Route) } & 5 \\ \hline \text { 外部 BGP (EBGP) 路由 } & 20 \\ \hline \text { 内部 EIGRP } & 90 \\ \hline \text { IGRP } & 100 \\ \hline \text { OSPF } & 110 \\ \hline \text { IS-IS } & 115 \\ \hline \text { RIP (V1 和 V2) } & 120 \\ \hline \text { 外部 EIGRP 路由 } & 170 \\ \hline \text { 内部 BGP (IBGP) 路由 } & 200 \\ \hline \text { 不可信路由 } & 255 \\ \hline \end{array} 路 由 来 源 直连路由 以一个接口为出口的静态路由 以下一跳为出口的静态路由 EIGRP 的归纳路由 (Summary Route) 外部 BGP (EBGP) 路由 内部 EIGRP IGRP OSPF IS-IS RIP (V1 和 V2) 外部 EIGRP 路由 内部 BGP (IBGP) 路由 不可信路由 管理距离 00152090100110115120170200255
? 2. RIP协议
? 2.1 概述
RIP(Routing Information Protocol)即选路信息协议,是一种基于距离向量算法的动态路由选择协议,是内部网关协议IGP中最先得到广泛使用的协议之一。
优点:简单缺点:适用于小型互连网标准:
RFC 1058:RIP1RFC 2453:RIP2,支持 CIDR、简单的鉴别及组播发送RFC 2080:RIPng,支持 IPv6特点:
RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡。? 2.2 工作原理
距离:
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Vector)" 。
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的代价(cost)。
路由器到直连网络的距离定义为1
。
路由器到非直连网络的距离定义为所经过的路由器数加1
。
允许一条路径最多只能包含15个路由器。“距离”等于16
时相当于不可达。
路由表交换:
RIP 协议规定,相邻路由器(通过同一网络连接的路由器)之间周期性交换各自的路由表。 路由表交换周期是30
秒。周期性不是严格的:发送前附加一段随机延迟(0 到 5 秒)。原因:避免大量路由器同时发送路由表而造成网络拥塞。 报文发送:
RIP 使用 UDP 协议进行路由信息交换。RIP1 和 RIP2 使用 UDP520
端口发送或接收 RIP 报文。
路由更新:
RIP的路由条目的更新规则:
发现了新的网络,添加到达目的网络,不同下一跳,新路由优势,更新到达目的网络,不同下一跳,等价负载均衡到达目的网络,相同下一跳,最新消息,更新到达目的网络,不同下一跳,新路由劣势,不更新故障处理:
实际环境中,网络或路由器可能出现故障。从上一次接收到邻居路由器发送的路由表起,如果经过 180 秒还没有收到新的发送,就假定: 连接邻居路由器的网络发生故障,或邻居路由器发生故障。(跳数置为15
) 路由器立即更新自己与故障相关的路由表项,并在随后的发送周期中将新的路由表发送给邻居路由器。 经过有限次的路由表交换后,RIP 协议将达到新的收敛状态。 RIP处理流程:
? 3. 报文格式
? 3.1 RIP 协议报文
RIP 协议报文由固定首部和路由项列表组成。
固定首部包括3
个字段,占4
个字节。“命令”字段指明发送该报文的目的,占1
个字节。 命令字段为1
时是请求报文,表明请求接收方发送其全部或部分路由表;命令字段为2
时是响应报文,表明报文携带有发送方的全部或部分路由表。响应报文可以是对请求报文的回应,也可以是发送方周期性的路由表发送。周期性发送也称为非请求响应。 “版本”字段指明RIP协议的版本号,占1
个字节,RIP1协议设置为1
,RIP2协议设置为2
。第三个字段没有使用,占2
个字节,必须置为0
。路由项列表包括最多 25
个路由项。每个路由项描述了一条路由。 ? 3.2 RIP2 路由项
路由项有固定的格式,占20
个字节,分为6
个字段。
2
个字节。对IPv4
协议,地址族标识符定义为2
。“路由标记”字段占2
字节,是分配给该路由项的一个属性值,主要用于区分内部RIP路由和外部RIP路由。内部RIP路由是来自自治系统内部RIP协议的路由;外部RIP路由是来自其他自治系统RIP协议的路由。例如可用自治系统编号作路由标记。路由器在向邻居通告一条路由时,必须保持该路由的标记不变。字段“IP地址”和“子网掩码”共同标识了该路由项的目的地址。如果IP地址字段是全0地址(0.0.0.0
),表示是默认路由。“下一跳”字段指明了报文接收方路由器到达目的地址的下一跳地址。如果是全0地址(0.0.0.0
),表明报文接收方路由器到达目的地址的下一跳就是报文发送方路由器,其地址就是携带RIP报文IP分组的源地址。“距离”字段指明了从报文发送方路由器或下一跳字段地址到达目的地址路由的距离。 ? 3.3 RIP 请求报文
RIP 路由器可通过向邻居发送 RIP 请求报文的方式显式地请求其全部或部分路由表。
全部路由表请求用于路由表建立:路由器启动时,可向邻居发送 RIP 请求报文,请求邻居将其整个路由表发送给自己。 请求报文中只有1
个路由项,且地址族标识符是 0
、距离是无穷(16)。若路由数量超过一个 RIP 报文的携带能力,接收方可构造多个响应报文。 部分路由表请求主要用于路由监测:请求方可以是一台能够发送、接收及处理 RIP 报文的主机(不参与 RIP 路由交换)。 请求报文中的路由项列表列出了所请求的路由。构造响应报文时,接收方在其路由表中逐项查找相应路由项,若存在,就在距离字段填入其距离值;否则,在距离字段填 16
。 ? 3.4 RIP 鉴别报文
RIP2 中路由器可对每个接收的报文进行鉴别(authentication)。
鉴别信息占用了第一个路由项的 20
字节:
0xFFFF
路由标记:命名为鉴别类型(authentication type),用于区分不同的鉴别机制。 RFC 2453 只定义了一种简单的密码鉴别:
鉴别类型:2
路由项中剩余的 16
字节包含了鉴别用的明文密码(若密码不足16字节,靠左对齐并补 0
)。 ? 3.5 报文发送
RIP1 中路由器用广播(broadcast)方式向邻居发送 RIP 报文。RIP2 中路由器以组播(multicast)方式向邻居发送RIP报文。 减少了对不参与 RIP 路由交换主机的影响;不需要组播管理协议(IGMP)的支持:只在相邻路由器间交换报文。? 4. 计数到无穷问题及协议改进
? 4.1 计数到无穷
RIP 协议通过在邻居路由器之间周期性交换路由表达到收敛状态:
周期约 30 秒收敛速度慢网络发生故障时:
存在"坏消息传播很慢"的问题,又称为路由环路(两个路由器相互学习错误路由,造成循环)或计数到无穷(counting to infinity)问题10
,其余网络的代价都是1
。为了表述简单,只关注路由表中到达目标网络的路由表项。左侧的表格给出了各路由器到达目标网络的最优路由。 某时刻 B 和 D 之间的网络发生了故障,则到达目标网络应通过C和D之间的网络:
T0
时刻,路由器B
通过超时机制发现B
和D
之间的网络发生故障,其将自己通过D
到达目标网络的路由项设置为不可达(Unreachable)。但此时A
和C
仍认为可通过B到达目标网络。在T1
时刻,相邻路由器之间交换路由表,B
接收到A
和C
的路由表后,认为可通过A
或C
到达目标网络(距离都是4
;实际上不可能,因为通过A
或C
到达目标网络又要经过B
,而B
无法到达目标网络。),表中B
根据C
发送的路由项更新了自己到达目标网络的路由项。A
接收到B
和C
的路由表后,根据距离向量算法,会选择通过C
到达目标网络(通过B
无法到达,通过C
的距离是4)。C
可以接收到A
,B
和D
发送的路由表,C
会选择通过A
去往目标网络(通过B
无法到达目标网络,通过D
到达目标网络的距离是11
,通过A
到达目标网络的距离是4
。)。T2
到T7
时刻的路由表交换与T1
时刻类似,在此不再赘述。直到T8
时刻,路由器C
才找到正确的去往目标网络的路由(通过C
和D
之间的网络)。在下一个交换周期,A
和B
也找到了正确的路由。 在最坏的情况下,当网络实际不可达时,到达该网络路由的距离要增加到无穷(16
),路由才会收敛,此称为计数到无穷问题。
这是距离向量算法的一个固有问题,可以采取多种措施减少出现该问题的概率或减小该问题带来的危害。
因此,RIP协议中用于表示无穷的距离值不能太大,以便在发生故障情况下路由能尽快收敛。RIP中采用16
表示无穷大,这是在网络直径与路由收敛速度之间的一个折中。
RIP协议采用水平分割技术和触发更新技术来尽量避免此类问题的发生。
? 4.2 改进:水平分割
前述例子中,路由收敛慢的原因在于路由器 A 和 C 之间形成了一个循环路由:各自以对方为到达目标网络的下一跳路由器。
路由器把从邻居学习到的路由再发送给邻居就有可能形成循环路由。
简单水平分割(simple split horizon):禁止将从邻居学习到的路由再回送给邻居。
带毒性逆转的水平分割(split horizon with positioned reverse):允许路由器在发送的路由表中包含从邻居学习到的路由,但将这些路由的距离置为无穷(16
)。
? 3.3 改进:触发更新
循环路由也可能存在于多个路由器之间。
例如,路由器 A 认为到达某网络可经由路由器 B,B 认为可经由 C,而 C 又认为可经由 A。水平分割技术只能避免在两个邻居路由器之间形成的环路,在这种情况下不起作用。
触发更新含义:
任何时候,当更新了一条路由时,路由器就立即向其邻居发送路由更新消息,而不必等到下一个发送周期时再发送;邻居路由器更新路由表后,若存在改变的路由,也立即再向其邻居发送路由更新消息。这种级联(cascading)的触发更新使路由变化尽快在网络中扩散开来,加速路由收敛。
在触发更新扩散路由信息的过程中,路由器也会进行正常的周期性路由表交换。如果触发更新尚未扩散到的路由器发送了正常的周期性路由交换消息,那些已经被触发更新影响的路由器有可能会重新采用旧的路由,从而再次建立循环路由。触发更新技术并不能完全避免循环路由问题。如果触发更新能在很短时间内完成路由信息的扩散,形成环路路由的可能性很低。【2016年题37】假设R1、R2、R3采用RIP协议交换路由信息,且均已收敛。若R3检测到网络201.1.2.0/25不可达,并向R2通告一次新的距离向量,则R2更新后,其到达该网络的距离是()
A.2
B.3
C.16
D.17
解析:根据题目所给“R3检测到网络201.1.2.0/25不可达”可知,R3与该网络是直连的。
又根据题目所给“R1、R2、R3采用RIP协议交换路由信息,且均已收敛”可知,先前它们各自的路由表中关于该目的网络的路由条目分别是:
再根据题目所给“R3检测到网络201.1.2.0/25不可达,并向R2通告一次新的距离向量”可知,R3与该网络之间的链路出现了故障。当R3检测到该故障时,将自己到达该网络的路由条目中的距离修改为16,表示不可达。并向R2发送关于这条路由条目的通告。R2收到后将距离修改为16。
最后根据题目所给“则R2更新后”可知,R1给R2发送了关于该路由条目的RIP更新报文,而R2听信了该谣言,误认为到达该目的网络可以通过R1的转发,距离为3。
因此选B。
? 5. 实验:静态路由和RIP配置
题目:R2为某公司总部,R1和R3是两个分部,主机PC1和PC2所在的网段分别模拟两个分部中的办公网络。现需要总部和各个分部,各个分部之间能够实现通信。分别使用静态路由和RIP路由协议实现需求。
设备名 | 端口 | ip地址 | 掩码 | 默认网关 |
---|---|---|---|---|
R1 | f2/0 | 192.168.1.254 | 255.255.255.0 | N/A |
f0/0 | 10.1.1.1 | 255.255.255.0 | N/A | |
R2 | f0/1 | 10.1.1.2 | 255.255.255.0 | N/A |
f0/0 | 10.1.2.1 | 255.255.255.0 | N/A | |
R3 | f0/1 | 10.1.2.2 | 255.255.255.0 | N/A |
f2/0 | 192.168.2.254 | 255.255.255.0 | N/A | |
PC1 | E0 | 192.168.1.1 | 255.255.255.0 | 192.168.1.254 |
PC2 | E0 | 192.168.2.1 | 255.255.255.0 | 192.168.2.254 |
? 5.1 静态路由
实验步骤:
一、配置静态路由:R2上配置到192.168.1.0/24和192.168.2.0/24网段的静态路由。
R2(config)#ip route 192.168.1.0 255.255.255.0 10.1.1.1R2(config)#ip route 192.168.2.0 255.255.255.0 10.1.2.2
二、配置默认路由:R1和R3上配置默认路由。
R1(config)#ip route 0.0.0.0 0.0.0.0 f0/0R3(config)#ip route 0.0.0.0 0.0.0.0 f0/1
三、查看路由配置情况
R1#show ip route R2#show ip route R3#show ip route
? 5.2 RIP配置
实验步骤:
一、在R1上配置RIP
# 启动RIPR1(config)#router rip# 指定RIP的版本R1(config-router)#version 2# 关闭路由聚合R1(config-router)#no auto-summary# 指定直连网段R1(config-router)#network 192.168.1.0R1(config-router)#network 10.1.1.0# 指定被动接口R1(config-router)#passive-interface f2/0
二、在R3上配置RIP
# 启动RIPR3(config)#router rip# 指定RIP的版本R3(config-router)#version 2# 关闭路由聚合R3(config-router)#no auto-summary# 指定直连网段R3(config-router)#network 192.168.2.0R3(config-router)#network 10.1.2.0# 指定被动接口R3(config-router)#passive-interface f2/0
三、在R2上配置RIP
# 启动RIPR2(config)#router rip# 指定RIP的版本R2(config-router)#version 2# 关闭路由聚合R2(config-router)#no auto-summary# 指定直连网段R2(config-router)#network 10.1.1.0R2(config-router)#network 10.1.2.0
四、查看路由信息
R1#show ip route R2#show ip route R3#show ip route
五、抓包分析
在R1和R2的链路上启动抓包,在wireshark的显示过滤器设置过滤条件为rip.version==2
❗ 转载请注明出处
作者:HinsCoder
博客链接:? 作者博客主页