一、BGP简介

Border Gateway Protocol

是一种实现自治系统AS之间的路由可达,并且选择最佳路由的距离矢量路由协议

早期发布的三个版本分别时BGP-1、BGP-2、BGP-3,1994年开始使用BGP-4,2006年单播IPv4开始使用BGP-4。IPv6使用的是MP-BGP,也称为BGP4+。

IGP和EGP
  • IGP(内部网关路由协议):注重路由的计算和发现
  • EGP(边界网关路由协议):助作路由的传递、控制和优选
BGP特点
  • 外部网关协议
  • 在AS之间选择最佳路由和控制路由的传播
  • 基于TCP协议
  • 在发送路由前需要建立TCP连接
  • 端口号179
  • 需要有对端邻居更新源(邻居的IP地址)的路由条目
  • 支持CIDR(汇总)
  • 支持手动汇总,自动汇总
  • 增量更新
  • 路由更新时,只发送update报文更新的路由,大大减少了BGP传播路由所占用带宽,适用于在Internet上传播大量路由
  • 路径矢量路由协议
  • 携带可达路由和其路径属性
  • 无环路
  • AS间:BGP通过携带AS路径信息来标记途径的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路
  • AS内部:BGP路由器在AS内部学习的路由不在通告给AS内的IBGP邻居,避免AS内产生环路
  • BGP自身没有发现路由的能力
  • 需要依靠IGP路由、静态路由、直连路由等发现路由后进行转换
  • 丰富的路由策略
  • 进行灵活的路由选路、实现防环,并且能直到邻居按策略发布路由
  • BGP路由条目的一般情况下比IGP大
  • 可防止路由震荡
  • 路由聚合、路由衰减
  • 易于扩展
  • 基于TLV(Type + Length + value)结构进行传递路由
  • 可以支持IPv4、IPv6、MPLS等协议

二、BGP基本概念

自治系统AS

AS是指在一个实体管辖下的拥有相同选路策略的IP网络,一个AS被一个机构或运营商管辖。例如

BGP网络中的每个AS都被分配一个唯一AS号

AS号:

  • 一台路由器只能属于一个AS
  • 一个AS可以存在多台路由器
  • AS号分为2字节、4字节的:
  • 2字节
  • 范围:1~65535
  • 公有AS号:1~64511
  • 私有AS号:64512~65535
  • 4字节
  • 范围:1~4294967295
  • 表现形式:例:65536
  • BGP 65535.1()
BGP邻居类型

两种邻居类型

  • IBGP邻居关系:相同AS号的设备建立的BGP邻居关系
  • EBGP邻居关系:不同AS号的设备建立的BGP邻居关系

全球BGP路由查询 bgp路由汇总_网络通信

BGP可以跨跳(跨AS)建立邻居关系

  • BGP只能手动的发现邻居关系(需要命令行触发)
  • BGP是基于TCP协议,单播建立邻居关系
BGP报文交互中的角色

BGP报文交互中分为SpeakerPeer两种角色。

  • Speaker:发送BGP报文的设备称为BGP发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其它BGP Speaker。
  • Peer:相互交换报文的Speaker之间互称对等体(Peer)。若干相关的对等体可以构成对等体组(Peer Group)。
BGP的路由器号(Router ID)

router id用于唯一标识一台BGP设备,通常是32位的IPv4地址

在BGP会话建立时发送的Open报文中携带。对等体之间建立BGP会话时,每个BGP设备都必须有唯一的Router ID,否则对等体之间不能建立BGP连接

手工配置

自动选取

  • 选择loopback接口大的IP地址为BGP router id
  • 没有loopback地址时,选择接口最大的IPv4地址为 BGP router id

一旦选出Router ID,除非发生接口地址删除等事件,否则即使配置了更大的地址,也保持原来的Router ID

三、BGP邻居关系基本配置

1.BGP建立邻居关系前,需要建立TCP,保证TCP的源目可达

2.BGP可以通过直连建立邻居,也可以通过非直连建立邻居

  • 当BGP设备间存在多条物理链路时,推荐使用非直连建立,稳定性好
  • EBGP一般采用直连建立邻居关系

BGP邻居关系的配置

拓扑:

