Routing (路由)

路由就是通过互联的网络把信息从源地址传输到目的地址的活动。在路由表中优先级越小越优先(本文路由协议默认优先级均来自华为设备)

Routing Table (路由表)

路由表或称路由择域信息库,是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径,包含网络周边的拓扑信息

路由表

  • destination:目的地址,用来标识IP包的目的地址或者目的网络。
  • mask:网络掩码,与目的地址一起标识目的主机或者路由器所在的网段的地址。
  • pre:标识路由加入IP路由表的优先级。可能到达一个目的地有多条路由,但是优先级的存在让他们先选择优先级高的路由进行利用。
  • cost:路由开销,当到达一个目的地的多个路由优先级相同时,路由开销最小的将成为最优路由。
  • interface:输出接口,说明IP包将从该路由器哪个接口转发。
  • nexthop:下一跳IP地址,说明IP包所经过的下一个路由器。

路由选址默认为最长掩码匹配

Direct Routing (直连路由)

直接连接网段的路由,连接在各个路由器接口网段的路由,路由器启动时可以直接得到的路由网段。默认优先级为 0

Static Routing (静态路由)

由网络管理员配置,而非动态决定的路由项,当网络发生故障或者拓扑发生变化后,静态路由不会自动更新,必须手动重新配置。默认优先级为 60

  • 负载分担

    • 当两条路由项的目的地址、掩码、优先级、度量值相同并且下一跳地址不同时,则为等价路由。等价路由可以提供流量分担
  • 路由备份

    • 当两条路由项仅优先级不同时,则为浮动路由。优先级高的路由为主路由,其次为备路由。在正常情况下数据会从主路由进行转发,当主路由发生故障时,则会切换到备路由进行数据转发
  • 缺省路由

    • 目的地址为 0.0.0.0 且子网掩码为 0.0.0.0 的静态路由。当目的网段不在路由表中时,路由器会匹配该路由项进行数据转发

Routing Information Protocol (RIP、路由信息协议)

路由信息协议是一种内部网关协议,为最早出现的距离向量路由协议。其主要应用于规模较小的、可靠性要求较低的网络,可以通过不断的交换信息让路由器动态的适应网络连接的变化,这些信息包括每个路由器可以到达哪些网络,这些网络有多远等。RIP 通过 UDP 报文进行路由信息交换,端口号为 520 。默认优先级为 100

RIP_w

RIP_报文

  • Command 指令(8 bytes): 标识报文类型
    • 1 : Request报文,向邻居请求全部或部分路由信息
    • 2 : Reponse报文,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项
  • Version 版本(8 bytes): 标识版本号
    • 1 : RIPv1
    • 2 : RIPv2
  • Must be zero 0 字段(16 bytes / 32 bytes): 必须为 0
  • Address family identifier 地址族标识(16 bytes) : 其值为 2 时表示 IP 协议。对于 Request 报文,此字段值为 0
  • IP Address IP 地址(32 bytes) : 该路由的目的IP地址
  • Metric (32 bytes) 开销值 : 对于 Request 报文,此字段值为 16

工作过程

RIP 是一种基于距离矢量算法的协议,它使用跳数作为度量值来衡量到达目的地址的距离。在 RIP 网络中,缺省情况下,设备到与它直接相连的跳数为 0 ,通过一个设备可达的网络跳数为 1,度量值等于从本网络到达目的网络间的设备数量。为限制收敛时间,RIP规定度量值取0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。由于这个限制,使得RIP不可能在大型网络中得到应用

  1. 初始状态:路由器开启 RIP 进程,宣告相应接口,则设备就会从相关接口发送和接收 RIP 报文
  2. 构建路由表:路由器依据收到的 RIP 报文构建自己的路由表项
  3. 维护路由表:路由器每隔 30 秒发送更新报文,同时接收相邻路由器发送的更新报文以维护路由表项
  4. 老化路由表项:路由器为将自己构建的路由表项启动 180 秒的定时器。 180 秒内,如果路由器收到更新报文,则重置自己的更新定时器和老化定时器
  5. 垃圾收集表项:如果 180 秒过后,路由器没有收到相应路由表项的更新,则启动时长为 120 秒的垃圾收集定时器,同时将该路由表项的度量置为 16
  6. 删除路由表项:如果 120 秒之后,路由器仍然没有收到相应路由表项的更新,则路由器将该表项删除
  1. RIP 协议启动后,路由器向相邻的其他路由器广播发送 Request 报文
  2. 当对方从端口接收到 Request 报文后,将自己的 RIP 路由表封装在 Response 报文内,从接收端口广播发送
  3. 路由器根据接收到的 Response 报文形成路由表

