动态路由协议可以按照工作范围分为IGP以及EGP。
IGP工作在同一个AS内,主要用来发现和计算路由,为AS内提供路由信息的交换;
AS:路由管理域的集合。
而EGP工作在AS与AS之间,在AS间提供无环路的路由信息交换,BGP则是EGP的一种。
BGP协议经常用于ISP之间。
自治系统AS:的典型定义是指由同一个技术管理机构管理,使用统一选路策略的一些路由器的集合。
每个自治系统都有唯一的自治系统编号,这个编号是由IANA分配的。1-65535(2个字节)
私有编号:64512-65535
现在编号扩充为4个字节
IGP与EGP的区别在于:
1.IGP是运行于AS内部的路由协议,主要有: RIP, OSPF及ISIS。IGP着重于发现和计算路由。
2.EGP是运行于AS之间的路由协议,现通常都是指BGP。(EGP已以淘汰)
3.IGP着重于发现和计算路由,BGP着重于控制路由的传播和选择最优的路由
BGP特点:(对于运营商网络,要求运行维护简单,占用资源少,简单高效)
- BGP是外部路由协议(运行范围),用来在AS之间传递路由信息
- 是一种增强的距离矢量路由协议(工作模式)
- 可靠的路由更新机制 (基于TCP)
- 丰富的Metric度量方法(控制路由的传播和选择最优的路由)
- 从设计上避免了环路的发生 (距离矢量由于不知道拓扑,可能产生环路)
- 为路由附带属性信息
- 支持CIDR(无类别域间选路)
- 丰富的路由过滤和路由策略
2 工作机制-路由传递
AS2是中转AS,EBGP,IBGP
BGP使用TCP作为其承载协议,提高了协议的可靠性。
- 建立连接:SP边界路由器知道对方的IP地址后,就可以尝试跟对方建立连接了,如果连接不能建立,说明对方还未激活,于是会等待一段时间再进行连接,这个过程一直重复,直到连接建立。
- 能力交互:必须交换某些数据以确认对方的能力或确定自己下一步的行动,即所谓的能力交互。不是每个支持IP协议栈的设备都支持BGP,所以必须在该TCP连接上进行确认。 确认对方支持BGP协议后,就进行路由表的同步。
- 保持连接:路由同步时,就可以不用重新建立连接而马上进行数据的传输。建立连接的两台设备互为对等体(PEER)。
- KeepAlive:两端的设备通过该TCP连接周期性的发送KeepAlive消息,以向对端确认自己还存活。 如果一端设备在一个存活超时的时间内没有接收到对方的KeepAlive消息,则认为对方已经停止运行BGP进程,于是拆除该TCP连接,并把从对方接收到的路由全部删除。
3 工作机制-路由更新
- 传输协议:TCP,端口号179
- 无需周期性更新 路由更新
- 只发送增量路由 周期性发送keepAlive报文检测TCP的连通性
保证了BGP和对端通信时占用最少的带宽。
说明:BGP邻居关系建立的前提是TCP连接建立,TCP连接的前提是路由可达。所以两个BGP之间可能相隔很远。
OSPF邻居关系需要通过组播发送hello包,点对点型直达,点对多点需要将类型改为p2mp,NBMA需要手动指定,广播要通过选举DR BDR
4 BGP报文种类
运行BGP的路由器称之为BGP Speaker,它们之间将会交换五种类型的报文,其中OPEN报文,KEEPALIVE报文以及NOTIFICATION报文用于邻居关系的建立和维护。
- 三次握手建立TCP连接
- Open:负责和对等体建立邻居关系。 主要包括BGP版本,AS号等信息。试图建立BGP邻居关系的两个路由器在建立了TCP会话之后开始交换OPEN信息以确认能否形成邻居关系。
- Keepalive:该报文用于BGP邻居关系的维护,为周期***换的报文,用于判断对等体之间的可达性。
- Notification:BGP的差错检测机制,一旦检测到任何形式的差错,BGP Speaker会发送一个NOTIFICATION报文,随后与之相关的邻居关系将被关闭。
- Route-refresh:用来通知对等体自己支持路由刷新能力;
- Update:该报文则是邻居之间用于交换路由信息的报文,其中包括撤销路由信息和可达路由信息及其各种路由属性。是BGP五个报文中最重要的报文。
实验:
bgp 100 //1个router只能属于1个管理机构(AS),bgp id是100
peer 12.1.1.2 as-number 200 //BGP需要手动指定邻居,建立TCP连接,不能自动发现
network 1.1.1.1 24
display bgp peer
peer 2.2.2. connnetc-interface loopback 0 //保存证可靠性
5 BGP报文头
- Marker(标记):16字节,固定为1。
- Length(长度):两字节无符号整数。指定了消息的全长,包括头部。
- Type(类型):1 字节,指示报文类型,如OPEN、UPDATE报文等 。
- 1 – OPEN 2 – UPDATE 3 – NOTIFICATION 4 – KEEPALIVE
6 Open报文(重要)
- Version:BGP的版本号。对于BGPv4来说,其值为4。
- My Autonomous System:本地AS编号。通过比较两端的AS编号可以确定是EBGP连接还是IBGP连接。
- Hold Time:在建立对等体关系时两端要协商Hold time,并保持一致。如果两端所配置的Hold time时间不同,则BGP会选择较小的值作为协商的结果。如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。Keeplive interval的3倍。keeplive时间根据hold Time调整。
- BGP Identifier:BGP路由器的Router ID,以IP地址的形式表示,用来识别BGP路由器。在VRP5.30系统中,如果没有通过命令router id进行配置,则按照如下规则进行选择:优选Loopback接口地址中最大的地址作为Router ID,如果没有Loopback接口配置了IP地址,则从其它配置了IP地址的物理接口中选择一个最大IP地址的作为Router ID。
- Opt Parm Len(Optional Parameters Length):可选参数的长度。如果为0则没有可选参数。 Optional Parameters:是一个可选参数用于BGP验证或多协议扩展(Multiprotocol Extensions)等功能。每一个参数为一个(Parameter Type-Parameter Length-Parameter Value)三元组。 对等体在接收到Open消息后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-refresh消息的交换。
7 keepalive报文
keepAlive 消息在对等体之间的交换频率以保证对方保持定时器(Open 报文hold time属性协商)不超时为限。
当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送KeepAlive 报文,表明该连接是否还可保持。
8 update报文(重要)
UPDATE消息被用作在BGP对等体之间传递路由信息。
多条可达路由信息可以被通告到相应的对等体上,或者多条不可达路由信息被撤消。
UPDATE消息由以下五个部分组成:
- Withdrawn Routes Length :(2字节无符号整数) 不可达路由长度,表示Withdrawn Routes字段的数据长度。如果Withdrawn Routes Length字段数值为0,则表示Withdrawn Routes字段没有任何数据,在UPDATE消息中不会被显示。
- Withdrawn Routes :(变长) 撤销路由。该字段包括一系列的IP地址前缀信息,以<length, prefix>的格式来表示,比如<19,198.18.160.0>表示一个198.18.160.0 255.255.224.0的网络。
- Path Attribute Length :(2字节无符号整数) 路由属性长度,表示Path Attribute字段的数据长度。如果Path Attribute Length数值为0,则表示Path Attribute字段没有任何数据,在UPDATE消息中不会被显示。
- Path Attributes :(变长) 路径属性(用于选路)。每个路径属性都是由三元组所组成:<attribute type, attribute length, attribute value>。
- Network Layer Reachability Information(NLRI) :(变长) 网络可达信息。包括一系列的IP地址前缀。格式与撤消路由字段一样<length, prefix>。
最小UPDATE消息的长度为23个字节(19字节的报文头+2字节的撤消路由长度+2字节的路径属性长度)。这样的UPDATE消息被称之为End-of-RIB,用于BGP GR。 一条UPDATE消息可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update消息里的路由属性适用于该Update消息中的NLRI字段里的所有目的地(用IP前缀表示)。
一条UPDATE消息可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚的定义了BGP Speaker之间先前通告过的路由。 一条UPDATE消息可以只用于撤销路由,这样就不需要包括路径属性或者网络可达信息。相反,也可以只用于通告可达路由,就不需要携带Withdrawn Routes了。
9 Notification报文,错误时发送
Notification报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误码(如定时器超时等),以及错误子码和错误信息。
- Errorcode:错误码。1字节长的字段。每个不同的错误都使用唯一的代码表示,而每一个错误码都可以拥有一个或多个错误子码,但如果某些错误码并不存在错误子码的话,则该错误子码字段以全0表示。
- Errsubcode:错误子码。
- 消息头错误子码: 1 – 连接非同步 2 – 错误的消息长度 3 – 错误的消息类型
- OPEN消息错误子码: 1 – 不支持的版本号 2 – 错误的对等体AS号 3 – 错误的BGP ID 4 – 不支持的可选参数 5 – RFC1771里被定义为认证失败,RFC4271里则对此表示反对。 6 – 不可接受的保持时间(Hold Time)
- UPDATE消息错误子码: 1 – 畸形的属性列表 2 – 无法识别的公认属性 3 – 缺少的公认属性 4 – 属性标志位错误 5 – 属性长度错误 6 – 无效的ORIGIN属性 7 – RFC1771里被定义为AS路由环路,RFC4271里对此表示反对。
- 8 – 无效的下一跳属性 9 – 可选属性错误 10 – 无效的网络字段 11 – 畸形的AS_PATH
- Data:依赖于不同的错误码和错误子码,用于标识错误原因。是一个可变长的字段,被NOTIFICATION用作诊断错误的原因。注:Data字段的长度可以由以下公式来决定:消息长度=21+Data长度 (NOTIFICATION消息最小长度为21个字节,其中已经包括消息头。)
10 Route-refresh报文
在所有BGP路由器使能Route-refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。
本路由器的输入策略发生变化,会导致Loc-rib需要更新,所以发出refresh消息,收到该消息的路由器,会重新向本地路由发送路由信息。这样,本地路由就可以使用新策略更新loc-rib。
AFI(Address Family Identifier):地址族标识符(2字节)。
Res.(Reserved field):保留区域(1字节),发送方应将其设置为0,接收方应当忽略该区域的信息。
SAFI(Subsequent Address Family Identifier):子地址族标识符(8字节)。
11 BGP协议中消息的应用
- 通过TCP建立BGP连接时,发送OPEN消息,BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(Router ID)、授权信息等。这些信息都在Open消息中携带。
- 连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端
- 稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性
- 当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体
- ROUTE-REFRESH消息用来通知对等体自己支持路由刷新
12 BGP状态机(重要)
- idle:BGP连接的第一个状态。在空闲状态,BGP在等待一个启动事件。启动事件出现以后,BGP初始化资源,复位连接重试计时器(Connect-Retry),发起一条TCP连接,同时转入Connect(连接)状态。
- Connect:在此状态,BGP发起第一个TCP连接,如果连接重试计时器超时,就重新发起TCP连接,并继续保持在Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就转入Active状态。
- Active:在此状态,BGP总是在试图建立TCP连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。
- OpenSent:在此状态,TCP连接已经建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送Open报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive报文,并复位Keepalive计时器,开始计时。同时转入OpenConfirm状态。
- OpenConfirm:在OpenConfirm状态,BGP等待一个Keepalive报文,同时复位保持计时器,如果收到了一个Keepalive报文,就转入Established阶段,BGP邻居关系就建立起来了。
- Established:在Established状态,BGP邻居关系已经建立,这时,BGP将和它的邻居们交换Update报文,同时复位保持计时器。
另外,在除Idle状态以外的其它五个状态出现任何Error的时候,BGP状态机就会退回到Idle状态。
在BGP对等体建立的过程中,通常可见的三个状态是:Idle、Active、Established。 Idle状态下,BGP拒绝任何进入的连接请求,是BGP初始状态。 Active状态下,BGP将尝试进行TCP连接的建立,是BGP的中间状态。 Established状态下,BGP对等体间可以交换Update报文、Route-refresh报文、Keepalive报文和Notification报文。
BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方通过Update报文交换路由信息。
小结:connect 开始建立tcp连接
open-sent tcp连接建立,发送open
open-confirm 确认收到的open报文,等待keeplive
established 邻居关系已建立,交换Update报文
任何状态出现error,状态机都会退回到idle状态
13 BGP数据库(重要)
BGP默认情况下不会形成负载均衡,只会把最优路由放入路由表
display bgp routing-table
注意状态代码:
从BGP路由表中选择最优路由放入IP 路由表
14 路由信息的处理
当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base, RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。
这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。 得出的最佳路径被存储到本地BGP RIB (Loc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。
Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB (Adj-RIB-Out)中。
如果启用了多路径特性,最佳路径和所有等值路径都将被提交给IP-RIB考虑。 除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。
1.BGP是怎样去发现邻居的?
答:BGP并没有邻居发现机制,所有的邻居关系都是手工指定的。
2.BGP是基于什么传输层协议的?端口号为多少?
答:BGP是基于TCP协议的一个域间路由协议,其端口号为179。
3.请说出BGP五种消息的作用?
答:
1OPEN:主要包括BGP版本,AS号码等信息。试图建立BGP邻居关系的两个路由器建立了TCP会话后开始交换OPEN信息以最终确认能否形成邻居关系。
4 KEEPALIVE:该报文用于BGP邻居关系的维护,为周期***换的报文,用于判断对等体之间的可达性。
3 NOTIFICATION:BGP的差错检测机制,一旦检测到任何形式的差错,BGP会发送一个NOTIFICATION报文,随后与之相关的邻居关系将被关闭。
2 UPDATE:这是BGP四个报文中最重要的报文。用于BGP邻居之间交换路由更新信息,它包括了BGP用来组建无环路的互连网络结构所需的所有信息,主要包括以下三个基本部分: 网络层可到达信息(NLRI) 路径属性(PATH ATTRIBUTES) 不可达的路由(WITHDRAWN ROUTES)
5 ROUTE-REFRESH:用来通知对等体自己支持路由刷新。