热心市民の知识库

1-IP路由基础

IPv4地址

地址分类

长度:32位 4 字节

  • A类地址:

    第一字节的第一位为0,第一字节数值范围0-127,0和127不做为A类地址,故实际可用范围为1-126

    0 保留,ip地址全为0表示本主机,只做源地址使用

    127 保留给本地回环地址

  • B类地址:

    第一字节的前两位为10,数值范围为128-191

  • C类地址:

    第一字节的前三位为110,数值范围为192-233

主网段及子网划分

  • 主网段采用自然掩码,即A类网络中使用8位掩码,B类网络中使用16位掩码,C类网络中使用32位掩码,

    • A类网络(1-126)默认子网掩码:255.0.0.0
    • B类网络(128-191)默认子网掩码:255.255.0.0
    • C类网络(192-223)默认子网掩码:255.255.255.0
  • 子网划分

    把主类网路地址继续划分成更多的子网络地址

    子网掩码用来和IP地址进行“与”运算计算出网路地址,子网掩码由连续的1和连续的0组成,1对应IP中的网络位,0对应IP中的主机位

    • 子网数目 = 2^x^
      • x为掩码扩展位数(网络位 - 默认网络位)
    • 主机数 = 2^y^ - 2
      • y为子网掩码中0的个数

    主机位全为0:子网的网络地址

    主机位全为1:子网的广播地址

IP报文格式

IP报文格式大全

IP报文格式

路由表 (RIB) 与转发表 (FIB)

RIB 与 FIB

路由表 (Routing Table, Routing Info Base)

转发表 (Forwarding Info Base)

img
img

RIB 路由表

RIB 存储所有的路由信息。它与具体的路由协议无关。所有的路由协议都在这里保存它们的路由。只要路由器上运行的路由协议学到了新路由,就都会放到路由表中。

当目标地址不可达时,对应的路由条目先被标记为 Unreachable,然后就从 RIB 中删除。

注意:RIB 不是用来进行 IP 包转发的,也不会被宣告到网络中。

总之,RIB 中:

  1. 有所有通过动态路由协议学到了路由条目
  2. 有所有的直连网络
  3. 有另外配置的路由条目,如静态路由

理想状态下,我们应用 RIB 来转发 IP 包。但实际上,路由表中的一些条目,比如静态和 BGP 路由,它们的下一跳并不是一个直连的网络。

为了找到有效的下一跳,路由器必须进行递归查找,找到实际直连出口。

FIB 转发表

Forwarding Information Base 转发表 (FIB) 用于判断基于 IP 包的网络前缀,如何进行转发。

对于每一条可达的目标网络前缀,FIB 包含接口标识符和下一跳信息。 FIB 概念上类似于路由表。它维护一份 RIB 表中的转发信息镜像。

当 IP 路由从 RIB 拷贝到 FIB 时,它们的下一跳信息被明确地分析出来,包括下一跳的具体端口,以及如果到下一跳有多条路径时,每条路径的具体端口。

FIB 表中的条目数也是影响路由器性能的重要因素。通常来讲,FIB 条目越多,查找花费的时间越长。但由于基于 ASIC 芯片的转发技术日臻成熟,目前的查找转发几乎能达到线速。

了解路由器 FIB 最大条目数十分重要,但厂商一般不会在产品指标说明中提供 FIB 的大小限制。

路由器构建 FIB 需要一定的时间。它需要先接收路由信息包,建立路由表,选路,建立转发表并把转发表的适当的子集推送到一些线卡上,只减少路由器 CPU 到线卡的压力。

对于特别大的 FIB 整个过程会需要大约几分钟。如 RFC 3222 所提及。

这种 RIB 加 FIB 的结构,使用控制平面的 RIB 和转发平面的 FIB 分离。这种分离使路由器的性能更加有连续性。

因此,以后再衡量路由器或三层交换机时,一定要检查路由表和 FIB 表的大小。 ———————————————— 原文链接:https://blog.csdn.net/ginkov/article/details/51803949

FIB表的Flag位含义:

  • G (GateWay 网关路由):表示下一跳是网关
  • H (Host 主机路由)
  • U (Up 可用路由):表示该路由状态为Up
  • S (Stastic 静态路由)
  • D (Dynamic 动态路由)
  • B (Black Hole 黑洞路由):表示下一跳是空接口
  • L (Vlink Route):表示Vlink类型路由

路径选择

选路规则:

  1. 选择优先级高的路由(Preference,越小越优先)

  2. 如果路由具有相同的Preference,则选择协议内部优先级高的路由

  3. 如果路由具有相同优先级又属于同一协议,则优选Cost值低的路由,

    若Cost相同则有条件形成负载分担,如果形成负载分担的路由条目大于大于系统限定值m,则只选择前m条作为活跃路由

负载分担

包括 路由负载分担、隧道负载分担、Eth-Trunk负载分担

优点:

  • 将流量分担到多条链路,增加链路总带宽
  • 负载分担的链路之间形成备份关系,提高链路可靠性

缺点:

  • 流量转发有随机性,负载分担可能不利于业务流量的管理

按照对连续数据包的处理方式可分为:

  • 逐包负载分担

    总是选择与上一次不同的下一跳地址发送报文

  • 逐流负载分担

    根据IP报文中五元组信息(源地址、目的地址、源端口、目的端口、协议)进行转发,

    五元组信息相同的一串报文被称为流

    不同流走不通的路径

负载分担算法

逐包分担均衡程度比逐流好,但可能导致报文乱序

  1. 等成本负载分担

    ECMP(Equal-cost multi-path)

    等成本负载分担是指到达同一目的地有多条等价链路,流量在这些链路上平均分配,不会考虑链路带宽差异

    等价链路指到达目的地的cost值相同的链路/路径

    等价路由指优先级和路由度量值相同的路由

    缺点:路径间带宽差异性大时,带宽利用率低

  2. 非等成本负载分担

    UCMP(Unequal-cost multi-path)

    非成本负载分担是指到达同一目的地有多条带宽不同的等价链路,流量根据带宽按比例分摊到各条链路上平均分配,可提高带宽利用率

度量

路由的度量(metric)表示出了某路由到达指定地址的代价

通常包含以下因素

  • 路径长度
    • 经过的所有链路开销综合
    • 距离矢量路由协议中使用跳数来标示路径长度
  • 网络带宽
  • 负载(资源使用程度)
  • 通信开销(线路运营成本)

RIP协议的 metric 由条数来表示,最大15跳,若为16跳则表示目的网络不可达

OSPF和ISIS等高级路由协议可使用和接口带宽有关系的度量来表示

下一跳

路由表中任何路由都需要直连的下一跳

  • 直连下一跳和非直连下一跳

  • 直连下一跳是IGP路由协议中,由直连邻居通告的路由

    • 非直连下一跳出现在默认路由和BGP场景下

      • RIB表将路由下放到FIB表时,迭代不直连的下一跳为直连的下一跳/接口
      • FIB表中任何路由都会关联到直连接口&直连下一跳
  • 路由指向出口或下一跳

有类路由和无类路由

有类路由协议:路由更新时,没有包含掩码相关信息,如RIPv1

无类路由协议:通告的路由中携带子网掩码,如RIPv2、OSPF、IS-IS、BGP

有类查找方式

先匹配主网路由,如果主网路由存在(匹配到了),再继续查找是否有对应的子网,如果没有匹配的子网,则报文丢弃(不论是否有缺省路由)

若匹配不到主网路由,则走默认路由,若无缺省路由,丢弃

无类查找方式

直接按照掩码”最长匹配“原则进行查找,匹配不上就找缺省路由,还匹配不上就丢弃

路由协议

路由根据来源不同,可分为三类

  • 直连路由:通过链路层协议发现的路由
  • 静态路由:管理员手工指定的路由
  • 动态路由:通过动态路由协议发现的路由

静态路由

需要注意的:

  • 若静态路由协议的下一跳不是直连地址,将会引入迭代过程,增加查表延迟和CPU负荷
  • 可为不同的静态路由配置不同的优先级(preference默认为60,越小越优先)

动态路由

动态路由协议分类

  1. 按照应用范围:

    • IGP:内部网关协议(Interior Gateway Protocol)
      • 工作在一个自治系统内
      • 例如 RIP、OSPF、ISIS、IBGP
    • EGP:外部网关协议(Exterior Gateway Protocol)
      • 工作在不同自治系统之间
      • 例如BGPv4(EBGP)
  2. 按照类别:

    • 有类路由协议
    • 无类路由协议
  3. 按照算法

    • 距离矢量协议

      • 例如 RIP

      • 特点是路由器之间不维持整网的路由信息,只知道到达邻居的路径,

        所有路由条目都来自路由器通告的路由

      • 优点:原理简单、易部署,路由过滤及汇总操作灵活

      • 缺点:

        1. 容易形成环路(因为无法判断收到的路由是不是自己发出去的)
        2. 路由收敛慢
    • 路径矢量协议

      • 目前只有BGP
      • 特点:所有的路由信息中都包含了路径信息(AS-Path),以自治系统(AS)为节点
      • 通过AS-Path防环
    • 链路状态协议(OSPF、IS-IS)

      又称为最短路径优先协议,基于最短路径优先(SPF)算法

      链路状态协议区域内绝对无环

      • 优点:路由收敛快、不易出现环路
      • 缺点:对系统性能、带宽要求高,路由控制及过滤不灵活(相比距离矢量协议而言)

IPV6

128位地址,分为8块,使用:分隔

例如

2031:0000:130F:0000:0000:09C0:876A:130B

为了书写方便,每组中的前导“0”都可以省略,所以上述地址可写为:

2031:0:130F:0:0:9C0:876A:130B

地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替,这样可以压缩IPv6地址书写时的长度,所以上述地址又可以进一步简写为:

2031:0:130F::9C0:876A:130B

在一个IPv6地址中只能使用一次双冒号“::”

IPv6地址结构

一个IPv6地址可以分为如下两部分:

  • 网络前缀:n比特,相当于IPv4地址中的网络ID
  • 接口标识:128-n比特,相当于IPv4地址中的主机ID
n bits 128-n bits
子网前缀(subnet prefix) 接口ID(interface ID)

IPv6的地址分类

IPv6主要有三种地址:

单播地址(Unicast)

唯一标识一个接口

一个单播地址只能标识一个接口,但一个接口可以有多个单播地址

  • 链路本地地址

    只在同一链路上的节点之间有效

    固定前缀:FE80::/10

    接口ID:使用EUI-64自动生成,也可手动配置

  • 唯一本地地址

    可以自己随意使用的私网地址

    固定前缀:FC00::/7

  • 全球单播地址

    相当于IPv4中的公网地址

    已分配的固定前缀:001
    地址范围:2000::/3

配置的全球单播地址不能与该地址对应的网络前缀相同,因为该类型的地址是设备预留的子网路由器任播地址。对于前缀长度是127位的IPv6地址,不受该规则限制。

IEEE EUI-64格式的接口标识符

IPv6地址中的64位接口标识符(Interface ID)用来标识链路上的唯一接口。这个地址是从接口的链路层地址(如MAC地址)变化而来的。IPv6地址中的接口标识符是64位,而MAC地址是48位,因此需要在MAC地址的中间位置插入十六进制数。然后将U/L位(从高位开始的第7位)设置为“1”,这样就得到了EUI-64格式的接口ID。

以中间位置插入十六进制数FFFE(1111 1111 1111 1110)为例,具体转换过程如下图

img
img

任播地址(Anycast)

用来标识一组接口(通常这组接口属于不同的节点)。发送到任播地址的数据包被传输给此地址所标识的一组接口中距离源节点最近的一个接口(最“近”的一个,是指根据路由协议的距离度量)。

具体地址规定:任播地址没有独立的地址空间,它们可使用任何单播地址的格式。因此,需要一种语法来区别任播地址和单播地址。

对于接口标识全为0的IPv6地址,标准协议中定义为子网路由器任播地址(Subnet-Router anycast address)

任播地址不局限于子网路由器任播地址,全球单播地址也可以配置为任播地址。

组播地址(Multicast)

用来标识属于不同节点的一组接口,类似IPv4的组播地址。发送到组播地址的数据包被传输给此地址所标识的所有接口。

IPv6没有广播地址,广播地址的功能均由组播地址来提供。

下面是一些固定组播地址

所有节点的组播地址:FF02::1 (相当于IPv4中的广播)
所有路由器的组播地址:FF02::2 (相当于224.0.0.2)
所有OSPFV3路由器地址:FF02::5 (相当于224.0.0.5)
所有OSPFV3 DR 和 BDR:FF02::6 (相当于224.0.0.6)
所有RIP路由器:FF02::9 (相当于224.0.0.9)
所有PIM路由器:FF02::D (相当于224.0.0.13)
被请求节点组播地址:由固定前缀(FF02::1:FFxx:xxxx/104)和单播地址的最后24位组成

例如:IPv6---2001::1234:5678/64
被请求节点组播地址---FF02::1:FF34:5678/104