带你挑战年薪20W的广域网协议---BGP协议

BGP原理的概述

BGP协议是一种距离矢量(Distance vector)的路由协议,但是比起RIP等典型的距离矢量协议,又有很多增强的性能。BGP使用TCP作为传输协议,使用端口号179。在通信时,要先建立TCP会话,这样数据传输的可靠性就由TCP协议来保证,而在BGP的协议中就不用再使用差错控制和重传的机制,从而简化了复杂的程度。另外,BGP使用增量的、触发性的路由更新,而不是一般的距离矢量协议的整个路由表的、周期性的更新,这样节省了更新所占用的带宽。BGP还使用“保留”信号(Keepalive)来监视TCP会话的连接。而且,BGP还有多种衡量路由路径的度量标准(称为路由属性),可以更加准确的判断出最优的路径。
BGP使用TCP作为其承载协议建立连接。因此与IGP逐跳路由器建立邻居不同,BGP可以跨越多跳路由器建立邻居关系。
带你挑战年薪20W的广域网协议---BGP协议

BGP和IGP协议对比

协议的分类

IGP(Interior gateway protocols)——内部网关协议,定义为在一个自治系统内部使用的路由协议(包括动态路由协议和静态路由)。IGP的功能是完成数据包在AS内部的路由选择,或者说,是讲述数据包如何穿过本地AS的。RIPv1&v2,OSPF,ISIS都是典型的IGP。
EGP(Exterior gateway protocols)——外部网关协议,定义为在多个自治系统之间使用的路由协议。它主要完成数据包在AS间的路由选择,或者说,讲述数据包为了到达目的IP,需要通过哪些AS。BGP就是一种EGP。
2字节长度的AS号码,即1-65535。其中1-64511为公有AS,64512-65534为私有AS。在2009年1月之后,IANA决定使用4字节长度AS,范围是65536-4294967295

应用场景

IGP只作用于本地AS内部,而对其他AS一无所知。它负责将数据包发到主机所在的网段(segment)

EGP作用于各AS之间,它只了解AS的整体结构,而不了解各个AS内部的拓扑结构。它只负责将数据包发到相应的AS中,余下的工作便交给IGP来做。

BGP报文类型的全面解析

1、open报文:负责和对等体建立邻居关系
2、update报文:被用来在对等体之间传递路由信息(包括可达路由或者不可达路由)
3、Notification报文:检测到错误的时候,就发送该消息给对等体
4、Keepalive报文:周期性每60秒发送,用来维护TCP/IP连接
5、Route-refresh报文:表示自己支持路由刷新能力
带你挑战年薪20W的广域网协议---BGP协议

BGP的报文类型

带你挑战年薪20W的广域网协议---BGP协议

Open报文

带你挑战年薪20W的广域网协议---BGP协议
里面比较重要的字段
version v4版本
My AS 代表是我该设备的AS号码
router id 代表该设备的BGP的router id
Hold time时间 从0开始一直增加到180s,最小可以为0,这种情况下BGP连接被认为永远是up,对等体之间
不会发送keepalive报文来检测邻居是否失效
可选字段和可变长字段

Keepalive报文

带你挑战年薪20W的广域网协议---BGP协议
缺省情况下,发送KeepAlive 的时间间隔为 60 秒,Hold Time是180秒。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。

KeepAlive报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。

Update报文

带你挑战年薪20W的广域网协议---BGP协议
前面两部分表示路由撤销信息,后面三部分表示路由可达信息
路由可达信息携带各种属性
但是路由撤销信息就不需要携带各种属性了,因为这时候是撤销了

Notification报文

带你挑战年薪20W的广域网协议---BGP协议
Notification报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误码(如定时器超时等),以及错误子码和错误信息。
带你挑战年薪20W的广域网协议---BGP协议

Route-refresh报文

带你挑战年薪20W的广域网协议---BGP协议
可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略

BGP协议当中IBGP邻居关系建立

运行在相同AS内的BGP路由器建立的邻居关系为IBGP(Internal BGP)邻居关系
带你挑战年薪20W的广域网协议---BGP协议

RTB的配置

bgp 345
 router-id 1.1.1.1
 peer 2.2.2.2 as-number 345 
 peer 2.2.2.2 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization        ###默认配置
  peer 2.2.2.2 enable            ###默认生成

RTC的配置

bgp 345
 router-id 2.2.2.2
 peer 1.1.1.1 as-number 345 
 peer 1.1.1.1 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  peer 1.1.1.1 enable      ###默认生成

注意点:

IBGP的关系 一般建议用loopback建立
loopback比较稳定
可以实现冗余备份

BGP协议当中EBGP邻居关系建立

运行在不同AS之间的BGP路由器建立的邻居关系为EBGP(External BGP)邻居关系
带你挑战年薪20W的广域网协议---BGP协议

RTB的配置

bgp 345
 router-id 1.1.1.1
 peer 12.1.1.2 as-number 200 
 #
 ipv4-family unicast
  undo synchronization
  peer 12.1.1.2 enable   ###默认生成
#

RTD的配置

#
bgp 200
 peer 12.1.1.1 as-number 345 
 #
 ipv4-family unicast
  undo synchronization
  peer 12.1.1.1 enable    ###默认生成
#

注意点:

一般建立ebgp关系的时候 建议大家用物理接口建立 如果用loopback的话 需要修改ttl的数值
peer 1.1.1.1 ebgp-max-hop 2
默认情况下建立ebgp的时候,我们发送数据包的TTL值为1

BGP协议的状态机的详细概述

带你挑战年薪20W的广域网协议---BGP协议
Idle:空闲状态,BGP系统发出start事件(就是管理员配置BGP的过程),BGP初始化资源,复位连接计时器(32s),发起TCP连接,同时转入Connect状态
 
Connect:在此状态,BGP发起第一个TCP连接,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就转入Active状态。(TCP连接失败两种情况:1.收到TCP参数协商失败的回复,则进入Active状态,2.对方长时间没有回复,超时,则保持在Connect状态
 
Active:BGP总是在试图建立TCP连接,如果连接计时器超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。
 
OpenSent:BGP也已经发送了第一个Open报文,BGP就在等待其对等体发送Open报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive报文,并复位Keepalive计时器(180s),开始计时。同时转入OpenConfirm状态。
 
OpenConfirm:BGP等待一个Keepalive报文,如果收到了一个Keepalive报文,就转入Established阶段

Established:BGP对等体交换update、keepalive、route-refresh报文

以后会周期性发送keepalive报文(60s)

如果收到notification报文或者收到TCP拆除链接通知,BGP转至idle状态

BGP的路由生成方式network

Network命令是逐条将IP路由表中已经存在的路由引入到BGP路由表中
带你挑战年薪20W的广域网协议---BGP协议
通过display命令在RTC上查看是否学到BGP发布的路由条目
带你挑战年薪20W的广域网协议---BGP协议

BGP的路由生成方式import

Import命令是根据运行的路由协议(RIP,OSPF,ISIS等)将路由引入到BGP路由表中,同时import命令还可以引入直连和静态路由
带你挑战年薪20W的广域网协议---BGP协议
通过display命令在RTC上查看是否学到BGP引入的路由条目
带你挑战年薪20W的广域网协议---BGP协议

上一篇:BGP建邻与宣告


下一篇:docker 制作etcd 集群