Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BGP协议 #8

Open
luoxn28 opened this issue Dec 9, 2016 · 0 comments
Open

BGP协议 #8

luoxn28 opened this issue Dec 9, 2016 · 0 comments

Comments

@luoxn28
Copy link
Owner

luoxn28 commented Dec 9, 2016

BGP协议是一种外部网管协议,与RIP/OSPF等内部网关协议不同,其着眼点不在于发现和计算路由,而是控制路由传播和选择最佳路由。BGP在路由器上有2种运行方式:IBGP(当BGP运行于同一AS内)和EBGP(当BGP运行不同的AS之间)。

BGP的几个关键点

凡事不必亲力亲为:能不做的就不做。比如,报文传输这类的体力劳动,就交给TCP好了,TCP不是号称可靠的传输协议吗?那就交给它吧。还有,现在的IGP们已经把ISP内部的路由都搜集得好好的,我直接拿来用就好了。没必要自己再去重新找一遍。我只是负责在ISP之间“倒腾”路由,这是第三产业,没必要亲自下地干农活。
大事不糊涂:别看BGP一副提笼架鸟的八旗子弟模样,但是对几个关键问题,从来就没含糊过,比如:如何避免路由环路、如何减少协议自身开销、如何做到路由的快速收敛等等。
打造“和谐社会”:BGP定义了一大堆的属性(请大家注意,学习BGP最重要的就是掌握他的属性,这也是BGP全部精华之所在),不同国家和用户的各种变态需求统统可以通过属性来实现并得到满足,又可以同时做到不影响其他人。
具备极强的可扩展性:无论是报文结构、还是属性以及协议本身,基本上都是万年青,从BGP诞生到现在,快二十年过去了,无论娱乐圈发生了怎样翻天覆地的变化,仍旧是一线当家花旦,从来就没有隐退的打算。

BGP消息格式

BGP有5种消息类型:Open、Update、Notification、Keepalive和Route-Refresh。这些消息类型有相同的报文头,格式如下:
111

承载不同BGP协议报文类型通过Type字段标识(1-5),Length字段标识BGP消息的字节长度,含BGP报文头,虽然是16Bit数,合法范围只从19到4096。Marker字段用来探测对端与本端是否同步。
同一个AS内,设备之间的邻居叫做IBGP(Interior BGP)邻居,不同AS间,设备之间的邻居叫做EBGP(Exterior BGP)邻居。运行BGP的设备叫做BGP发言者(BGP Speaker),相互之间称作BGP对等体(BGP peer)。
Open消息是TCP连接建立后发送的第一个消息;Notification消息是当BGP检测到错误状态时,向对等体发出的;Keepalive是周期性的保护机制;Route-Refresh用来要求对等体重新发送指定地址族的路由信息;Update用于对等之间交换路由,即可以发布路由,也可以撤销不可达路由。
邻居建立后,BGP采用UPDATE消息来发布路由或撤销路由。UPDATE消息由三部分组成:Unfeasible Routes:之前发布过,不再有效的路由;Path Attributes:路由信息的附加描述,是BGP用以进行路由控制和决策的重要信息;NLRI:由一个或多个IP地址/前缀长度组成。其格式如图5所示,一个UPDATE消息中可以携带多条路由信息:
222

由于BGP在报文格式中普遍采用了TLV(Type,Length,Value)的形式,而不是固定长度固定字段的形式,使得BGP具有非常好的扩展性,在后期追加新类型支持新业务时,只需要定义新的类型编码和值,报文不需要做任何更改。

BGP特性

AS内部,因为没有AS号的变化,防止环路需要采用其他方式,BGP规定从IBGP邻居学习到的路由不会传递到另一个IBGP,路由只传递一次,这样也就不会存在环路问题。BGP要求AS内的所有路由器两两之间建立IBGP,这就是BGP全连接。全连接在大型AS内不可想象,所以出现了路由反射器和BGP联盟2种技术。

  • 路由反射器:AS内指定一个节点作为反射器,其余节点与之建立IBGP关系。
  • BGP联盟:将大型AS内分成若干子AS,易于管理,减少全连接。

BGP报文采用TLV结构,利于扩展和向下兼容。
BGP传输的信息都有哪些呢?

  • 最基本的是IP前缀、掩码、下一跳,任何路由协议都需要这些信息。
  • 为了支持路由优选,需要考虑路由优先级,并记录路由来源,这些信息其实就是Update消息的主要内容。IP前缀中掩码对应Update中的NLRI,下一跳对应NEXT_HOP,优先级对应LOCAL_PREF和MED,路由来源对应AS_PATH和ORIGIN。

