1.BGP概述
(1)AS
IANA(Internet Assigned Numbers Authority,因特网地址分配组织):IAB(Internet Architecture Board,因特网体系委员会)的下设组织。IANA授权NIC( Network Information Center,网络信息中心)和其他组织负责IP地址和域名分配,同时,IANA负责维护TCP/IP协议族所采用的协议标识符数据库,包括自治系统号。
在长度为16bit的AS号表示方式中:64512-65534为私有AS号,在长度为32bit的AS号表示方式中:4200000000-4294967294为私有AS号。
(2)使用IGP传递路由
VPN(virtual private network,虚拟专用网):使用虚拟专业网络技术可以从逻辑上建立一个直接连接的网络。
(3)使用BGP传递路由
(4)BGP在企业中的应用
2.BGP的基本概念
(1)BGP概述
(2)BGP特征(1)
(3)BGP特征(2)
(4)BGP对等体关系
(5)BGP对等体关系建立(1)
BGP建立对等体的对等体都会发起TCP三次握手,所以会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互。
(6)BGP对等体关系建立(2)
(7)TCP连接源地址
为什么BGP需要更新源
因为bgp邻居建立是基于tcp连接的,必须有本端地址和对端地址。指定更新源,实际就是指定发出open包的源地址,也就是tcp连接的本端地址。
举个例子:
RTA直连RTB,网段12.1.1.0/24。RTA环回口1.1.1.1/32,RTB环回口2.2.2.2/32。as都为1。
如果直接RTA neighbor 2.2.2.2 remote-as 1
RTB neighbor 1.1.1.1 remote-as 1
因为没有指定更新源,就像发icmp包一样,bgp默认会用出口地址作为源,也就是RTA的open包源为12.1.1.1,RTB的open包源为12.1.1.2。
这样:对于RTA,我要跟2.2.2.2建邻居,却收到了12.1.1.2的open包,我当然不理它;对于RTB同理,邻居建不起来。
下面这点很多人都不知道,就是只要有一台路由器做了update-source loopback0,邻居就能构建成功。因为bgp邻居只建立一条tcp连接。
比如:RTB neighbor 1.1.1.1 update-source loopback0
这样RTA要跟2.2.2.2建邻居,而且也收到了2.2.2.2的open包,tcp连接构建成功,bgp邻居建立。
至于RTB收到的open包,并不是它想建的邻居,毫无影响。
及时双方都做了update-source loopback0,show tcp brief也可看到,只会构建一条tcp连接。
(8)BGP报文类型(1)
不同于常见的IGP协议,BGP使用TCP作为传输层协议,端口号179,这使得BGP支持在非直连的路由器之间建立对等体关系。
BGP(边界网关协议)使用TCP(传输控制协议)作为其传输层协议,可以在非直连的路由器之间建立对等体关系的原因如下:
-
可靠性:TCP是一种可靠的传输协议,它提供了数据传输的确认、重传和流量控制等机制。通过使用TCP作为传输层协议,BGP可以确保路由信息的可靠传输,防止数据丢失或损坏,从而保证对等体之间的通信和路由信息的准确性。
-
连接性和状态管理:TCP是一种面向连接的协议,通过建立和维护连接,可以在非直连的路由器之间建立稳定的对等体关系。BGP使用TCP的连接性和状态管理功能,实现对等体之间的可靠通信,并确保连接的稳定性和持久性。
-
应用层特性:TCP具有一些应用层特性,如端口号、数据分段和窗口控制等机制。BGP可以利用TCP的这些特性,为路由信息交换和通信提供更多的灵活性和可扩展性。例如,BGP可以使用不同的端口号来标识不同的对等体,从而实现多对等体之间的并行传输和处理。
-
安全性:TCP提供了一些安全特性,如数据加密、身份验证和连接认证等机制。通过使用TCP作为传输层协议,BGP可以利用这些安全特性,增强对等体之间的通信和路由信息的安全性。
(9)BGP报文类型(2)
(10)BGP报文格式-报文头格式
(11)BGP报文格式-Open
Opt Parm Len:Optional parameters的长度。
Optional parameters:宣告自身对于一些可选功能的支持,比如认证、多协议支持。
除了IPv4单播路由信息,BGP4+还支持多种网络层协议(如IPv6、组播),在协商时BGP对等体之间会通过Optional parameters字段协商对网络层协议的支持能力。
(12)BGP报文格式-Update
Unfeasible routes length:不可达路由字段的长度,以Byte为单位。如果为0则说明没有Withdrawn Routes 字段。
Withdrawn Routes Length:标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。
Total path attribute length:路径属性字段的长度,以Byte为单位。如果为0则说明没有Path Attributes 字段。
(13)BGP报文格式-Notification
(14)BGP报文格式-Keepalive
(15)BGP报文格式-Route-refresh
在Open报文协商时会协商是否支持Route-refresh,如果对等体支持Route-refresh能力,则可以通过refresh bgp命令手工对BGP连接进行软复位,BGP软复位可以在不中断BGP连接的情况下重新刷新BGP路由表,并应用新的策略。
对于不支持Route-Refresh能力的BGP对等体,可以配置keep-all-routes命令,保留该对等体的所有原始路由,这样不需要复位BGP连接即可完成路由表的刷新。
缺省情况下未开启keep-all-routes。
(16)BGP状态机(1)
(17)BGP状态机(2)
Idle状态是BGP初始状态。在Idle状态下,BGP拒绝对等体发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
如果TCP连接失败,那么BGP转至Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
在Active状态下,BGP总是在试图建立TCP连接。
如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
如果TCP连接失败,那么BGP停留在Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
(18)BGP状态机详解(1)
(19)BGP状态机详解(2)
(20)BGP对等体表
BGP对等体表的作用为列出本设备的BGP对等体,以及对等体的状态等信息。
MsgRcvd 、MsgSent:从对等体收到的报文个数,向对等体发送的报文个数。
OutQ:out queue,对外发送报文队列中排队的个数,一般为0。
(21)BGP路由表(1)
列出本设备发现的所有BGP路由,如果到达同一个目的地存在多条路由,则将路由都进行罗列,但每个目的地只会优选一条路由。
(22)BGP路由表(2)
通过display bgp routing-table ipv4-address { mask | mask-length } 可以显示指定IP地址/掩码长度的路由信息,在其中有关于该BGP路由的详细信息,如:路由始发者、下一跳地址、路由的路径属性等。
(23)BGP路由的生成
(24)Network注入路由(1)
Network方式注入的路由必须是已经存在于IP路由表中的路由条目,否则不会被成功注入到BGP路由表中。
(25)Network注入路由(2)
(26)import-route方式注入路由
(27)BGP聚合路由
执行聚合之后,在本地的BGP路由表中除了原本的明细路由条目之外,还会多出一条聚合的路由条目。
如果在执行聚合时指定了detail-suppressed,则BGP只会向对等体通告聚合后的路由,而不通告聚合前的明细路由。
在聚合时配置了抑制明细路由的参数,R3上查看路由表,将只能看到BGP路由:10.1.0.0/22,无法看到聚合前的明细路由。
(28)通告原则
(29)BGP路由通告原则一
(30)BGP路由通告原则二
(31)BGP路由通告原则三(1)
(32)BGP路由通告原则三(2)
(33)BGP路由通告原则四(1)
(34)BGP路由通告原则四(2)
产生该问题根本原因为AS200域内未运行BGP的路由器并无从BGP学习到的路由条目,查找路由失败,导致R1丢弃报文。为此制定了BGP同步原则:
当BGP的路由条目也存在于IGP路由表时才对外发送,以图中场景为例,当R3查看IGP路由表,OSPF路由表中并无路由10.0.4.0/24,因此并不会向R5发送该路由,自然也不会产生后续的访问失败问题。
解决该问题的方式有:
将BGP路由重分发到IGP中,基本不会使用该方式。
建立全互联的IBGP对等体关系,让全网所有路由器都拥有BGP路由。