IGP协议-路由基础+RIP

路由基础

零散知识点

  1. RIP基于UDP,端口号v1和v2是520,ripng是521
  2. 常见IP协议号:1-ICMP、2-IGMP、6-tcp、17-udp、47-gre、50-esp、88-eigrp、89-ospf、103-pim、112-vrrp
  3. isis是通过802.3承载的。bgp是通过tcp承载的,目的端口号为179。
  4. 路由协议的分类
    1. 按照应用范围
      1. IGP: RIP\OSPF\ISIS,特点:应用在同一个AS内做路由互通,通告路由条目选择最优路径。
      2. EGP: BGP,特点:BGP的主要特点是针对路由实施策略,可以更好的控制发送和接收的路由条目。
    2. 按照工作原理
      矢量:靠邻居学来的路由,仅把最优的放入路由表,路由的metric及下一跳代表矢量
      链路:每台路由器的每个物理链路,根据其网络类型产生至少一个链路状态,链路状态路由协议ospf使用lsa1去携带该路由器上所有的链路状态描述
      1. 距离矢量DV特点:只通告路由表中最优路由:RIP(16跳不可达)、BGP(路径矢量更确切)
      2. 链路状态LS:OSPF、ISIS
  5. 路由通告方式:
    1. 有类: RIPV1 (即不通告掩码长度,不支持不连续的子网)
    2. 无类:RIPV2\BGP\OSPF\ISIS
  6. RIP属于距离矢量且IGP协议
  7. 不推荐使用RIP的理由:只适应小型网络,跳数少,收敛慢,容易出环,且最好带宽一致
  8. Null0接口在各路由协议中的作用?有什么区别
    1. 在BGP中有两点原因:一是为了发布进BGP,二是为了防止环路的出现。因为bgp发布的路由必须是本地存在的路由,并且要求掩码一致,这就造成通过bgp发布聚合路由时,本地没有聚合后的网段路由,一般是通过配置一条黑洞路由,即下一跳为null,来满足这一要求的。
    2. 在IGP中配置指向Null0的汇总路由时均是为了防止环路的出现(ospf不会产生黑洞路由,但是isis在汇总后会产生黑洞路由)

各协议的优先级及特点

协议 外部优先级 内部优先级
直连 0 0
静态 60 60
RIP 100 100
OSPF 10 10
OSPF ASE和NSSA 150 150
ISIS L1/L2 15/15 15/18
EBGP 255 20
IBGP 255 200

只能调整外部优先级,不能调整内部优先级

为什么需要外部优先级?

用来区分不同的路由协议
如果没有外部优先级,或者外部优先级一样,那么会认为认为两条路由是来自同一个路由协议,加入这两条路由来自不同的协议,不同协议之间的算法不同,可能会导致高速链路和低速链路负载分担的情况

什么情况下比较外部优先级和内部优先级

如果同一条路由条目通过不同的路由协议学习到,需要先比较外部优先级,如果外部优先级一样,比较内部优先级

什么情况下需要比较路由条目的metric值

如果同一条路由条目通过同一种路由协议的不同邻居学到,需要比较metric值,metric值越小越优

为什么这么设计优先级

为了避免次优路径
设计优先级
左边运行RIP,右边运行OSPF。sw2上的路由2.2.2.2/32,在sw3上从RIP引入到ospf,然后传到sw1时,rip的优先级为100,ospf的外部优先级为150,优选RIP,在sw1上2.2.2.2的路由为sw1->sw2。如果ospf的内部和外部优先级都为10,则sw1上会选择ospf,则2.2.2.2的路由为sw1->sw4->sw3->sw2

协议优先级为何要有内外之分

有时为了控制路由选路需要更改协议优先级,就设定了可以改动的外部优先级, 但因为可以随便更改,就会出现这样一种情况,两种不同的协议优先级被误改为相同的优先级,比如RIP和OSPF优先级都改为一样,但这两种协议不能去比较cost值,因为两种协议间比较cost值是没有意义的,所以此时就设立了内部优先级,并且不能更改,那么在外部优先级相同情况下就可以去比较内部优先级,保证比较优先级就可以比较出来


RIP

路由信息协议,基于距离矢量算法的协议,使用跳数作为度量来衡量到达目的网络的距离,适用于规模较小的网络中。

RIPV1和RIPV2的区别

共同点

  1. IGP协议
  2. 属于距离矢量路由选择协议
  3. 都可以通过广播的方式通告路由条目,也可以通过单播的方式通告
  4. 都是使用UDP协议承载,端口号都为520
  5. 都是使用跳数计算最短路径,最大跳数为15跳,16跳为不可达
  6. 报文类型相同,只有request报文和reponse报文
  7. 都可以接收V1\V2版本的RIP报文
  8. 通告的每条路由条目长度都是20字节

不同点

  1. RIPV1
    1. 有类路由选择协议,不支持VLSM(可变长子网掩码,划分子网)和CIDR(无类别域间路由,聚合子网)
    2. 不支持认证
    3. 使用广播的方式通告报文
    4. 一次最多通告25条路由条目
      UDP的报文长度决定的,且UDP不支持分段。UDP头部8字节=源端口+目的端口+长度+校验和各2字节,RIP头部是4字节,UDP规定最大可承载长度为512B,512-8-4=500,500/20=25
    5. 不支持TAG和下一跳
    6. 通告路由不携带子网掩码
  2. RIPV2
    1. 无类路由协议,支持VLSM和CIDR
    2. 支持认证,明文(20字节,位于RIP头之后,一条路由长度)和密文(40字节)
    3. 可以使用组播和广播的方式通告报文,组播地址224.0.0.9
    4. 无认证时一次最多可以通告25条路由,有明文认证可以通告24条,有密文认证可以通告23条
    5. 支持TAG和下一跳
    6. 通过路由携带子网掩码