BGP与OSPF区别

OSPF是一种AS内部路由协议,BGP是一种AS之间的路由协议。BGP关键问题是如何避免环路路由、如何减少协议自身开销、如何做到路由的快速收敛,BGP定义了很多属性,这也是BGP的精华所在。为了保证BGP的可靠传输,使用TCP来传输,使用端口号179。
BGP建立在不同的AS之间,存在信任问题,所以BGP不能通过自动发现,而是手动配置邻居,使用指定地址建立TCP,与AS外部节点建立的BGP成为EBGP,与AS内部的称为IBGP。

BGP属性分类

BGP属性是BGP进行路由决策和控制的重要信息。它可以分为如下两大类四小类:
一、公认属性

  • 公认必遵(Well-known mandatory)
  • 公认可选(Well-known discretionary)

公认属性是所有运行BGP协议的系统都必须识别和支持的属性。其中,公认必遵属性是BGP UPDATE消息中必须包含的属性。公认可选则是BGP UPDATE消息中可以自由选择是否包含的属性。

二、可选属性

  • 可选过渡(Optional transitive)
  • 选非过渡(Optional non-transitive)

可选属性并不要求所有运行BGP协议的系统都识别。如果属性是可选过渡的,那么,即使运行BGP的系统不能识别该属性,也要接受该属性并将其转发给它的对等体。而如果属性是可选非过渡的,运行BGP的系统可以忽略包含该属性的消息并且不向它的对等体转发。

属性详解

常见的BGP属性如下:
1、ORIGIN
ORIGIN标示路径信息的来源,是公认必遵属性。ORIGIN可以是以下三种值:

  1. IGP:表示网络层可达信息来源于AS内部
  2. EGP :表示网络层可达信息通过AS外部学习
  3. INCOMPLETE:表示网络层可达信息来源无法确定

在路由选择的时候,ORIGIN中,IGP优于EGP,EGP优于INCOMPLETE。

2、AS_PATH
AS_PATH由一系列AS路径组成,是公认必遵属性。AS-PATH采用AS_SEQUENCE方式表示——该路由经过的AS的有序集。当BGP发布者发布路由给IBGP对等体时,BGP不修改路由的AS_PATH属性。当BGP发布者发布路由给EBGP对等体时,本地系统应该把自己的AS号作为序列的最后一个元素加在序列的最后面。
AS_PATH可以用来作为路由选路的一种度量。经过更少AS路径的路由更优先。同时AS_PATH也作为一种手段来避免环路。如果BGP路由信息发布者从EBGP对等体收到一条路由,它的AS_PATH包含发布者自己的AS号,就说明这条路由曾经从本AS发出过,将其丢弃,同时不再进行转发。基于上述机制,AS_PATH属性可以避免AS之间的路由环路的出现,AS内部的路由环路的避免则采用其他手段来实现。

3、NEXT_HOP
它定义了到达目的地下一跳的设备IP地址,是公认必遵属性。NEXT_HOP中IP地址的填写遵循如下规则:

  • 如果是发布给EBGP对等体,NEXT_HOP填写BGP发布者的IP地址
  • 如果是发布给IBGP对等体,且路由来自AS外部,则NEXT_HOP保留原始的AS外部对等体的IP地址

4、  MULTI_EXIT_DISC
MULTI_EXIT_DISC被用来区分同一个邻接AS的多个接口,是一个可选非过渡属性,一般简写为MED。MED只在EBGP发布的路由中产生,接收者可以向它的IBGP邻居转发,但不允许向它的EBGP对等体转发。假设一个AS和邻接AS有多个接口相连,通过发布不同的MED给对端,就可以控制进入网络的流量从MED值最小的那个接口进来。通常情况下,BGP只比较来自同一个AS的路由的MED属性值。
333

Router B和Router C发给Router A的关于9.0.0.0的路由携带不同的MED属性,从而引导从AS 10到AS 20的目的地址为9.0.0.0网段的流量将选择Router B作为入口。

5、LOCAL_PREF
LOCAL_PREF用来通告路由的优先程度,是公认可选属性。LOCAL_PREF属性仅在IBGP对等体之间交换,不通告给其他AS。当BGP的路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由。
444

Router B和Router C发给Router D的关于8.0.0.0的路由携带不同的LOCAL_PREF值,从而引导从AS 20到AS 10的流量将选择Router C作为出口。

参考:
​ 1、H3C-BGP专题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant