1 基本介绍
RIP(routing Information Protocol,路由信息协议),基于距离矢量(Distance-Vector)的内部网关协议(IGP,Interior Gateway Protocol),以跳数(Hop)为度量单位。距离矢量算法也称为Ford-Fulkerson或Bellman-Ford算法。
RIPv1为RFC1058,RIPv2为RFC2453.
RIP的特点:
周期更新30S,
Metric(度量值)最大15跳,16跳为不可达
V1广播更新,V2组播更新(224.0.0.9)
泛洪路由表,即从邻居学习到的路由放进自己的路由表,然后再通告给其他路由器;
UDP 端口520。
2 定时器
RFC2453定义了3种定时器
l 更新定时器(Updata Timer),定期更新路由,发送response报文,30s;
l 老化定时器(Age Timer),如果在老化时间内没有收到邻居的更新报文(response),则认为该路由不可达,时间6倍更新定时器,180S,并启动垃圾收集定时器;老化后该路由不会出现在路由表,但还在RIP路由表中;
l 垃圾收集定时器(Garbage-collect Timer),120s,在路由老化定时器超时后启用垃圾收集定时器,如果在垃圾收集定时器内仍然没有收到该路由的更新,则从RIP路由表中删除该路由。
3 报文类型
RIP只有两种报文,请求报文和响应报文
请求报文(request):RIP启动(1RIP进程初次启动,2接口初次加入RIP,3RIP接口重置)后向对方请求自身没有的路由,对方以相应报文(response)包含整个路由表进行回复;
响应报文(response):RIP定期发送该报文(30S,包含所有路由信息,每报文最多包含25条),或收到请求报文后立即回应。
4 报文格式
4.1 RIPv1报文格式
RIPv1报文由报文头(Header)和路由表项(Route Entries)组成
RIP头部:
Command:8bit,报文类型,1表示request报文,2表示response报文;
Version:8bit,版本,1表示RIP1,2表示RIP2;
Must be zero:16bit,必须为0字段,同时出现在头部和路由表项中;
路由表项:
Must be zero:32bit,必须为0字段,同时出现在头部和路由表项中;
AFI:16bit,地址簇标识,IPv4的AFI为2,对于request报文该字段为0;
IP address:32bit,网络前缀,可以是子网或者主机地址;
Metric:32bit,路由开销,对应request报文,该值为16。
4.2 RIPv2报文格式
RIP头部:
Command:8bit,报文类型,1表示request报文,2表示response报文;
Version:8bit,版本,1表示RIP1,2表示RIP2;
Must be zero:16bit,必须为0字段,只出现在头部;
路由表项:
AFI:16bit,地址簇标识,IPv4的AFI为2,对于request报文该字段为0;
Route Tag:16bit,外部路由标记。
IP address:32bit,目的网络前缀,可以是子网或者主机地址;
Subnet Mask:32bit,目的掩码;
Next Hop:32bit,下一跳
Metric:32bit,路由开销,对应request报文,该值为16。
4.3 RIPv1和RIPv2报文的不同
Route Tag:用于引入外部路由时进行标记,默认为0;
Subnet Mask:RIPv2为无类路由协议,可以携带子网掩码;
Next Hop:目的下一跳,如果为0.0.0.0,表示发布该路由的路由器地址为最优下一跳。
RIPv2的验证功能:
RIP-2为了支持报文验证,使用第一个路由表项(Route Entry)作为验证项,并将AFI字段的值设为0xFFFF作为标识;
0xFFFF:16bit验证项标识,表示整个路由报文需要验证;
Authentication Type:16bit,验证类型,2表示明文,3表示MD5;
Authentication:16bit,验证口令。
5 RIPv1和RIPv2的比较
共同点:
1. 报文格式一致,都采用UDP封装端口为520(源目的端口都是520);
2. 报文类型一致,都采用request和response;
3. 度量一样,都是以跳数为度量,最大15,16代表不可达;
4. 定时器一致。
不同点:
1. RIPv1广播更新,RIPv2默认组播更新(可以更改为广播);
2. RIPv1为有类路由协议,RIPv2为无类路由协议;
3. RIPv1不支持VLSM、CIDR,RIPv2支持;
4. RIPv1无法关闭自动汇总,不支持手动汇总,因此会存在不连续子网问题,RIPv2支持自动汇总汇总与手动汇总;
5. RIPv1不支持路由标记(tag),RIPv2支持,可以针对引入外部路由设置标记做路由策略;
6. RIPv1不支持next hop属性,RIPv2支持,该属性可以解决路由次优问题,下一跳全0代表路由下一跳为更新报文的发送源IP地址,下一跳非0表示路由直接发送给这个非0地址,一般出现在广播网络中;
7. RIPv1不支持认证,RIPv2支持。
6 RIP报文有效性检查
RIP报文有效性检查一般分为两种:
1. RIPv1零域检查,RIPv1进程下运行check zero,如果零域的字段不为0,丢弃报文;
2. 更新源地址检查,RIP进程下verify-source,如果发送报文的接口IP和接受报文的接口IP不在同一网段,则丢弃报文。
7 RIP的防环机制
1. 水平分割:路由从一个接口收到,不会再从该接口发出,华为VRP在广播型网络默认开通水平分割,非广播型(比如FR/X2.5)默认关闭;
2. 毒性逆转:与水平分割刚好相反,路由仍然会从接受到的端口发出,但是会“毒化”该路由,将该路由设置为16(不可达),缺省禁用,与水平分割互斥;
3. 最大计数器:RIP路由跳数最大为15,16为不可达,设备收到跳数为16的路由(也成毒化路由),会立即清除路由表中的该路由;
4. 触发更新:当路由表有路由变化时立即发送更新报文。
8 为什么RIP报文携带最多路由条目为25?
因为RIP使用UDP协议,UDP报文最大传输512Byte,RIP报文由头部(4Byte)和路由表项组成,一个路由表项有20Byte,因此最多25条路由条目,如果配置了明文认证,认证占用一个路由条目位置,最多携带24条路由条目,如果配置了MD5认证,最多23条路由条目。
9 报文抓包分析
9.1 RIPv1 request
9.2 RIPv1 response
9.3 RIPv2 request
9.4 RIPv2 response
9.5 RIPv2 明文加密request
9.6 RIPv2明文加密response
9.7 RIPv2 MD5(IETF)加密request
9.8 RIPv2 MD5(IETF)加密response
9.9 RIPv2 MD5(华为私有)加密request
9.10 RIPv2 MD5(华为私有)加密response
10 RIP RFC
RFC 1058 |
Routing Information Protocol |
RFC 1723 |
RIP Version 2 Carrying Additional Information |
RFC 1721 |
RIP Version 2 Protocol Analysis |
RFC 1722 |
RIP Version 2 Protocol Applicability Statement |
RFC 1724 |
RIP Version 2 MIB Extension |
RFC 2082 |
RIP-2 MD5 Authentication |
RFC 2453 |
RIP Version 2 |