相关文章推荐
老实的玉米  ·  BGP 术语·  6 月前    · 
老实的玉米  ·  BGP, Border Gateway ...·  6 月前    · 
老实的玉米  ·  RFC 1654 - A Border ...·  6 月前    · 

一、BGP的五种交互报文

BGP的五种报文,分别是: Open、Keepalive、Update、Notification、 Route-Refresh

BGP包属于应用层,所以BGP的所有报文都是被TCP封装着,依赖TCP通道进行传输。

[下图:可以看到BGP包封装于TCP之内]
在这里插入图片描述

1、各报文的作用

如何通过BGP报头判断出所发送的BGP报文类型?【通过BGP头部中的Type字段】

TYPE值 报文类型
1 OPEN
2 UPDATE
3 NOTIFICATION
4 KEEPALIVE
5 REFRESH

1-Open :用于协商参数、建立邻居,TCP三次握手正常建立之后,才会发送Open报文。

2-Update :用于更新传递路由信息。

3-Notification :报告错误信息,用于断开邻居关系。

4-Keepalive :定期发送,用于维持BGP邻居关系,Keepalive报文格式中只包含报文头,没有附加其他任何字段。

5-Route-Refresh :路由刷新报文,让对方主动给我发送最新的,我所需要的路由信息。

2、报文内部的重要字段

更多更具体的字段介绍,可自行查看报文格式大全: 网络协议报文格式大全 v1.0.chm

Open

  • My AS,本地AS号
  • BGP Identifier,BGP标识符(本设备的Router-id)

Update

  • Withdrawn Routes,撤回的路由。

    1、如果该值为0,表示该Update报文用于传递BGP路由。

    2、如果该值为4,表示撤消一条BGP路由:

    (WRL=4 表示撤销4字节的路由,因为IP地址就是32bit=4字节,故表示撤销了一条路由)

  • Network Layer Reachability Information(NLRI)网络层可达信息,记录BGP路由。

    1、在WRL=0的时候,该字段的信息表示增加的路由条目信息。

    2、有NLRI就会有 路由属性字段 ,描述该对应路由的路由属性。

  • Path attributes 路径属性

Notification

  • Error Code,错误错误代码, 定义错误的类型 ,非特定的错误类型用零表示。
  • Data,详细的错误信息, 指定错误细节编号 ,非特定的错误细节编号用零表示。

Keepalive

  • 只有BGP报头,其Type字段置位4。

Route-Refresh

  • AFI,地址族标识,标识需要传递的路由类型,默认是IPv4,还可以设置IPv6、VPNv4等。
  • SAFI,子地址族标识,针对NLRI网络层可达信息就分为 单播 NLRI(SAFI 1)和多播 NLRI(SAFI 2),默认为单播。
    在这里插入图片描述
    在这里插入图片描述

二、BGP的六种状态机

BGP的六种状态机分别是:

Idle、Connect、Active、OpenSent、OpenConfirm、Established

1、每个状态机的介绍

Idle:

  • 启用BGP后,开始准备建立TCP的连接时的状态。
  • 任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。

Connect

  • 已发送TCP Syn报文,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。

    (Connect Retry 重置连接计时器,默认32S)

  • 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。

  • 如果TCP连接失败,那么BGP转至Active状态。

  • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试进行TCP连接,一直停留在Connect状态。

    1、即32S之后还没收到邻居回复TCP报文,将一直重复发送TCN SYN报文,状态也一直处于Connect。

    2、除非收到TCP连接失败或其它错误信息,不然一直在此状态停留尝试TCP连接。

    3、这种状态下可以判定邻居没有配置BGP或中间设备拦截了BGP报文。

Active

  • 从Connect转换到该状态下,BGP继续试图建立TCP连接:

    1、如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。

    2、如果TCP连接失败,那么BGP一直停留在Active状态不断发起TCP连接,直到重传定时器超时之后返回到Connect状态。

    要点:重传定时器从Connect状态到Active状态时不会重置会一直倒计时。

OpenSent

  • TCP连接建立成功,开始发送Open包并等待对等体回复Open报文。

    1、如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。

    2、如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。

OpenConfirm

  • 此时已经发送了Keepalive报文,正在等待对方回包。

    1、如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
    在这里插入图片描述

Established

  • 对等关系建立完毕,双向开始交互Update报文交互各自的路由信息。

  • 为了维持Established状态,需要定时发送Keepalive报文保持。

    (Keepalive报文默认发送间隔60s、超时时间180s)

  • 除了通过Keepalive报文进行保持Established状态,还通过Update等其它报文进行监测:

    1、如果收到 正确的 Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。

    2、如果收到 错误的 Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。

    3、如果收到Notification报文,那么BGP转至Idle状态。

    4、如果收到TCP断开通知,那么BGP也会断开连接,转至Idle状态。

2、总结每个状态之间交互的报文

(1)交互 TCP报文

  • Idle

  • Connect

  • Active

(2)交互 Open报文

  • OpenSent

(3)交互 Keepalive报文

  • OpenConfirm

(4)交互 Update、Keepalive

  • Established

3、各状态机之间的关联

(1)由左侧的Idle状态开始,发送TCP SYN请求建立报文后进入Connect状态,如果TCP failed建立失败将进入Active继续进行TCP建立,直到重传定时器超时再回到Connect状态继续重复该过程。

(2)TCP三次握手之后TCP Established建立成功进入Opensent状态并发送Open报文。

(3)当收到正确的Open报文之后进入OpenConfirm状态并发送Keepalive报文。

(4)当收到正常的Keepalive报文之后进入Established状态开始交互Update报文相互学习路由条目

