1.BGP边界网关协议:

1.概念:

  • BGP不产生路由,负责搬运路由
  • 使用范围:在AS之间使用的协议
  • 基于TCP封装,端口号:179
  • AS自治系统:取值范围 1-65535,公有AS 1-64511,私有AS 64512-65535
  • 协议特点:
    • BGP是一种路径矢量型路由协议
    • 没有算法
    • 传递网络掩码,支持VLSM(可变长子网掩码)、CIDR(无类别域间路由,超网技术)
    • BGP协议中存在大量的属性(是一种基于规则的路由协议)
    • BGP协议支持路由认证
    • 支持BGP路由聚合(汇总)
    • BGP是一种非常消耗资源的路由协议
  • BGP的协议版本:
    • 有类别:V1,V2,V3
    • 无类别:V4(仅仅支持IPv4单播路由传递),V4+(支持IPv4单播路由,IPv6单播,IPv4组播,IPv6组播,VPNV4,VPNV6等)
    • 默认仅仅支持传递IPV4单播路由,传递其他方式路由时需要开启(激活)
  • 更新地址:单播更新
  • 更新方式:触发更新,增量更新

2.适合使用BGP的网络环境:

  • 传输AS
  • 多宿主
  • 需要对进入和离开的流量进行强大的策略控制时

3.BGP邻居关系:

  • IBGP:内部BGP邻居,同一个AS之内的BGP设备的邻居关系
  • EBGP:外部BGP邻居,不同AS之间的BGP设备构建的邻居关系

4.BGP消息数据包:

  1. open报文:建立BGP邻居关系,只发送一次

    • BGP邻居建立的条件:

      1. router-id必须不同
      2. BGP认证一致
      3. 指定正确的AS号
      4. 建立TCP三次握手的两端路由可达
    • 图示:

      image-20221125100413407
  2. keepalive报文:保活,维持BGP邻居关系;keepalive 时间(保活)默认为60s,Hold 时间(超时)默认为180s

    image-20221125100614826
  3. update报文:更新

    • 通告路由:

      • IBGP路由通告时间为15S
      • EBGP路由通告时间为30S
      image-20221125112156267
    • 撤销路由:

      image-20221125111814562
  4. notification报文:报告(错误报告)

    image-20221125112451838

5.BGP邻居状态机制:

  • IDLE初始化:检测双方建立邻居的IP地址是否可以通信,然后建立尝试建立TCP连接(TCP报文随机一方先发送)
  • Connet连接:建立TCP连接成功后,被动响应一方的状态
  • Active活动:建立TCP连接成功后,主动发送一方的状态
  • Opensent:主动发送open报文的一方状态;发送open报文,建立BGP的邻居(open报文随机一方先发送)
  • Openconfirm:收到open报文的一方状态;报文确认
  • Established邻居状态:收到对方的keepalive报文(保活)的一方状态

6.BGP的路由黑洞:

  • 在同一个AS中,考虑成本,不会所有设备均运行BGP协议;
  • 大量的IBGP邻居关系间,为非直连建邻;故必然出现大量单播非直连传递路由信息;最终形成BGP设备路由表可达;而实际流量在递归到非BGP设备时被丢弃
  • 即:控制层面显示可达,数据层面在非BGP设备处不可达
  • 解决方法:
    1. 在边界设备上将BGP重发布引入IGP协议(仅仅引入EBGP邻居学习幵加表的路由)
    2. 在AS内建立全互联的IBGP邻居关系
    3. 减少IBGP邻居关系的数量,打破IBGP水平分割
      1. 路由反射器
      2. EBGP 联邦
    4. MPLS

7.BGP的防环机制:

  • IBGP(AS内):IBGP水平分割机制;next-hop,起源者属性,簇ID列表

    • IBGP水平分割:

      • AS-by-AS规则:一个AS为一个整体,故BGP路由内部传递时,其属性默认没有发生任何变化,故将导致IBGP关系间的环路
      • IBGP水平分割机制:IBGP只传一跳规则,通过一个IBGP邻居学习路由不能传递给其他的IBGP邻居
      • IBGP水平分割的打破:路由反射器、EBGP联邦
  • EBGP(AS之间 ):

    • 在BGP的路由条目中存在各种属性用于选路,其中有一种AS-Path属性
    • AS-Path用于记录该条目经过的所有AS编号
    • EBGP水平分割就是利用AS-Path属性,接收到路由条目中,若出现本地的AS编号记录将拒绝接收该条目

8.配置:

1.BGP建立:

  • 先保证路由可达

  • 启用BGP协议:

    1
    bgp [num]     # num为AS自治系统编号	
  • 手工指定router-id

    1
    router-id [本地路由器RID]
  • 手工指定邻居:

    1
    peer [对端的直连接口IP地址] as-number [对端的bgp号]
  • 修改更新源(环回接口):默认更新源为到达peer的本地出接口地址

    1
    peer [对端的环回接口IP地址] connect-interface [本地的环回接口号]
  • 注意:IBGP邻居之间禁止双端全部缺省路由

  • 修改EBGP之间多跳(EBGP之间数据包TTL默认为1 ),EBGP环回使用环回建立邻居时跳数等于2

    1
    2
    peer [对端的环回接口IP地址] ebgp-max-hop [num]    # num值应大于1,默认跳数255
    # 作用:1.关闭EBGP之间直连检测 2.修改EBGP数据包的TTL值

2.宣告网络:

  • 本地通过BGP协议学习的路由将自动传递给本地的其他BGP邻居,需要考虑IBGP水平分割;

  • 宣告是宣告本地路由表中任何来源的非BGP路由(直连,静态,IBGP等)

  • EBGP邻居宣告网段时,源更新地址不能和宣告环回地址相同(建邻的路由和BGP传递过来的路由是同一个),否则无法生成有效最优路由

  • BGP宣告问题:

    • 在BGP协议种,本地设备可以宣告本地路由表中所有直连,静态,IGP产生的路由;
    • 由于在实际工程中,一个AS内部存在大量的未运行BGP协议的路由器;它们的用户网段,需要边界IBGP协议的设备来代替它们宣告共享到其他的AS
    • 所以,边界IBGP设备宣告本地路由表中路由条目时,默认将携带COST值;携带COST的路由会被传递给本地设备的EBGP邻居 / IBGP邻居
    • 本AS中不是本地设备的EBGP邻居学到的路由度量值会清零,导致选路问题;所以建立所有存在EBGP邻居的边界IBGP路由器均宣告本AS中路由条目
    • 作用:用于其他AS判断多个EBGP邻居,谁离目标更近
  • 配置:

    1
    network [IP网段] [子网掩码/长度]