Open Shortest Path First (OSPF、开放式最短路径优先)

开放式最短路径优先协议使用 “代价(Cost)”作为路由度量。链路状态数据库(LSDB)用来保存当前网络拓扑结构,路由器上属于同一区域的链路状态数据库是相同的(属于多个区域的路由器会为每个区域维护一份链路状态数据库)

OSPF 提出了“区域 (Area)”的概念,一个网络可以由单一区域或者多个区域组成。其中,一个特别的区域被称为骨干区域(Backbone Area),该区域是整个OSPF网络的核心区域,并且所有其他的区域都与之直接连接。所有的内部路由都通过骨干区域传递到其他非骨干区域。所有的区域都必须直接连接到骨干区域,如果不能创建直接连接,那么可以通过虚链路(virtual link)和骨干区域创建虚拟连接。默认优先级为 10

OSPF 开销计算公式(带宽参考值/带宽)

OSPF 报文

OSPF_w
OSPF

  • OSPF Header
    • Version 版本号(1 byte)
    • Type 类型(1 byte)
      • 1 : Hello 报文
      • 2 : DD 报文
      • 3 : LSR 报文
      • 4 : LSU 报文
      • 5 : LSAck 报文
    • Packet length 总长度(2 bytes)
    • Router ID 路由器标识(4 bytes)
    • Area ID 区域标识(4 bytes)
    • Checksum 校验和(2 bytes): 除认证字段的整个报文的校验和
    • Au Type 认证类型(2 bytes)
      • 0 : 不认证
      • 1 : simple
      • 2 : MD5
    • Authentication 认证字段(8 bytes)
  • Hello
    • Network Mask 网络掩码(32 bytes): 发送Hello报文的接口所在网络的掩码
    • Hello Interval 间隔(16 bytes): 发送Hello报文的接口所在网络的掩码
    • Options 选项(8 bytes)
      • E : 允许 Flood AS-External-LSAs
      • MC : 转发 IP 组播报文
      • N/P : 处理 Type-7 LSAs
      • DC : 处理按需链路
    • Rtr Pri DR 优先级(8 bytes)
    • Router Dead Interval 失效时间(32 bytes)
    • Designated Router DR 接口地址(32 bytes)
    • Backup Designated Router BDR 接口地址(32 bytes)
    • Neighbor 邻居(32 bytes)
  • DD
    • Interface MTU 接口 MTU (16 bytes): 接口最大可发出的 IP 报文长度
    • Options 选项 (8 bytes)
      • E : 允许 Flood AS-External-LSAs
      • MC : 转发 IP 组播报文
      • N/P : 处理 Type-7 LSAs
      • DC : 处理按需链路
    • I (1 byte): 连续发送多个 DD 报文时,若是第一个 DD 报文则为 1,否则为 0
    • More (1 byte): 连续发送多个 DD 报文时,是否为最后一个 DD 报文
      • 0 : Yes
      • 1 : No
    • Master / Slave 主/从标识(1 byte): 当值为 1 时表示发送方为 Master
    • DD Sequence Number DD 报文序列号(32 bytes): 主从双方根据序列号来保证传输的可靠性和完整性
    • LSA Headers LSA 头部信息
  • LSR
    • LS Type LSA 类型(32 bytes)
    • Link State ID 链路状态 ID (32 bytes): 根据 LSA 中的 LS Type 和 LSA Description 在路由域中描述一个 LSA
    • Advertising Router 发起广播的路由(32 bytes): 产生次 LSA 的路由器的 Router ID
  • LSU
    • Number of LSAs LSA 数量(32 bytes)
  • LSAck
    • LSAs Headers LSA 头部信息: 通过 LSA 头部信息确认接收到该 LSA

OSPF 邻接建立过程

OSPF-ExStart
OSPF-ExChange
OSPF-LSDB