在各个状态机中,如果发生了Error错误,即收到Notification报文将直接回退到Idle状态。

三、BGP对等体关系建立过程

1、对待体建立过程

2、路由交互过程

3、BGP邻居建立过程抓包

在这里插入图片描述
该Wireshark抓包中涵盖了BGP建立过程(TCP交互、Open交互、Keepalive交互、Update交互【含Update更新与撤消】)以及路由更新(Route-Refresh)、错误报告(Notification)

Wireshark抓包信息,下载查看更多内容: BGP建立过程抓包(wireshark版本Version 3.6.6)

更多相关笔记,观看CSDN: HCIA~HCIE个人笔记

启用BGP后,开始准备建立TCP的连接时的状态。任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。Connect已发送TCP Syn报文,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。(Connect Retry 重置连接计时器,默认32S)如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。如果TCP连接失败,那么BGP转至Active状态。 1、Open 报文 :用于 建立 BGP 对等体 连接。(AS,RID,holdtime 180s) 2、Update 报文 :用于在 对等体 之间交换 路由 信息。(NLRI, 网络 层可达信息,即 路由 前缀及对应的属性,公认必遵:下一跳、起源和AS-path) 3、Notification 报文 :用于中断 BGP 连接。(错误通知) 4、Keepalive 报文 :用于保持 BGP 连接。//保活 报文 (60s) 5、Route-refresh 报文 :用于在改变 路由 策略后请求 对等体 重新发送 路由 信息。只有支持 路由 刷新(Rou
作用(同OSPF):用于表示设备的唯一性。选举方式(同OSPF)1 手动配置(最优先)2 自动选择IP地址最大的环回接口3 自动选择IP地址最大的物理接口注:修改RID后需要重新 建立 邻接 关系 。配置RID BGP 存在5 类型的 报文 ,不同类型的 报文 拥有相同的头部(header)。 报文 名称作用发送时刻Open协商 BGP 对等体 参数, 建立 对等体 关系 BGP TCP连接 建立 成功之后Update发送 BGP 路由 更新 BGP 对等体 关系 建立 之后有 路由 需要发送或 路由 变化时向 对等体 发送Update 报文 Notification报告错
BGP 对等体 关系 E BGP (External BGP ):位于不同自治系统的 BGP 路由 器之间的 BGP 对等体 关系 。两台 路由 器之间要 建立 E BGP 对等体 关系 ,必须满足以下两个条件 两个 路由 器所属AS不同(即AS号不同) 在配置E BGP 时,Peer命令所指定的 对等体 IP地址要求 路由 可达,并且TCP连接能够正确 建立
Technorati 标签: BGP ,CCIE,CCNP,原理,基础 BGP 博大精深,在学习的时候我们会发现和传统的IGP有很大的区别,以至于我们在学习的时候很多东西都是在颠覆我们传统的概念,而让学习变得更加困难。 学习是一个渐进的 过程 。所以对于学习 BGP 这个 路由 协议来说一定要做好充分的思想准备。 在正式开始学习 BGP 技术本身以前,最好先在网上查一下 BGP 这个 路由 协议产...
(其中Keepalive 报文 为周期性发送,其余 报文 为触发式发送) Open:负责和 对等体 建立 邻居 关系 。 KeepAlive:该消息在 对等体 之间周期性地发送,用于保持 BGP 连接。 Update:该消息被用来在 BGP 对等体 之间传递 路由 信息。 Notification:当 BGP Speaker检测到错误的时候,就发送该消息给 对等体 。 Route-refresh:用来通知 对等体 自己支持 路由 刷新能力;用于在改变 路由 策略后请求 对等体 重新发送 路由 信息。只有支持 路由 刷新(Rou.
BGP 有限 状态机 共有六 状态,分别是Idle、Connect、Active、OpenSent、OpenConfirm和Established。 Idle状态是 BGP 初始状态。在Idle状态下, BGP 既不发送TCP连接请求,也拒绝邻居发送的TCP连接请求。只有在收到本设备的Start事件后, BGP 才开始尝试和其它 BGP 对等体 进行TCP连接,并转至Connect状态。 Start事件是由一个操作者配置一个 BGP 过程 ,或者重置一个已经存在的 过程 或者 路由 器软件重置 BGP 过程 引起的。 Open:用于邻居 关系 建立 Keepalive:周期性的向 BGP 对等体 发出KeepAlive消息,来保持链接的有效性 Update:携带的是 路由 更新(增加或减少)信息 Notification:当 BGP 检测到错误状态时,就向 对等体 发出Notification消息,之后 BGP 连接会立即被关闭 Route-refresh:用于在改变 路由 策略后请求 对等体 重新发送指定地址族的 路由 信息 BGP 所有的消息格式都是“消息头+消息体”的形式,消息头的长度为19个字节。
BGP 邻居 建立 过程 涉及技术问题,可以回答。 BGP 是一个较为复杂的协议,它的邻居 建立 过程 大致分为以下几个步骤: 1. 握手初始化:两个邻居节点之间的第一个消息是一个Open消息,此消息携带了邻居节点的一些基本信息。 2. 参数协商和状态同步:通过握手初始化 过程 ,从Open消息中得到相互间的参数信息,在本阶段会同步邻居节点的 路由 表。 3. 可达性检查: BGP 邻居在完成参数协商和状态同步之后,需要进行可达性检查,这是为了确保邻居节点之间可以正确地通信。 4. 邻居 关系 建立 完成:当可达性检查通过后,邻居 关系 建立 成功。 以上是 BGP 邻居 建立 过程 的主要步骤,具体细节可以参阅相关资料。