全球BGP路由查询 bgp路由汇总_网络通信_02

  • 实验要求
  • 步骤一:基础配置与IP地址与布置IGP
  • 路由器各端口配置IP地址,并且在AS 200各路由器上配置OSPF 将AS内网络宣告进OSPF中
  • 步骤二: AR1、AR5、AR7建立EBGP邻居(使用直连接口建立)
  • 步骤三:AR4、AR6建立EBGP邻居(使用非直连接口建立)
  • 步骤四:R1、R3、R4上配置IBGP邻居,使用Loopback0地址作为更新源

在配置BGP邻居前,必须保证AS内路由可达

配置建立EBGP
  • 建立EBGP关系(直连建立
#步骤二: AR1、AR5、AR7建立EBGP邻居
##R1上配置
router-id 1.1.1.1		//指定router-id 可以在系统视图下配置,也可以在bgp进程内配置
bgp 200				//进程号即为AS号
peer 15.1.1.5 as-number 100
peer 17.1.1.7 as-number 400
##R5上配置 
router id 5.5.5.5		
bgp 100
peer 15.1.1.1 as-number 200		//as-number为对端的AS号
##R7上配置
router id 7.7.7.7		
bgp 100
peer 17.1.1.1 as-number 200
  • 建立EBGP邻居关系(非直连建立)
  • 由于是非直连建立,会出现路由不可达,双方路由器学习不到用来建立邻居关系的路由,所以在配置邻居的基础上要多配置一个静态路由
  • 并且EBGP的open报文TTL值默认为1,到达对端设备需要先经过直连端口、TTL值减一,TTL值减到0默认丢弃,报文不可达,所以还需要修改TTL值
##步骤三:AR4、AR6建立EBGP邻居

##AR4上配置
bgp 200
router-id 4.4.4.4
peer 6.6.6.6 as-number 300
peer 6.6.6.6 connect-interface loopback 0	//指定更新源(默认是直连接口)
peer 6.6.6.6 ebgp-max-hop 2	//修改TTL为2(默认TTL为1)
quit
ip route-static 6.6.6.6 32 46.1.1.6 	//配置静态路由使得6.6.6.6可达
##AR6上配置
bgp 300
router-id 6.6.6.6
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface loopback 0	//指定更新源(默认是直连接口)
peer 4.4.4.4 ebgp-max-hop 2	//修改TTL为2(默认TTL为1)
quit
ip route-static 4.4.4.4 32 46.1.1.4
配置建立IBGP
  • 建立IBGP邻居关系(直连建立)
##
bgp 200
router-id 2.2.2.2
peer 12.1.1.1 as-number 200
  • 建立IBGP邻居关系(非直连建立)
##步骤四:R1、R3、R4上配置IBGP邻居,使用Loopback0地址作为更新源

##R1上配置
peer 3.3.3.3 as-number 200 
peer 3.3.3.3  connect-interface LoopBack 0	 //(更新源)
peer 4.4.4.4 as-number 200 
peer 4.4.4.4  connect-interface LoopBack 0 	 //(更新源)

##R3上配置
bgp 200
router-id 3.3.3.3
peer 1.1.1.1 as-number 200
peer 1.1.1.1 connect-interface loopback 0
peer 4.4.4.4 as-number 200 
peer 4.4.4.4  connect-interface LoopBack 0

##R4上配置
bgp 200
router-id 4.4.4.4
peer 1.1.1.1 as-number 200
peer 1.1.1.1 connect-interface loopback 0
peer 3.3.3.3 as-number 200 
peer 3.3.3.3  connect-interface LoopBack 0

更新源:更新源地址,指用来建立邻居的本设备地址,默认使用实际接口地址。

检查命令

display bgp peer		//检查bgp邻居关系
display bgp error		//检查错误原因
display bgp routing-table	//检查BGP的路由

IBGP与EBGP邻居关系建立的区别

  • 邻居AS号
  • EBGP在非直连建立时:
  • 邻居更新源路由一般需要额外部署,保证可达
  • EBGP默认的TTL为1,EBGP非直连建立邻居关系需要修改该数值
  • IBGP在建立邻居关系时,默认TTL为255

建立邻居时,TCP连接可以通过默认路由建立,但是**只能是一端存在默认路由