3.查看BGP表和详情属性:

  • 查看BGP 邻居表摘要:

    1
    display bgp peer 
    字段名 说明
    peer 对方的更新源地址
    V(version) bgp版本号
    AS 自治系统号
    MsgRcvd 收到了多少信息
    MsgSent 发送了多少信息
    OutQ 出项消息队列
    Up / Down 邻居建立时间
    PrefRcv 收到了多少路由更新数量
  • 查看BGP 邻居表详情:

    1
    display bgp peer verbose 
    字段名 说明
    Configured(已配置) 本地配置的hold超时时间,keepalive保活时间
    Received(接收到) 对方配置的hold超时时间,keepalive保活时间
    Negotiated(协商后) 双方协商后的hold超时时间,keepalive保活时间
  • 查看BGP 路由表:

    1
    display bgp routing-table
    status codes状态码 说明
    * - valid 有效路由,目标网段加到路由表的条件之一
    > - best 最优路由,目标网段加到路由表的条件之一
    d - damped 惩罚路由
    h - history 惩罚路由
    i- internal IBGP邻居学习到的路由
    s - suppressed 路由抑制
    s - stale 陈旧路由
    Origin起源码 说明,路由最早来源的地方
    i - IGP 自身通告路由(network)
    e - BGP 来自BGP的路由
    ? - incomplete 无知起源路由(重发布路由),通过重发布,将IGP产生的路由发布到BGP
    列表属性字段 说明
    MED 度量
    NextHop 下一跳
    LocPrf 本地优先级
    PrefVal 权重属性(虚拟优先级)
    Origin 起源
  • 查看BGP的IP路由表

    1
    display ip routing-table protocol bgp
    BGP 路由优先级 说明
    EBGP:255
    IBGP:255
    Local BGP : 255
  • 注意:

    • EBGP邻居之间传递路由最小间隔为30S
    • IBGP邻居之间传递路由最小间隔为15S

4.开启负载均衡:

1
2
load-balancing as-path-ignore     # 先进入BGP进程,仅对EBGP路由有效
# 负载均衡的两条线路对端必须指向同一AS,且在BGP表中仅显示最佳,但路由表中出现负载均衡现象

4.路由不优的问题:

  • 原因:1.下一跳不可达 2.IBGP同步

  • 下一跳属性规则:

    • network 引入 默认next-hop 属性为0.0.0.0
    • network通告路由传递给IBGP邻居或EBGP邻居时,下一跳默认为更新源地址(即建立TCP三次握手的对方IP地址)
    • IBGP学习路由传递给EBGP邻居时,下一跳为EBGP的更新源地址(EBGP邻居路由传递给EBGP邻居时也一样)
    • EBGP学习路由传递给IBGP邻居时,下一跳不发生改变
  • 修改下一跳为本地: 只将本设备通过EBGP学习到的路由传给下一个路由器时显示的下一跳修改成本设备

    1
    2
    peer [对端IP地址] next-hop-local
    # 联邦内的EBGP关系,传递的路由其属性遵循IBGP关系,传递性遵循EBGP关系
  • 备注:

    • 在思科中,默认将IGP协议通告进入BGP时,将原IGP路由的下一跳地址作为BGP路由的下一跳属性;传递给其他IBGP邻居时,IBGP邻居发现路由的下一跳属性为自己的接口地址,启用下一跳防环机制,组织路由加表,下一跳属性具有防环功能
    • 在华为中,将路由通告在BGP时,下一跳属性为0.0.0.0,并且传递给其他IBGP邻居时下一跳属性直接变为更新源地址,下一跳属性不存在放环功能,再修改优先级的时候可能导致路由环路。
  • 特殊说明:

    • 路由器R1、R2、R3(R1、R2为IBGP邻居,R1和R3、R2和R3为EBGP邻居)在同一个MA网段;但IBGP邻居两在同一个AS,EBGP邻居不在同一个AS;

    • 正常R1从R2学习到R4传递给R3的路由,下一跳自动显示为R3(最佳路径)

    • 形成条件:

      • R1、R2、R3必须使用MA网段的物理接口建立邻居关系
      • ICMP重定向开启(默认开启)
    • ICMP重定向:一台路由器在转发一个流量时,发现流量在本地的入口和查询完路由表的出口为同一个接口,告知上一跳设备本地的下一跳地址,帮助上一跳设备找到最佳的下一跳地址

    • 在BGP中仅查看某各邻居发送或接收到的BGP路由

      1
      2
      3
      display bgp routing-table peer [对端更新源地址] [received-routes/advertised-routes]
      # received-routes:接收到的路由
      # advertised-routes:发送的路由

5.对等体组:

  • 将多个peer 划入一个group中,针对group实施BGP邻居关系建立的配置

  • 优点:

    • 减少BGP配置
    • 将多个peer划入一个group仅仅针对一个group一次性消耗CPU 内存等资源,所以可以节约资源
  • 创建group

    1
    group [组名] [internal/external]   # 默认internal(IBGP)
  • 修改更新源:(因为在同一AS中,不需要单独建立BGP邻居命令as-number )

    1
    peer [组名] connect-interface [本地的环回接口号]
  • 将peer划入对等体组:将想和本设备建立邻居的更新源加入组中,对端路由同种操作

    1
    peer [IP地址] group [组名]
  • 查看

    1
    display bgp peer

6.路由反射器:

  • 反射规则: 非非不传(非客户端收到的路由不能传递给其他的非客户端)

  • 在路由反射器中,由于破坏了IBGP水平分割机制,可能导致路由环路,所以引入了起源者属性簇ID属性进行防环

  • 起源者属性:反射器中心学习到路由的路由器RID作为起源者属性,表明这条路由最早源于这个IBGP路由器

  • 簇ID属性:在反射路由时,将簇ID(cluster-id)写到此条路由的簇ID列表中。来证明这条路由被反射过

  • 设置路由反射器: 设置路由反射器客户端,同时宣告自身为路由反射器中心

    1
    peer [对端IP地址] reflect-client    # 设置对端为本设备的客户端,本设备为中心;中心将学到的路由传递给客户端
  • 可选:设置路由反射器的cluster-id:(防环)

    1
    reflector cluster-id [RRID]     # 设置本设备的簇ID,默认为本设备的RID
  • 查看反射之后的路由:

    1
    display bgp routing-table [路由IP网段]   # 在反射器之后的设备查看

7.EBGP联邦:

  • 先部署小AS,再声明大AS

  • 注意: 联邦EBGP邻居既有IBGP邻居特性又有EBGP邻居特性

  • IBGP特性:

    • 下一跳问题
    • 学习到的路由标记为IBGP
  • EBGP特性:邻居建立过程中存在EBGP邻居的非直连检测和TTL问题

  • 联邦EBGP防环:引入联邦AS序列号进行防环(不AS-path 区别 1.不计入选路 2.当传递出大的AS时消失)

  • 配置:

    1. 在同一个联邦内的路由器配置小AS

      1
      2
      3
      bgp [AS号]
      router-id [路由器RID]
      peer ......
    2. 声明大的AS号:

      1
      confederation id [AS号]
    3. 在需要建立联盟EBGP之间指定peer-as(需要先声明,再建立了EBGP邻居)

      1
      confederation peer-as [对方的AS号]   # 联盟内小AS与小AS建立EBGP邻居前,需要互相指定对方的AS号
    4. 修改EBGP邻居之间的条数

    5. 查看接收到的联邦 IBGP邻居路由和联邦 EBGP邻居路由

      1
      display bgp routing-table []

8.BGP的社团属性:

  • 社团属性:可选可传递属性

  • 标准社团属性:针对传递的路由信息进行标记

  • 扩展社团属性:抓取路由属性,进行选路

  • 默认不传播,不存在

  • 标准社团属性配置:

    • 添加社团属性:

      1. 设置策略列表:

        1
        2
        3
        4
        5
        route-policy [列表名] permit node [序列号]
        if-match [条件]
        apply community [社团属性/num:num]
        # 已定义的社团属性:Internet可以传递给所有邻居,no-advertise不能传递给任何邻居
        # no-export不能传递出大的AS,no-export-subconfed不能传递出小的AS
      2. 调用:

        1
        peer [对端更新源地址] route-policy [列表名] [import/export]     # 先进入BGP进程
    • 向对端传播标准社团属性:

      1
      peer [对端更新源地址] advertise-community     # 先进入BGP进程,传递标准团体属性
    • 在其他路由器查看社团属性:

      1
      display bgp routing-table [路由网段]
  • 扩展社团属性配置:

    • 添加社团属性:

      1. 使用社团属性列表抓取扩展团体属性

        1
        ip community-filter basic [列表名] permit [num]:[num]
      2. 设置策略列表:

        1
        2
        3
        route-policy [列表名] permit node [序列号]
        if-match community-filter [列表名]
        apply [选路属性] [num]
      3. 调用:

        1
        peer [对端更新源地址] route-policy [列表名] [import/export]     # 先进入BGP进程
    • 向对端传播扩展社团属性:

      1
      peer [对端更新源地址] advertise-ext-community     # 先进入BGP进程,传递扩展团体属性
    • 在其他路由器查看社团属性:

      1
      display bgp routing-table [路由网段]

9.BGP的自动汇总:(可选)

  • 自动汇总只针对重发布的路由

  • 当代的路由器设备,默认就关闭了BGP的自动汇总功能

  • 自动汇总规则与正常BGP协议共享,或在BGP协议通过network宣告命令产生的路由条目无关

  • 宣告由于重发布

  • 在开启了自动汇总的前提下,重发布进入的路由将不携带子网掩码,按主类掩码进入;不携带本地到目标网段的度量值,度量值为0;若关闭自动汇总,进入路由将正常携带掩码,且携带度量,此时和宣告路由仅起源属性不同;故建议不要开启自动汇总

  • 配置:

    1
    summary automatic   # 开启自动汇总,一般不开启;先进入BGP进程 
    1
    import-route [其他协议名] [进程号]      # 批量宣告网络

10.BGP的认证:

1
peer [对端的更新源地址] password cipher [密码]   # 先进入BGP进程,邻居间需要密钥一致