OSPF 七种基本状态

  • Down: 初始状态,未收到任何 OSPF 报文。当邻居失效后会进入此状态
  • Attempt: 该状态仅发生在 NBMA 网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复 Hello 报文。此时路由器依然每发送轮询 Hello 报文的时间间隔(poll interval)向对端发送 Hello 报文
  • Init:收到邻居发的 Hello 报文,但自身的 Router ID 不在对方的邻居列表内
  • 2-way:收到邻居发的 Hello 报文,并且自身的 Router ID 在对方邻居列表内。如果不需要形成邻接关系则邻居状态机会停留在此状态
  • Ex-start:路由器与邻居互相发送 DD 报文,协商主从关系并确定初始 DD 报文序列号。此状态下的 DD 报文不包含任何链路状态信息摘要
  • Ex-change:确定主从关系后,路由器与邻居互相发送包含链路状态信息摘要的 DD 报文
  • Loading:DD 报文交换完成后,路由器与邻居之间互相发送 LSR、LSU、LSAck 报文,完善自身的 LSDB
  • Full:LSDB 同步完成(LSR重传列表为空),形成邻接关系

邻居状态机
邻居关系:OSPF 设备启动后,会通过 OSPF 接口向外发送 Hello 报文,收到 Hello 报文的 OSPF 设备会检查报文参数,如果双方一致就会形成邻居关系,两端设备互为邻居
邻接关系:形成邻居关系后,如果两端设备交换 DD 报文和 LSA 成功后则建立起邻接关系

OSPF 支持的网络类型

网络类型 含义
Broadcast
(广播)
当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。在该类型的网络中:通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为OSPF DR/BDR( Backup Designated Router)的预留IP组播地址。以单播形式发送DD报文和LSR报文
Non-Broadcast Multi-Access
(NBMA)
当链路层协议是帧中继、X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)
Point-to-Multipoint
(点到多点)
没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。在该类型的网络中:以组播形式(224.0.0.5)发送Hello报文。以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)
point-to-point
(点到点)
当链路层协议是PPP、HDLC和LAPB时,缺省情况下,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)

DR 与 BDR

Designate router (DR、指定路由器)
Backup Disignate router (BDR、备用指定路由器)

选举条件:

  1. 比较路由器接口优先级,越大越优先,默认值: 1
  2. 若优先级一致,则比较 Router ID
  3. 优先级第二大则为 BDR

优先级为 0 不参与选举,DR Other 不抢占 DR 与 BDR

OSPF 区域

通过区域 (Area) 的概念将 OSPF 域划分成多个区域,减小 LSA 泛洪的范围,有效的把拓扑变化的影响控制在区域内,三层设备在区域边界可以做路由汇总,可以使 OSPF 支撑更大规模的组网
Area 0 为骨干区域,其他区域必须直接连接骨干区域

OSPF-角色类型

不同区域路由器的角色类型:

  • Internal Router (IR、区域内路由器)
  • Area Border Router (ABR、区域边界路由器)
  • Backbone Router (BR、骨干路由器)
  • AS Boundary Router (ASBR、自治系统边界路由器)

相关指令

用户视图

调试模式

terminal debugging

调试 OSPF 包

debugging ospf packet

系统视图

指定一条静态路由

# ip route-static 目标网段 {子网掩码/掩码长度} 出口 [参数]
ip route-static 0.0.0.0 0 g0/0/1

查看路由表

display ip routing-table 

进入 RIP 视图

# rip [1-65535]
rip

进入 OSPF 视图

# ospf [1-65535]
ospf

查看 OSPF 邻居信息

display ospf peer

查看 LSDB 数据库

display ospf lsdb

查看 OSPF 路由

display ip routing-table protocol ospf

指定设备 route id

# router id IP地址
# ospf router-id IP地址
router id 1.1.1.1

接口视图

设置 OSPF 开销

# ospf cost [1-65535]
ospf cost 20

设置接口认证

# ospf authentication-mode {加密方式} [id] 密码
ospf authentication-mode md5 111 123

修改接口网络类型

# ospf network-type 网络类型
ospf network-type p2p

RIP 视图

宣告网络进入 RIP 协议

# network IP地址
network 192.168.1.0

OSPF 视图

设置 OSPF 优先级

# preference <1-255>
preference 1

指定 OSPF 带宽参考值

# bandwidth-reference [1-2147483648] # (Mbits/s)
bandwidth-reference 10000  

进入区域视图

# area {id/IP地址}
area 1

区域视图

设置区域认证

# ospf authentication-mode {加密方式} [id] 密码
ospf authentication-mode md5 111 123

将网段加入区域

network 网络地址 通配符          # 通配符: 0 为一致,1 为可变
network 192.168.1.0 0.0.0.255