BGP(边界网关协议)是运行于TCP上的一种资质系统的路由协议。BGP是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关的路由域间的多路连接的协议。是距离矢量型协议。

BGP使用AS号作为识别不同AS路由的标识,该AS号需要具有唯一性
1-65535 可以使用扩展32位 65536-4294967395(不够用的情况)

特点

BGP属于外部或域间路由协议,BGP的主要目标是为处于不同AS中的路由器之间进行路由信息通信提供保障。
BGP使用TCP来传递路由信息(端口号179),保证了可靠性但丧失了邻居自动发现。
BGP的最小单位是一个路由器,所以每个路由器只能使用一个BGP进程。
BGP不需要在所有路由更新报文中传送完整的路由数据库信息,只需要在启动时交换一次完整信息,后续的路由更新报文只通告网络的变化信息

邻居建立

消息类型
  • OPEN消息:是tcp连接建立后发的第一个消息,用来建立邻居关系
  • Keepalive消息:BGP会周期性的向邻居发Keepalive消息,用来保持连接的有效性。
  • Update消息:用于在邻居之间交换路由信息
  • Notification消息:BGP检测到错误状态时发送。
  • Route-refresh消息:用于刷新路由表
状态转换过程

1,Idle : 为初始状态,当协议激活后开始初始化,复位计时器,并发起第一个tcp连接,监听来自邻居的初始化消息并将它的状态转到connect状态。
2,connect:开始Tcp连接并等待tcp连接成功的消息。如果tcp连接成功,则进入opensent状态,如果tcp连接失败,进入active 状态
3,active : BGP总是试图建立tcp连接,若连接计时器超时,则退回到connect状态,tcp连接成功就转为opensent状态。
4,open sent:tcp连接已建立,自己已发送第一个open报文,等待接收对方的open报文,并对报文进行检查,若发现错误则发送notification消息报文并回退到idle状态。若检查无误则发送keepaive消息报文,keepalive计时器开始计时,并转为open confirm状态。
5,open confirm:BGP等待keepalive报文,同时复位保持计时器。如果收到了keepalive报文,就转为established状态,邻居关系协商完成。如果系统收到一条更新或keepalive消息,它将重新启动保持计时器;如果收到notification消息,BGP就退回到空闲状态。
6,Established:即建立了邻居关系,路由器将和邻居交换uplate报文,同时复位保持计时器。

邻居之间路由传递规则

BGP两种邻居关系
IBGP邻居关系——相同的AS路由器建立的邻居关系
EBGP邻居关系——不同的AS路由器建立的邻居关系

1,BGP不管什么邻居关系只传递最优路由(不传不优,优的标志是>,也就是不带>发的路由不会被bgp传递)
2,EBGP邻居关系路由传递:只要不违背环路原则,EBGP邻居传递无限制(前提必须优)
3,IBGP邻居关系路由条目传递:IBGP自己产生的路由(自己宣告的,自己重发布进来的)和EBGP邻居传递的都可以传递给它的IBGP邻居,但不可以在IBGP之间中转(也就是不能传递到邻居的邻居)

BGP属性

路由器发送关于目标网络的BGP更新消息,更新的度量值被称为路径属性。属性可以是公认的或可选的,强制的或自由决定的,传递的或非传递的。属性也可以是部分的。路径属性分为四类:公认必遵,公认自决,可选传递,可选非传递。

公认属性:
  • 是公认所有BGP实现都必须识别的属性,这些属性被传递给BGP邻居。
  • 公认强制属性必须出现在路由描述中,公认自由决定属性可以不出现在路由描述中。
可选属性:
  • 非公认属性被称为可选的,可选属性可以是传递的或非传递的。
  • 可选属性不要求所有的BGP实现都支持。
  • 对于不支持的可选传递属性,路由器将其原封不动的传递给其他的BGP路由器,在这种情况下,属性被标记为部分的。
  • 对于可选非传递属性,路由器必须将其删除,而不将其传递给其他BGP路由器。

公认必尊:origin (起源) as-path (as路径) next-hop (下一跳)
公认自决:local_pref (本地优先级) atomic_aggregate (原子聚合:指出已被丢失了的信息。
可选传递:aggregator(聚合者:标明了实施路由聚合的BGP路由器ID和聚合路由的路由器的AS号) community(团体:指共享一个公共属性的一组路由器。
可选非传递:MED(多出口区分:该属性通知AS意外的路由器采用那一条路径到达AS,它也被认为是路由的外部度量,值越低优先级越高)originator_id (起源ID:携带AS路由器的路由器id,用于防止环路) cluster_list(簇列表:反射路径)