· 本章目的
· 路由协议的分类
· 距离矢量路由协议:RIP、BGP
· 链路状态路由协议:OSPF、IS-IS
· 距离矢量路由协议的含义:
· 距离和方向矢量通告路由。距离使用诸如跳数这样的度量确定,而方向则是下一跳路由器或送出接口,距离矢量最典型的协议就是RIP协议。
· 使用距离矢量路由协议的路由器并不了解目的网络的整条路径,也就是使用距离矢量路由的路由器不了解网络拓扑结构,该路由器只知道:
· ⑴ 应该往哪个方向或使用哪个接口转发数据包。
· ⑵ 自身与目的网络之间的距离。
· 如图:
·
· R1到达4.0网段为1跳。 (隔了几个路由器就是几跳),最高为15跳,超过15跳为通告为不可到达。
· RIP路由协议的特征
· ⑴ RIP使用跳数作为路径选择的唯一度量。
· ⑵ 将跳数超过15的路由通告为不可达。
· ⑶ 每30s广播一次消息,发送一个路由更新。
· (4)基于UDP传输,端口号520
· RIP版本特性
· RIPV2 是无类路由协议,RIPV1不能支持VLSM(变场子网) RIPV2 支持VLSM
· RIP环路产生原理:
· 路由器A会将针对目标网络C的路由表项的metric值置为16,即标记为目标网络不可达,并准备在每30秒进行一次的路由表更新中发送出去,如果在这条信息还未发出的时候,A路由器收到了来自B的路由更新报文,而路由器B中包含着关于网络C的metric为2的路由信息,根据前面提到的路由更新方法,路由器A会错误的认为有一条通过路由器B的路径可以到达目标网络C,从而更新其路由表,将对于目标网络C的路由表项的metric值由16改为3,而对于的端口变为与路由器B相连接的端口。很明显,路由器A会将该条信息发给路由器B,路由器B将无条件更新其路由表,将metric改为4;该条信息又从路由器 B发向路由器A,路由器A将metric改为 5......最后双发的路由表关于目标网络C的metric值都变为16,此时,才真正得到了正确的路由信息。这种现象称为"计数到无穷大"现象,虽然最终完成了收敛,但是收敛速度很慢,而且浪费了网络资源来发送这些循环的分组。
· 路由环路避免方法
· 触发更新
· 若网络中没有变化,则按通常的30秒间隔发送更新信息。但若有变化,路由器就立即发送其新的路由表。这个过程叫做触发更新。触发更新可提高稳定性。每一个路由器在收到有变化的更新信息时就立即发出新的信息,这比平均的15秒要少得多。虽然触发更新可大大地改进路由选择,但它不能解决所有的路由选择问题。例如,用这种方法不能处理路由器出故障的问题。
· 路由毒化
· 所谓路由毒化就是路由器如果发现某个网络段开时,并不是把该路由删除,而是把它标记为16跳或者不可达,并立即通告别的路由器。(无法完全避免环路)
· 水平分割
· 在发送路由选择报文时使用了选择性;路由器必须区分不同的接口。如果路由器从一个接口已经收到了路由更新信息,那么这个同样的更新信息一定不能再通过这个接口回送过去。
· 毒性逆转
· 是水平分割的一种变型。使用这种方法时,路由器收到的信息用来更新路由表,然后通过所有的接口发送出去。但是,已经从一个接口来的一个路由表项目在通过同样的接口发送出去时,就要将其度量置为16。缺省情况下,H3C路由器水平分割是使能状态,毒性逆转是关闭
· 抑制时间
· 一条路由信息无效之后,一段时间内这条路由都处于抑制状态,即在一定时间内不再接收关于同一目的地址的路由更新。如果,路由器从一个网段上得知一条路径失效,然后,立即在另一个网段上得知这个路由有效。这个有效的信息往往是不正确的,抑制计时避免了这个问题,而且,当一条链路频繁起停时,抑制计时减少了路由的浮动,增加了网络的稳定性。
· RIP的基本配置
· [RTA] rip //不打默认为1
· [RTA-rip-1] network 10.0.0.0
· [RTA-rip-1] network 192.168.0.0 //宣告直连网段
· [RTA-rip-1] version 2 //设为RIP v2版本
· [RTA-rip-1] undo summary //关闭自动汇聚,用来支持可变长子网(VLSM)
· [RTA-Serial0/0] rip authentication-mode md5 rfc2453 abcdef //可不配置,RIPv2报文的认证
· RIPV2认证
·
·
· 明文认证
· 第一步:在R1上配置密码→术语:订阅密码库
· r1#config
· r1(config)#key chain R1
· r1(config-keychain)#key 1
· r1(config-keychain-key)#key-string cisco
· r1(config-keychain-key)#exit
· r1(config-keychain)#key 2
· r1(config-keychain-key)#key-string norvel
· r1(config-keychain-key)#exit
· r1(config-keychain)#key 3
· r1(config-keychain-key)#key-string ccie
· r1(config-keychain-key)#exit
· r1(config-keychain)#exit
· r1(config)#int s1/2
· r1(config-if)#ip rip auth mode text // 设置为明文认证
· r1(config-if)#ip rip auth key-chain //在接口下应用密码库
· r1(config-if)#
· 第二步:在R2上配置密码
· r2#config
· r2(config)#key chain R2
· r2(config-keychain)#key 1
· r2(config-keychain-key)#key-string ccie
· r2(config-keychain-key)#exit
· r2(config-keychain)#exit
· r2(config)#int s2/1
· r2(config-if)#ip rip auth mode text
· r2(config-if)#ip rip auth key-chain R2
· r2(config-if)#end
· r2#
· 第三步:在R1上进行验证
· r1#ping 172.16.2.2
· Type escape sequence to abort.Sending 5, 100-byte ICMP Echos to 172.16.2.2, timeout is 2 seconds:!!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 96/112/152 msr1#
· 明文认证结论:
· RIP是距离矢量路由协议,不需要建立邻居关系,其认证是单向的,即R1认证了R2时(R2是被认证方),R1就接收R2发送来的路由;反之,如果R1没认证R2时(R2是被认证方),R1将不能接收R2发送来的路由;R1认证了R2(R2是被认证方)不代表R2认证了R1(R1是被认证方)。明文认证时,被认证方发送key chian时,发送最低ID值的key,并且不携带ID;认证方接收到key后,和自己key chain的全部key进行比较,只要有一个key匹配就通过对被认证方的认证。(按钥匙号顺序匹配)
· RIPv2明文认证例表
· R1的key chain
· R2的key chain
· R1可以接收路由?
· R2可以接收路由?
· ---------------------------分割线--------------
· key 1=cisco
· key 2=cisco
· 可以
· 可以
· --------------------------分割线--------------
· key 1=cisco
· key 1=abcd key 2=cisco
· 不可以
· 可以
· ---------------------------分割线--------------
· key 1=cisco key 2=abcd
· key 1=abcd key 2=cisco
· 可以
· 可以
· 密文认证
· 第一步:在R1上配置密码
· r1#conf t
· r1(config)#key chain A
· r1(config-keychain)#key 1
· r1(config-keychain-key)#key-string cisco
· r1(config-keychain-key)#exit
· r1(config-keychain)#key 2
· r1(config-keychain-key)#key-string norvel
· r1(config-keychain-key)#exit
· r1(config-keychain)#key 3
· r1(config-keychain-key)#key-string ccna
· r1(config-keychain-key)#exit
· r1(config-keychain)#exit
· r1(config)#int s1/2
· r1(config-if)#ip rip auth mod md5
· r1(config-if)#ip rip auth key-chain A
· r1(config-if)#endr1#
· 第二步:在R2上配置密码
· r2#conf t
· r2(config)#key chain B
· r2(config-keychain)#key 1
· r2(config-keychain-key)#key-string ccna
· r2(config-keychain-key)#exit
· r2(config-keychain)#exit
· r2(config)#int s2/1
· r2(config-if)#ip rip auth mod md5
· r2(config-if)#ip rip auth key-chain B
· r2(config-if)#end
· r2#
· 第三步:在R1上进行验证
· r1#ping 172.16.2.2
· Type escape sequence to abort.
· Sending 5, 100-byte ICMP Echos to 172.16.2.2, timeout is 2 seconds:.....
· Success rate is 0 percent (0/5)
· r1#
· 第四步:在R2上更改配置密码
· r2#conf t
· r2(config)#key chain B
· r2(config-keychain)#key 2
· r2(config-keychain-key)#key-string ccna
· r2(config-keychain-key)#exit
· r2(config-keychain)#exit
· r2(config)#int s2/1
· r2(config-if)#ip rip auth mod md5
· r2(config-if)#ip rip auth key-chain B
· r2(config-if)#end
· r2#
· 第五步:在R1上进行验证
· r1#ping 172.16.2.2
· Type escape sequence to abort.
· Sending 5, 100-byte ICMP Echos to 172.16.2.2, timeout is 2 seconds:!!!!!
· Success rate is 100 percent (5/5), round-trip min/avg/max = 24/108/256 ms
· r1#
· 密文认证结论:
· 同样RIP的密文认证也是单向的,然而此时被认证方发送key时,发送最低ID值的key,并且携带了ID;认证方接收到key后,首先在自己key chain中查找是否具有相同ID的key,如果有相同ID的key并且key相同就通过认证,key值不同就不通过认证。如果没有相同ID的key,就查找该ID往后的最近ID的key;如果没有往后的ID,认证失败。
· RIPv2密文认证例表
· R1的key chain
· R2的key chain
· R1可以接收路由?
· R2可以接收路由?
· key 1=cisco
· key 2=cisco
· 不可以
· 可以
· key 1=cisco
· key 1=abcd key 2=cisco
· 不可以
· 不可以
· key 1=cisco key 5=cisco
· key 2=cisco
· 可以
· 可以
· key 1=cisco key 3=abcd key 5=cisco
· key 2=cisco
· 不可以
· 可以
· 总结:
· 明文认证:
· 认证方发送自己的最小key id 的key值,但不携带key id,被认证放接收到key 值后从自己的最小key id比较开始一直到自己的最大key id,只要有,就通过认证.否则,认证失败.
· (认证方最小key id的key 值只要在被认证方有,被认证方就能通过认证)
· 密文认证:
· 认证放既发送key 值,又发送key id.被认证方从接收到的相同key 开始比较一直到下一个key id.如果有,就认证通过,负责,认证失败.
· 最重要的一点是在接口下调用的Key-chain 的名字要和自己在全局下定义的Key-chain名字要相同,在配置Key-chain名字 和key-string密钥后不要用TAB键,这样会在后面多个空格使得其不匹配而认证失败。不同路由器之间的Key-chain名字可以不同
· 总结:
· RIP路由协议由于自身路由算法设计上的缺陷,虽然引入了避免环路机制,但也无法彻底解决环路,同时在大型网络中RIP也并不适用,一方面由于采用跳数作为度量,另一方面RIP发送更新是发送整张路由表,导致路由器资源被协议占用,这也是RIP与OSPF等发送LSA链路状态更新的协议在路由学习上的重大区别,理解这个,你就能理解为什么路由策略,RIP中可以应用在In端和Out端,而OSPF只能应用在入接口。