报文格式

V2只是将V1中必须为0的字段给利用起来
V1报文格式:
V1报文格式
V2报文格式:
V2报文格式

  • Command:表示该报文是一个请求报文还是响应报文,只能取1(请求报文)或者2(响应报文)
  • Version:表示RIP的版本信息。对于RIPv1,该字段的值为1
  • Address Family Identifier(AFI):表示地址标识信息,对于IP协议,其值为2(V2还可以用来描述认证信息)
  • IP address:表示该路由条目的目的IP地址。这一项可以是网络地址、主机地址
  • Metric:标识该路由条目的度量值,取值范围1-16
  • Route tag:用于标记外部路由
  • Subnet Mask:指定IP地址的子网掩码,定义IP地址的网络或子网部分
  • Next Hop:指定通往目的地址的下一跳IP地址

RIP路由表的形成

RIP路由表的形成
RIP启动时的初始路由表仅包含本设备的一些直连接口路由
RIP协议启动之后,RouterA会向相邻的路由器广播一个Request报文。
当RouterB从接口接收到RouterA发送的Request报文后,把自己的RIP路由表封装在Response报文内,然后向该接口对应的网络广播。
RouterA根据RouterB发送的Response报文,形成自己的路由表。

RIPV1的路由通告和接收方式

  1. 路由通告:
    1. 在同一主类网段,掩码一致直接通告,掩码不一致只通告32位的主机路由,其他则不通告
    2. 不在同一主类网段,则通告此网段的主类网段
  2. 路由接收:
    1. 在同一主类网段,如果主机位全为0则路由的掩码为接口地址的掩码,否则为32位主机路由
    2. 不在同一主类网段,接收其主类网段
      路由通告

主类网络:
A类:第1字节为网络号,第1比特为0,即1.0.0.0~126.0.0.0/8
B类:前2字节为网络号,前2比特为10,即128.1.0.0~191.255.0.0/16
C类:前3字节为网络号,前3比特为110,即192.0.1.0~223.255.255.0/24
D类:多播地址,前4比特为1110
E类:保留地址,前4比特为1111

定时器

  1. 更新定时器:定时触发更新报文的发送,默认30秒
  2. 老化定时器:在老化时间内没有收到更新报文则认为该路由不可达,默认180秒
  3. 垃圾收集定时器:在垃圾收集时间内不可达路由没有收到来自同一邻居的更新,则彻底删除该路由,默认120秒一条路由从失效到被清除需要多长时间?300秒=180老化定时器+120垃圾收集定时器
  4. 抑制定时器:当RIP设备收到对端的路由更新,其cost为16对应路由进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由cost小于16的更新,也不接受,当抑制定时器超时后,就重新允许接受对端发送的路由更新报文,默认0秒(虽然存在但是默认没有开启,除非将时间修改为非0才能发挥其作用

前3个定时器的关系
RIP的更新信息发布是由更新定时器控制的,每30秒发送一次。
每一条路由表项对应两个定时器:老化定时器和垃圾收集定时器。
当学到一条路由并添加到路由表中时,老化定时器启动,如果在180秒后没有收到邻居发来的更新报文,则把该路由的度量值置为16(表示路由不可达),
并启动垃圾收集定时器,如果在120秒内仍然没有收到更新报文,垃圾收集定时器超时后在路由中删除该表项。

防环

路由中毒(路由条目失效后设置为16条)不是防止的机制,而是通告路由条目失效的方法

  1. 水平分割:从某个接口学到的路由,不会从该接口再发回给邻居设备广播和点到点默认开启(NBMA默认不开启),但是不可靠,因为发送方无法确认接收方是否收到路由
  2. 毒性反转:从某个接口学到路由后,将该路由的开销设置为16,并从原接口发回邻居设备,清除对方路由表中的无用路由接口下如果同时开启水平分割和毒性逆转,只有毒性逆转生效
  3. 最大跳数:16跳即不可达
  4. 触发更新:路由信息发生变化时,立即向邻居发送触发更新报文,通知变化的路由信息
    触发更新和更新定时器存在时间差,这个最后是通过最大条数解决环路问题
    触发更新和最大跳数
    sw1的lo0失效之后发送触发更新给sw2(16跳),现在sw2同时给sw3和sw4发,结果sw3收到后删除,此时sw4还未收到,但是更新定时器到时间了,发送了更新报文,导致sw3又学到了sw1的lo0路由(2跳),即sw3认为从sw4可以到达sw1(3跳),然后就开始发送更新报文给sw2,sw2认为从sw3可以到达sw1(4跳),sw2又给sw1/2/3发送(5跳),导致出环,跳数不断增加......最后到达16条之后不可达

抗重放保护(默认关闭)

假设运行RIP的接口状态变为Down之前发送的最后的RIP报文的Identification为X此部分在IP头部,而不是RIP头部,该接口状态变为Up后,再次发送RIP报文的Identification会变为0。如果对方没有收到这个Identification为0的RIP报文,那么后续的RIP报文都将被丢弃,直到收到Identification为X+1的RIP报文。这样就会导致双方的RIP路由信息不同步、丢失。
使能Replay-protect功能后,当接口从Down变为Up之后,再次发送RIP报文的Identification会顺次加一,从而避免了上述情况的发生。

单播

需要将端口silent后并指定一个peer,那么此端口将不会以组播和广播的方式发送报文,但是还可以接收