11.BGP聚合(汇总):

  • 利用BGP的宣告特征来简化了汇总配置量

  • 宣告特征:本地路由表中任何方式产生的路由均可被BGP宣告

  • 在实际工程中,由于AS之间一定存在大量的EBGP邻居关系,因此仅汇总不能做到优选路径,必须在传递聚合条目的同时,再传递部分的明细路由来选路控制

  • 在进行路由聚合时,会丢弃某些属性(AS-Path等),导致网络故障(严重的会出现路由环路),还有一些属性会自动生成一些默认值

  • 配置:

    • 方式一:

      1. 不宣告各明细网段

      2. 配置汇总网段的空接口:

        1
        ip route-static [汇总网段地址] [子网掩码/长度] null 0
      3. 宣告汇总网段:

        1
        2
        network [汇总网段]
        # 如果需要个别明细路由,直接再宣告明细网段
    • 方式二:

      1. 汇总明细路由

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
           aggregate [汇总后的网段] [子网掩码/长度]     # 此时聚合与所有明细条目均传递
        aggregate [汇总后的网段] [子网掩码/长度] detail-suppressed # 仅仅发送聚合路由,抑制所有的明细路由发送
        # detail-suppressed:仅仅发送聚合路由,抑制所有的明细路由发送
        # suppress-policy:使用抑制列表进行控制,抑制匹配的路由
        # origin-policy:针对此列表中匹配的路由存在时,聚合才会生效
        # attribute-policy:仅仅针对聚合路由进行策略控制
        # as-set:可以还原聚合路由中丢失的某些属性(例As-Path)

        2. 配置汇总网段的空接口:

        ```shelll
        ip route-static [汇总网段地址] [子网掩码/长度] null 0
    • 路由传递干涉策略:

      1. 抑制列表:抑制抓取到路由网段

        • 抓取流量:

          1
          ip ip-prefix [列表名] permit [目标IP网段] [子网掩码/长度]
        • 设置策略列表

          1
          2
          route-policy [列表名] permit node [序列号]
          if-match ip-prefix [列表名]
        • 在BGP中调用抑制列表:

          1
          aggregate [汇总网段] [子网掩码/长度] suppress-policy [策略列表名]    # 先进入BGP进程
      2. Route-map:在BGP中将route-map当分发列表用,抑制抓取到路由网段

        • 先做了没有抑制明细路由的汇总

        • 抓取流量:

          1
          ip ip-prefix [列表名] permit [目标IP网段] [子网掩码/长度]
        • 设置策略列表,拒绝抓取流量网段

          1
          2
          route-policy [列表名] deny node [序列号]
          if-match ip-prefix [列表名]
        • 在BGP中调用:

          1
          2
          3
          peer [邻居的更新源地址] route-policy [策略列表名] export       # 先进入BGP进程
          # export:控制层面的出项(路由传递出的方向)
          # import:控制层面的入向
      3. 分发列表:抑制抓取到路由网段

        • 先做了没有抑制明细路由的汇总

        • 抓取流量:

          1
          2
          ip ip-prefix [列表名] deny [目标IP网段] [子网掩码/长度]
          ip ip-prefix [列表名] permit 0.0.0.0 0 less-equal 32
        • 在BGP中调用:

          1
          2
          3
          filter-policy ip-prefix [列表名] export       # 先进入BGP进程
          # export:控制层面的出项(路由传递出的方向)
          # import:控制层面的入向
      4. 前缀列表:BGP协议中可以直接将前缀列表作为分发列表调用,抑制抓取到路由网段

        • 先做了没有抑制明细路由的汇总

        • 抓取流量:

          1
          2
          ip ip-prefix [列表名] deny [目标IP网段] [子网掩码/长度]
          ip ip-prefix [列表名] permit 0.0.0.0 0 less-equal 32
        • 在BGP中调用:

          1
          peer [邻居的更新源地址] ip ip-prefix [列表名] export     # 先进入BGP进程

12.BGP 路由惩罚:

  • 目的:抑制路由的摆动(过于频繁的通告路由和撤销路由)

  • 特点:

    • 被惩罚的路由不能参与选路,不能加入本地的IP路由表,不能传递
    • 路由惩罚仅仅针对EBGP邻居学习的路由
  • 惩罚值:路由条目每翻滚(宣告与取消宣告)一次,惩罚值增加1000,路由属性每翻滚一次惩罚值增加500(不可修改),华为中最大惩罚值 默认为16000

  • 惩罚门限:超过了惩罚门限开启进行路由惩罚,默认值为2000

  • 重用门限:当惩罚值低于该值,重新使用该路由信息,默认为750

  • 半衰期:默认为15分钟,每过设置时间惩罚值减低一半

  • 配置:

    1. 启用BGP路由惩罚:
    1
    2
    dampening [半衰期时间] [重用门限值] [惩罚门限值] [最大惩罚值]
    # 半衰期:默认为15分钟,重用门限:默认为750,惩罚门限:默认值为2000,最大惩罚值:16000
    1. 查看路由惩罚参数:
    1
    display bgp routing-table dampening parameter
    1. 查看被惩罚的路由:
    1
    display bgp routing-table dampened
    1. (重启)清楚所有被惩罚的路由信息:
    1
    reset bgp dampening     # 在用户模式下

13.BGP的选路规则:

  • 选路条件:BGP路由必须有效,无环的,不能被惩罚

  • 规则:(前提:多条BGP路由目标相同,且均可优(下一条可达,同步关闭))

    1. 优选权重值最高的路由(本地属性,不传递,权限最高的属性,可以干涉EBGP/IBGP选路)
    2. 优选本地优先级最高的路由(IBGP邻居间传递,最常干涉IBGP关系的选路
    3. 优选 next-hop为 0.0.0.0 最优先
    4. 优选AS_Path短的路由(EBGP/IBGP关系均可被干涉,但只能在EBGP邻居间修改)
    5. 优选Origin起源类型 IGP > EGP > Incomplete(可在控制层面任意接口修改)
    6. 优选来组同一AS的路由MED值最小的(最常干涉EBGP选路的属性
  • 如果属性无法解决选路问题,需要考虑如下

    1. 优选从EBGP学来的路由(联邦EBGP当做普通IBGP路由对待)
    2. 优先AS内部IGP的Metric最小的路由
    3. 优选Cluster_List最短的路由
    4. 优选Orginator_ID最小的路由
    5. 优选Router_ID最小的路由器发布的路由
    6. 优选具有较小IP地址的邻居学来的路由
  • 负载分担:去往不同的目标,将流量分担不同的链路上

  • 负载均衡:到同一个目标基于多条路径同时传输

  • 针对属性的修改来实现负载分担,正常时在BGP协议控制层面流量的入或出口上匹配信息,修改属性

image-20221129205019958

  • 如果属性没有生效,可以使用软清除:

    1
    refresh bgp [更新源地址]     # 用户模式下
  • 权重属性:PrefVal

    • 属性名 传播范围 默认值 取值范围 优先
      权重 不传播,本地有效(私有) 0 0 - 65535 越大越优
    • 修改对端传递过来的路由权重(全局修改)

      1
      peer [对端的更新源地址] preferred-value [权重值]    # 先进入BGP进程
    • 修改对端传递过来的部分路由权重

      1. 抓取流量:

        1
        ip ip-prefix [列表名] index [序列号] [deny/permit] [IP地址/IP网段] [网络号固定长度]
      2. 设置策略列表:

        1
        2
        3
        4
        route-policy [列表名] permit node [序列号]
        if-match ip-prefix [列表名]
        apply preferred-value [权重值]
        # 加上空表,表示过行其他所有
      3. 在BGP中调用:

        1
        peer [对端更新源地址] route-policy [列表名] import     # 先进入BGP进程,本地生效所以export是不生效的
  • 本地优先级:LocPrf

    • 属性名 传播范围 默认值 取值范围 优先
      本地优先级 IBGP邻居间 100 0 - 255 越大越优
    • 最常用于干涉IBGP选路,在边界路由器上修改(影响离开本AS的流量)

    • 修改本地优先级:(全局)

      1
      defalut local-preference [优先值]      # 先进入BGP
    • 修改本地优先级:(部分),本设备所学到的路由传递给对端时的本地优先级

      1. 抓取流量:

        1
        ip ip-prefix [列表名] permit [IP网段] [子网掩码/长度]
      2. 设置策略列表:

        1
        2
        3
        route-policy [列表名] permit node [序列号]
        apply local-preference [优先值]
        # 加上空表,表示过行其他所有
      3. 在BGP中调用:

        1
        peer [对端更新源地址] route-policy [列表名] export     # 先进入BGP进程,export我方把路由传出的方向
  • 下一跳:NextHop

  • 路径:AS-Path

    • 一条目在传递过程中将记录所有经过的AS编号,优选经过的AS数量最小的路径

    • AS-PATH只能在真正的EBGP关系间传递时可以添加(不能减少

    • 因为该属性同时用于EBGP水平分割:若存在本地AS号,将拒绝该条目

    • 即可干涉EBGP关系,也可干涉IBGP关系选路,但修改时只能在EBGP关系进行

    • 修改AS-PATH:

      1. 抓取流量:

        1
        ip ip-prefix [列表名] permit [IP网段] [子网掩码/长度]
      2. 设置策略列表:

        1
        2
        3
        route-policy [列表名] permit node [序列号]
        apply as-path [AS号] ..... additive
        # 加上空表,表示过行其他所有
      3. 在BGP中调用:

        1
        peer [对端更新源地址] route-policy [列表名] [export/import]     # 先进入BGP进程,我方和对方 相对路由传递的入或出方向
  • 起源:Origin

    • 修改Origin:

      1. 抓取流量:

        1
        ip ip-prefix [列表名] permit [IP网段] [子网掩码/长度]
      2. 设置策略列表:

        1
        2
        3
        route-policy [列表名] permit node [序列号]
        apply origin [i/e/?] [1/2] # 1:代表入口处修改,2:代表出口处修改
        # 加上空表,表示过行其他所有
      3. 在BGP中调用:

        1
        peer [对端更新源地址] route-policy [列表名] [export/import]     # 先进入BGP进程
  • 度量:MED

    • 多出口的鉴别属性

    • BGP协议自身没有度量值;只有在宣告本地路由或重发布IGP到BGP时,携带IGP度量,度量值在MED处显示

    • 管理员可以利用该属性,来实现干涉选路(最常用于干涉EBGP关系选路,常常用于AS1干涉AS2对AS1的选路)

    • 修改MED:

      1. 抓取流量:

        1
        ip ip-prefix [列表名] permit [IP网段] [子网掩码/长度]
      2. 设置策略列表:

        1
        2
        3
        route-policy [列表名] permit node [序列号]
        apply cost [度量值]
        # 加上空表,表示过行其他所有
      3. 在BGP中调用:

        1
        peer [对端更新源地址] route-policy [列表名] [export/import]     # 先进入BGP进程

9.MPLS多协议标签交换:

1.概念:

  • 标签交换:

    • 第一跳路由器在数据包中的第2.5层压入一个标签号,
    • 从第二跳路由器开始仅基于标签号,查询本地的LFIB表转发数据即可;由最后一跳路由器弹出标签
    • 标签的意义在于更快的查;但随着包交换的加速,使用标签交换失去了快速查表的优势
  • 包交换:基于3层(IP地址)数据进行转发

    • 快速交换:一次路由,多次交换
    • 特快交换:无需路由,直接交换
  • 三层网络设备的数据处理方式:

    • 进程转发:基于数据包的处理方式,每数据包每个路由

    • 快速转发:基于数据流的处理方式,每数据流每路由一次

    • CEF转发(思科私有技术):基于拓扑的数据处理方式,无需路由直接转发

  • 当下MPLS多协议标签交换存在的意义:

    1. 解决BGP的路由黑洞
    2. MPLS VPN
    3. MPLS TE 流量工程
  • 另外,随着包交换的加速,使得今天的MPLS技术也开始基于FIB表工作,来提高MPLS的工作效率

  • MPLS当下需要基于特快交换来进行

  • 名词解析:

    • RIB:路由表;
    • FIB:转发信息数据库,IP路由表的升级
    • LIB:标签信息数据库,存储到达每一个网段的标签信息
    • LFIB:FIB+LIB,标签转发信息数据库,MPLS技术使用该信息库进行标签的交换数据的传输
    • MPLS domain:MPLS的工作半径
    • LSR:标签交换路由表,标签的swap交换
    • edge LSR(PE):边界标签交换路由器,工作MPLS域的边缘,连接域外设备
    • LSP:标签交换路由表,整体工作MPLS域内
  • LDP:

    • 基于UDP和TCP的646端口工作
    • 先使用UDP发送组播hello包发现邻居,获取邻居IP地址,再和该直连邻居建立TCP的会话;邻居关系建立后,为了邻居关系间的稳定,一般使用设备的环回地址来建立TCP会话
    • 建议设置环回地址为MPLS协议的 route-id ,该id值将携带在组播收发的hello报文中,之后自动进行TCP会话建立
    • 当发送keepalive时,标志这LDP会话建立完成;使用advertise通告传递label信息
  • 标签交换的控制层面协议(标签的分配和传输协议):LDP(MPLS),MP-BGP(MPLS-VPN),RSVP(MPLS-TE)

  • 控制层面:

    1. 在没有MPLS时控制层仅生成RIB表和FIB表,FIB是基于RIB生成的
    2. MPLS协议会启动TDP(cisco思科)或LDP(公有),直连设备间将建立邻居关系
    3. MPLS在建立邻居关系后,生成邻居表;LDP协议再基于FIB表中学习到的路由条目生成标签号
    4. 标签号生成后,将存储于本地的LIB表,LIB表将在邻居间共享
    5. 运行MPLS协议的设备,将LIB和FIB进行过结合,将标签号和最佳路径的关系映射生成LFIB表
  • 数据层面:

    1. 第一跳路由器查看FIB表,将目标网段的出项标签压入数据包
    2. 中间路由器仅基于2.5层的标签号查询本地的LFIB表,如果数据包中的标签号和LFIB表中的入标签相同,将数据包中的标签号替换成出项标签,通过对应的端口转发出去。
    3. 最后一跳路由器负责弹出标签(数据包中的标签号和入标签相同,且出标签为NULL,去除数据包中的标签,然后查看FIB表根据对应的下一条和转出接口转发数据)
  • MPLS中的标签号:

    • 标签被压入在第2层与3层之间,称为2.5层

    • 标签的格式:32位,4个字节

      image-20221129093610927

    • Label标签位:前20位,20bit,有2^20个标签号,其中0-15号保留,作为特殊编号;华为中16-1023代表静态MPLS技术使用的标签

    • EXP策略位:前21-23位,3bit,默认000,为优先级,用于QOS策略使用

    • 栈底位:第24位,1个bit,S=0代表未到达栈底,S=1到达栈底

    • TTL:生存时间8bit,在第一次压入标签时,将当前数据包中的3层TTL复制到标签中,之后查询一次标签TTL减一,在最后一跳设备弹出标签时将2.5层的TTL复制到3层报头中。

  • MPLS的次末跳:倒数第二跳,默认执行

    • 边界LSR将本地的直连网段传递给MPLS域内邻居后,LDP分配标签号为3,告知倒数第二跳设备它的身份;
    • 导致倒数第二跳设备在查询LFIB表后,已知转发路径的前提下提前弹出标签,使得最后一跳路由器均只需要查询FIB表;
    • 否则最后一跳路由器在查询LFIB表后,弹出标签还需要查询FIB(避免目标网段在本设备上,还要去查看FIB表)
  • 标签的分配方式:DU下游自主方式,下游按需

2.配置:

  • 路由可达

  • 配置MPLS的id

    1
    2
    mpls lsr-id [route-id]   
    # 必须先定义MPLS的router-id,要为本地设备的真实IP地址,且邻居可达;因为该地址将用于建立TCP会话,建议使用环回地址
  • 先开启MPLS,再激活LDP协议

    1
    2
    mpls
    mpls ldp
  • 在标签经过的接口处开启MPLS,激活LDP协议

    1
    2
    3
    # 先进入接口
    mpls
    mpls ldp
  • 当启动配置完成后,邻居间使用UDP报文组播收发hello包;之后基于hello包中的rouer-id地址进行TCP会话的建立

    1
    display tcp status        # 查看是否建立会话

    image-20221129164237832

  • 当TCP会话建立后,邻居间基于TCP会话再建立邻居关系,生成邻居表

    1
    display mpls ldp peer     # 查看ldp邻居表

    image-20221129164354769

  • 再然后基于本地的FIB表,默认华为仅针对32位的主机路由生成标签号;存储于LIB表中,之后邻居间共享LIB表

    1
    2
    display fib               # 查看FIB表 
    display mpls ldp lsp # 查看LIB表,装载本地和邻居为各条路由分配的标签号

    image-20221129170034455

    image-20221129164628694

    标签 说明
    入标签in 自己分配的标签
    出标签out 别人给我的标签
  • 最后路由器将LIB和FIB集合,生成最佳路径的标签转发规则 LFIB

    1
    display mpls lsp           # 查看LFIB表

    image-20221129164700182

  • 注:默认华为仅针对32位主机路由分配标签

  • 对所有的路由进行标签号的分配(在没有配置此命令之前只会为环回分配标签)

    1
    lsp-trigger all   # 先进入mpls进程,对所有运行mpls的路由器配置
  • 追踪目标路由报文的转发路径

    1
    2
    tracert [目标路由网段]
    tracert -v [目标路由网段]

3.MPLS解决BGP路由黑洞:

  • MPLS协议并不会为通过BGP协议学习的路由条目分配标签号,而是在访问这些BGP路由目标网段时,在流量中压入到达这些网段的BGP下一跳设备地址的标签号

  • 例:R2从BGP邻居5.5.5.5学习到6.6.6.0网段的路由;R2在访问6.6.6.0网段时,将在是数据包中压入到达5.5.5.5 IP地址的标签号,来穿越中间没有运行BGP协议的设备,实现打破路由黑洞

  • 注:华为设备不为BGP协议执行下一跳标签机制,cisco默认执行

  • 开启路由基于隧道进行递归查询:

    1
    route recursive-lookup tunnel     # 产生BGP路由黑洞的两台设备上配置

4.MPLS-VPN:

  • 两个自治系统AS之间使用虚拟专线将各自的路由转递到对方去,进行私网的通信

  • 即;将物理距离上大的网络通过VPN的方式连接到一起

  • 控制层面(客户之间的路由传递),CE:客户路由器,P:运营商路由器,PE:运营商别界路由器

    • 阶段1 : CE端路由传递给PE端,PE端将路由重发布到BGP的空间路由表

    • 阶段2:

      1. PE与PE传递路由,传递路由是携带RD参数的(本地区分路由)和RT参数(负责路由的导入和导出)

      2. PE之间建立VPNV4-BGP邻居从而传递路由(在华为中,PE设备若不开启MPLS 功能,VPNV4-BGP路由开启了也无

        法传输;若开启MPLS 等功能,可以在PE之间传递VPNV4-BGP 路由;但是路由不优选,所哟需要保证下一跳是可达的)

    • 阶段3:将BGP路由传递在PE与CE之间的IGP协议中

  • 数据层面:内层标签是在MP-BGP中传输,外层LDP协议中传递

    1. CE的数据包来到PE上,查看空间FIB表,打上内层标签(空间路由的标签),再查看FIB表,打上外层标签(对端PE端环回的标签)
    2. 中间路由查询LFIB表,根据外层标签转发数据
    3. 如果是对方PE的直连网段,进行次末跳,撕掉外层标签,然后最后一跳路由器撕掉内层标签;如果不是则到达对方PE端再撕除外层标签,然后撕掉内层标签
  • RD路由区分器 与RT路由目标:

    • RD:区分本地不同的VRF空间,防止其他vrf空间的路由传递到路由器混淆,将IPv4路由变成VPNV4路由(RD值+IPv4)
    • RT:BGP扩展团体属性,用于对方接受路由时方便识别和区分
  • 配置:

    • IGP公网可达(除空间接口)

    • 创建VRF空间,并配置空间接口

      • 创建vrf空间,只具有本地意义

        1
        ip vpn-instance [空间名]
      • 进入IPv4的配置模式下

        1
        ipv4-family
      • 设置路由区分器的RD值:

        1
        route-distinguisher [num:num] 
      • 设置RT值

        1
        vpn-target [num:num]    # 必须与对端的PE端一致,如果需要将两条VPN合拼为一条,那就互相给所在VPN加上对方VPN的RT值
        后接参数 说明
        both 默认,我方识别的RT值和打入的RT值相同
        export-extcommunity 我方识别对端的RT值
        import-extcommunity 我方打入的RT值,需要对端进行识别
      • 进入链接CE端的接口,关联到vrf空间

        1
        2
        int [接口号]
        ip binding vpn-instance [空间名]
      • 配置私有IP地址

        1
        ip address [IP地址] [子网掩码/长度]
      • 注:在关联到vrf空间前不能配置接口IP地址,否则该地址的直连路由将进入公有路由表

      • 查看空间路由

        1
        display ip routing-table vpn-instance [空间名]
      • 配置完后,加入空间的接口所连的对端路由器可以 ping通我方,但我方无法 ping 通对方;因为我方 ping对方时,查询的不是空间路由表

      • 查看空间路由表 ping通空间接口对端的路由

        1
        ping -vpn-instance [空间名] [对端的IP地址]
    • 建立ISP之间的IBGP邻居后,VPN -V4路由(num:num IP地址)需要MP-BGP来传递

      • 在IPv4的家族模式中,与对端建立一个VPN-V4的关系(VPNV4-BGP邻居是建立在IBGP邻居路由器上),用于传递VPN -V4的路由

        1
        2
        3
        # 先进入BGP进程
        ipv4-family vpnv4
        peer [对端更新源地址] enable
      • 查看mp-bgp邻居关系:

        1
        display bgp vpnv4 all peer 
      • 查看mp-bgp的路由表

        1
        display bgp vpnv4 all routing-table
    • 在双端的各私网内配置路由,在有空间接口的路由器上,需要进入空间的路由进程操作:

      1
      2
      [协议类型] [进程号] vpn-instance [空间名]    # 在MPLS-plus中PE两端的进程号必须相同,该双端6类LSA为3类LSA
      ......
      1
      2
      # 在空间接口路由器上添加静态路由
      ip route-static vpn-instance [空间名] [目标IP网段] [子网掩码/长度] [下一跳IP地址]
    • 在IBGP邻居路由器上进行双向重发布:

      • 需要进入bgp的vpn空间内进行重发布

        1
        2
        3
        bgp [进程号]
        ipv4-family vpn-instance [空间名]
        import-route [协议类型] [进程号]
      • 私网所使用的路由进程内重发布

        1
        import-route bgp    # 需要先进入协议进程
      • 重发布的路由将进入空间路由表,查看空间路由

        1
        display ip routing-table vpn-instance [空间名]
      • 查看空间MPLS表:

        1
        display mpls [MPLS表类型] vpn-instance [空间号

5.OSPF-sham

  • 用于MPLS-VPN的备份链路

  • 配置:

    • 创建环回接口,将环回接口加入对应vfr空间,并指定IP地址

      1
      2
      3
      int loopback [接口号]
      ip binding vpn-instance [空间名]
      ip address [IP地址] [子网掩码/长度] # 环回接口必须是32位的主机地址
    • 将接口网段宣告到vpnv4-bgp的邻居当中

      1
      2
      3
      bgp [进程号]
      ipv4-family vpn-instance [空间名]
      network [IP地址] [子网掩码/长度]
    • 配置sham-link

      1
      2
      3
      ospf [进程号] vpn-instance [空间名]    
      area 0 # 只能在区域0
      sham-link [环回源IP地址] [环回目标IP地址]
    • 查看sham-link

      1
      display ospf sham-link
    • 因为到达我方的PE端会走备份链路,所以修改备份链路之间的开销值

      1
      ospf cost [num]     # 先进入接口

2.IPv6:

1.概念:

  • IPv4地址的缺点:

    • IPv4地址空间不足

    • IPv4具有负载的头部

    • IPv4头部安全性较低

    • IPv4地址不能作为标识符和定位符

  • 改进IPv4的缺点:

    • 使用私有地址,进行NAT转换

    • DHCP

    • VLSM CIDR

  • 组成:128位2进制,4位冒分16进制标识(8段4个16进制)

    1
    2
    3
    C0A8:0101:C0A8:0101:C0A8:0101:C0A8:0101 /64      # IPv6使用网络号长度标识子网掩码
    简写:
    C0A8:101:C0A8:101:C0A8:101:C0A8:101 /64
  • IPv6的地址表示简写时需要注意的问题:

    • 在使用零压缩法时,不能把一个位段内部的有效0也压缩掉

      1
      例如:不能将FF02:30:0:0:0:0:0:5简写为FF2:3::5
    • :: 双冒号在一个地址中只能出现一次

      1
      例如:地址0:0:0:2AA:12:0:0:0,不能把它表示为::2AA:12::
    • 确定::之间代表了被压缩的多少位0,可以数一下地址中还有多少个位段,然后用8减去这个数,再将结果乘以16

      1
      例如:在地址FF02:3::5中有3个位段(FF02、3和2),可以根据公式计算:(8-3)×16=80,则::之间表示有80位的0被压缩
  • 特征:

    1. 全球单播地址:同等于IPv4的公有地址,IPv6没有nat地址转换
    2. 可聚合性:IANA组织对全球的地址进行合理分配
    3. 多宿主:一个物理接口可以同时拥有多个不同网段的IPv6地址,但不同接口不能在同一网段
    4. 自动配置:1.DHCP-v6,2.auto-config路由器接口手工配置IPv6地址,然后路由器将自己地址的前缀(网络号)下放给PC,PC将自动使用EUI-64来补充主机位
    5. 即插即用:热插拔
    6. 端到端的链接:不需要NAT
    7. 重编址
    8. 简易的报头:1.没有广播机制,只有组播和单播,2.没有检测盒(因为2和4层均存在效验盒),3.流标签
    9. 安全性和移动性
    10. IPv4和IPv6共存

2.IPv6的报文头:

  • IPv4和IPv6的报文头对比:

    颜色 说明
    黄色 一致
    红色 取消
    蓝色 代替

    image-20221130144333986

  • V4中第二列用于分片,V6可以使用扩展首部实现

  • 替代字段

    IPv4 IPv6
    服务类型 扩展表
    报头长度 有效负载长度

3.IPv6地址分类:

  • 图示:

    image-20221130150106793

  • IPv6地址的分类:

    • 单播地址:一对一,只有单播地址能作为源地址,也可作为目标地址
      1. AGUA全球可聚合单播地址:计划公网使用的IPv6地址,2000::/3
        • 商用internet地址:2001 :: /16
        • IPv6兼容性地址:2002 :: /16
          • IPV6到IPV4兼容性地址,主要在IPV4向IPV6过渡时使用的技术,自动tunnel使用地址
          • 将IPV4地址映射至IPV6地址(该IPV4地址为公有地址):200.1.1.1 /24到C8 01 01 01,2002:C801:0101::/48
        • 非商用internet地址:3FFF :: /16
      2. 本地链路地址
    • 组播地址:一对多,作为目标地址
      • FF02::1 :所有支持组播的路由与所有主机
      • FF02::2 :所有支持组播的路由器
      • FF02::9 :RIPNG
      • FF02::1:FFxx:xxxx :一般用于収送本地信令帧时使用,例如ARP
    • 任意播地址:一到最近

4.配置:

  • 开启全局的ipv6功能:

    1
    ipv6
  • 进入接口

  • 开启IPv6功能

    1
    ipv6 enable
  • 配置IPv6地址

    1
    ipv6 address [IPv6地址] [网络号长度]   # 一个接口可以配置多个不同网段的IPv6地址
  • 尝试ping 对端:

    1
    ping ipv6 [IPv6地址]
  • Link-local地址使用eui-64产生主机位

    1. 将接口MAC地址中间拆开
    2. 将FF-FE插入
    3. 将第七bit反转
  • 所有的link-local地址都以FE80开头

  • 注意:在非以太网接口不存在MAC地址,使用本设备上接口最小MAC地址进行EUI-64转换

  • 作用:

    • 在同一广播内可以通讯使用,由于本地多接口可以使用相同MAC转换,故在使用link-local地址访问对端时,需要定义出接口
    • 常常作为动态路由协议生成的路由表条目中的下一跳地址
  • 手工配置Link-local地址

    1
    ipv6 address [IPv6地址] link-local    # 地址要以fe80开头
  • 尝试ping 通对方的本地链路地址:

    1
    2
    3
    4
    # 查看本地链路地址
    display ipv6 interface [接口号]
    # ping
    ping ipv6 [对方的本地链路接口] -i [对方接口号]

6.ICMPv6协议:

  • Type : 类型字段,类型字段范围0-255

    • 0-127:ICMPV6中的错误报文(error)
    • 128-255:信令报文
  • ICMPV6路径MTU协商,从源到目标感知整条路径上最小的MTU值

  • NDP:邻居发现协议,代替ARP功能,学习对方的MAC地址

    • ICMPV6类型135的NS(邻居请求)
    • ICMPV6类型136的NA(邻居通告)
  • 配置:

    1
    ping ipv6 [IPv6地址]
  • 地址无状态化auto-config:进行行网络前缀通告(使用RA携带,周期间隔为200s,超时时间为1800s)

    • ICMPV6类型133 RS(路由发现)

    • ICMPV6类型 134 RA(路由通告)

    • 配置:

      • IPV6路由端关闭抑制RA发送的功能:华为设备默认抑制RA发送

        1
        undo ipv6 nd ra halt
      • 开启IPV6的无状态化地址生成:

        1
        ipv6 address auto [global/link-local]    # global:生成单播地址,link-local:生成link-local地址
      • 查看:

        1
        display ipv6 interface [接口号]

7.静态路由:

1
ipv6 route-static [IPv6地址] [下一跳IPv6地址]

8.动态路由:

  • RIP路由信息协议:

    • 创建riping协议

      1
      riping [进程号]
    • 进入接口,启动rip

      1
      riping [进程号] enable    # 进入接口中
    • 查看IPv6的RIP路由

      1
      display ipv6 routing-talbe protocol riping
  • OSPF最短路径优先协议:

    • 创建OSPF协议:

      1
      ospfv3 [进程号]
    • 设置RID值:

      1
      router-id [IPv4格式ID]
    • 进入接口,启动OSPF,通告区域:

      1
      ospfv3 [进程号] area [区域号]
    • 查看邻居表:

      1
      display ospfv3 peer 
    • 查看LSA信息:

      1
      display ospfv3 lsdb
    • LSA类型:

      LSA类型 说明
      1类LSA 存放的邻居之间的拓扑信息
      2类LSA 描述MA网络中的路由器
      3类LSA
      4类LSA
      5类LSA
      7类LSA
      8类LSA 描述本设备的物理链路的link-local 地址信息
      9类LSA 描述本路由器通告本链路的路由信息

9.BGP协议:

  • 注意:在Cisco中可以使用IPV4地址建立BGP邻居,激活就可以建立IPV6的BGP邻居;在华为中必须使用IPV6地址建立IPV6的BGP邻居

  • 配置:

    • 创建BGP协议进程:

      1
      bgp [进程号]
    • 指定本设备RID:

      1
      router-id [IPv4格式RID]
    • 指定对端的更新源地址

      1
      peer [IPv6地址] as-number [AS号]
    • 宣告网络:

      1
      2
      3
      ipv6-family unicast
      peer [IPv6地址] enable
      network [IPv6地址] [网络长度]
    • 查看IPv6的邻居关系表:

      1
      display bgp ipv6 peer 
    • 查看IPv6的邻居路由表:

      1
      display bgp ipv6 routing-table

4.IPV6 IPV4共存问题:

  • GRE隧道

    • 先保证路由可达

    • 创建进入隧道接口

      1
      int Tunnel[接口号]  
    • 配置隧道接口IP地址

      1
      2
      ipv6 enable
      ipv6 add [IPv6地址] [网络长度]
    • 定义封装标准

      1
      tunnel-protocol gre
    • 新增报头的源IP(真实的物理接口的IP地址)

      1
      source [IPv4地址]
    • 新增报头的目标IP地址(真实的物理接口的IP地址)

      1
      destination [IPv4地址]
  • IPV6overIPV4 6to4隧道

    • 先保证路由可达

    • 创建进入隧道接口

      1
      int Tunnel[接口号]  
    • 配置隧道接口IP地址

      1
      2
      ipv6 enable
      ipv6 add [IPv6地址] [网络长度]
    • 定义封装标准

      1
      tunnel-protocol ipv6-ipv4 6to4
    • 新增报头的源IP(真实的物理接口的IP地址)

      1
      source [IPv4地址]
  • 双栈:同时部署IPV4 和 IPV6网络;当主机同时存在IPV4和IPV6的地址,IPV6优先IPV4;