原文:http://blog.sina.com.cn/s/blog_be409c2f0102x6sg.html

BGP(Border Gateway Protocol)边界网关协议

BGP(Border Gateway Protocol)边界网关协议是一种运行在TCP上用于AS(Autonomous System,自治系统)之间的动态路由协议,BGP是唯一一个用来处理像因特网大小的网络协议,也是唯一能够妥善处理好不相关路由域间连接的协议。默认不负载(最大负载数量:6)
BGP可以支持classless interdomain routing(CIDR)无类别域间路由

首先介绍一下AS:
目前,通常还是使用2字节长度的AS,也就是0-65535;
公有的AS范围是:0-64511
私有的AS范围是:64512-65535
公有AS只能用于互联网,并且全球唯一,不可以重复;而私有AS可以在得不到合法公有AS的企业网使用,可以重复,私有AS不允许传入互联网,ISP在企业用户的边缘,需要过滤掉带有私有AS号的路由。
2009.1月之后,(IANA)决定使用4字节长度的AS,范围是65536-4294967295
只能在一个AS内部传递更新的IGP路由协议有:RIP、EIGRP、OSPF、IS-IS;可以在AS之间传递路由更新的路由协议只有BGP。

BGP路由器之间的数据传输使用TCP协议的179端口,并且指定回话的目标端口为179,而会话源端口号是随机的
BGP的邻居必须手工指定才可以。
open报文用于发现邻居,只发一次;维持邻居关系的数据包称为Keepalive=60s(默认);Holdtime=180
当全网每一台路由器都拥有所有的路由信息,并且完全一致时,这种状态被称为收敛状态,一个网络只有在收敛状态时,才能保证路由全网可达。

建议使用Lookback接口建立邻居的原因:
为了使拥有多条链路的BGP邻居之间永远保持连接,考虑到路由器的Loopback接口在设备正常工作的情况下,不会像物理接口那样出现中断,所有建议在BGP邻居之间使用Lo接口地址来建立TCP连接。
当指定邻居时,不再将邻居的地址指定为对方物理接口地址,而改为指定对方的Lo地址,即使物理接口中断,只要还有通畅的链路,那么BGP邻居仍然可以保持连接。再将BGP邻居地址指定为对方Lo地址时,为了使数据包的目标IP与对方的BGP源地址相同,所以邻居也要将BGP源地址更改为自己的Lo接口地址,从而使得双方正常建立BGP连接。

BGP的两种AD值:EBGP20、IBGP200
因为BGP的邻居类型分为两种:EBGP和IBGP;所以BGP路由的AD值也有区分,如果BGP路由是从EBGP学习到的,AD=20 EBGP邻居学习到的路由优于任何IGP协议;从IBGP学习到路由AD=200,优先级低于任何IGP协议。 BGP除了以上两种AD值之外,如果BGP路由是从本地手工导入的(本地路由),则BGP本地路由的AD=200,与IBGP路由的AD值相同,优先级低于任何IGP协议。

1、邻居:不需要直连,只要有能到达对方的路由,使用单播TCP建立
2、BGP只传路由不传数据,控制层面(路由)源、目的地址每过一路由器都变;而数据层面源、目的地址一直不变,若中间路由器没有该目的地址,数据层面可能会造成路由黑洞。
解决办法:物理线路全互连、BGP邻居逻辑全互连、MPLS(最好)
3、BGP的水平分割原则:(防环)
1)EBGP:不接受包含自己AS号的BGP路由
2)IBGP:从IBGP学到的路由不会通告给其他的IBGP邻居(BGP路由在AS内部只传一跳),所以IBGP邻居需要全互连(路由反射器、联邦)
4、配置:
router bgp 123
bgp router-id 11.1.1.1
neighbor 22.1.1.1 remote-as 123
neighbor 22.1.1.1 update-source lo 0(自己的回环接口地址,单向就可以建立,建议双向)
neighbor 22.1.1.1 next-hop-self
neighbor 22.1.1.1 ebgp-multihop 2
IBGP邻居之间用环回口建立邻居,默认的源地址是物理接口,如果用环回口建立邻居必须手动指定源地址;而EBGP一般使用物理接口,若用回环口,需要改成多跳,默认是1跳,EBGP间若用环回口建立邻居,因为不通IGP,没有对端环回口路由,所以还必须运行静态路由或者IGP动态路由协议。

5、IGP:network宣告的是接口
BGP:network宣告的是路由,只要是本地AS内的路由,都可以宣告出去,路由表中存在的路由,才能被BGP通告出去,必须精确匹配
network 4.4.4.0 255.255.255.0 宣告前看路由表,精确匹配才能宣告出去

6、非最优路由:不传给其他BGP邻居、也不会放入路由表
造成非最优路由的原因:
1)不同步:
从IGP学到、写静态路由或者关闭同步(保证不存在路由黑洞的前提下,中间路由也运行BGP,建立全互连IBGP邻居)
2)下一跳不可达:
从IBGP学到、写静态路由或者改变下一跳(在边界路由器写)neighbor 3.3.3.3 next-hop-self
7、同步:从IBGP学到的路由,同时也在IGP学到,才能传给其他BGP邻居、放进路由表(防止数据层路由黑洞)

Peer Group(减少Buffer,减少命令行)
router bgp 1
neighbor WOOW peer-group
neighbor WOOW remote-as 1
neighbor WOOW update-source lo 0
neighbor 22.1.1.1 peer-group WOOW
neighbor 33.1.1.1 peer-group WOOW

8、MA网络的下一跳特性:ICMP重定向(自动完成)
9、用r标识的路由:IGP和BGP学到同一条路由,但是IGP学到的路由管理距离更小,该路由就会标识r,不放进路由表,但是会传递给邻居
10、清理和重启BGP:
1)硬清:clear ip bgp *
2)软清:clear ip bgp * soft (in/out) 不断TCP连接
11、BGP聚合:
1)手工写静态路由指向Null0(路由汇总)在用network 发布汇路由
2)network明细路由,一条一条的宣告,再aggregate-address做聚合,默认是把聚合和明细都宣告进去
aggregate-address 192.168.16.0 255.255.252.0 summary-only :仅宣告聚合路由,此时明细路由标识了s,表示抑制路由,不会传给邻居
可选择宣告特定路由,写抑制列表:aggregate-address 192.168.16.0 255.255.252.0 suppress-map WOOW,在调用route map WOOW配合ACL或者prefix-list。
在接收方做聚合:
明细路由来自源方,聚合路由在接受方生成,并反传给源方,可能导致丢包,所以不能让路由回传(把明细路由的属性加入到聚合链路上)
aggregate-address 192.168.16.0 255.255.252.0 summary-only as-set:当汇总路由继承了明细路由的AS-path,源方就不会接受该路由了。
12、在重分布 或者BGP中使用route-map,如果要让明细路由过来,必须写一条空的。

BGP路由要被标为最优路由必须达到以下两个条件:

★下一跳可达

★如果是从iBGP收到的路由,则必须满足IGP与iBGP同步,除非该规则已被关闭。

如果某BGP路由的状态为RIB-Failure,则不能被使用,被定为RIB-Failure的原因有:

★该路由在IGP中已经拥有比BGP更高优先级的AD值。

★内存错误

★超出VRF中的路由限制数。

BGP建立邻居的条件如下:

★双方需要建立邻居的IP地址在网络上是互通的,可以建立TCP会话。

★双方指定的AS号码必须匹配。

★双方BGP数据包必须可达(eBGP默认TTL为1,需要注意)。

★对方BGP数据包的目的IP和自己的源IP必须相同(单向满足即可)。

Weight属性为Cisco私有属性

BGP还能够传递除IP协议之外的其它网络层协议,能够传递的协议如下:

IP Version 4 (IPv4),

IP Version 6 (IPv6),

Virtual Private Networks version 4 (VPNv4),

Connectionless Network Services (CLNS),

Layer 2 VPN (L2VPN).

这些协议被称为address family,配置需要进入相应的协议address family模式,而Ipv4除外。所有命令在address family中独立配置,独立生效,并且都拥有独立的数据库。正常的BGP配置模式被称为NLRI 模式,而address family模式称为AFI模式;MPLS,只能在AFI中配置;在NLRI 模式中配置的参数只对Ipv4单播生效。

BGP的路径属性可以划分为以下四类:

公认强制 (Well-Known Mandatory)

公认自选 (Well-Known Discretionary)

可选可传递 (Optional Transitive)

可选不可传递(Optional Nontransitive)

BGP路由必须携带的公认强制属性有三个:Origin,Next_Hop,AS-path。

1.Origin(公认强制属性):

默认情况下,任何路由都不会自动进入BGP路由表,只能手工导入,对于路由是怎么进入BGP路由表的,这种方式会被记录在路由条目中,称为Origin属性,Origin属性就反映出了路由是如何进入BGP路由表的。

1、将IGP表中的相应路由导入BGP路由表,并且需要指定掩码,只有network后面的网段和掩码在IGP路由表中能找到时,才会进入BGP路由表,并不能通过这种方式将一条不存在的路由凭空导入BGP,通过命令network被导入BGP的路由的Origin属性为IGP属性。

2、BGP路由表除了从IGP和EGP获得路由外,还可以将路由重分布进BGP路由表,而重分布的路由的Origin属性为Incomplete。

3、当BGP路由表中到达同一目的地存在多条路径时,会通过比较路由的Origin属性来选择最优路径,它们的优先级为IGP优于EGP,EGP优于Incomplete,即:IGP>EGP>Incomplete。

2.AS_Path(公认强制属性):

AS_Path还能细分为:

1、AS_SEQUENCE(有序的AS号码,即AS号码在AS_Path中是按一定顺序排列的)

2、AS_SET(无序的AS号码,即AS号码在AS_Path中的排列是没有顺序的,通常是将多条拥有不同AS_Path的路由汇总后产生的)

当BGP路由表中到达同一目的地存在多条路径时,会优选AS-Path最短的路径。

3.Next_Hop(公认强制属性):

1、默认情况下,一台BGP路由器将路由传递给eBGP邻居时,会将Next-hop属性改为自己的地址,也就是和对方建立邻居所使用的地址,而在将路由传递给iBGP邻居时,不会改变Next-hop属性。

2、BGP路由表中由本地产生的路由而不是从BGP邻居学习来的,即本地发起路由的Next-hop属性都为0.0.0.0。

4.Local_Pref(公认自选属性):

1、Local_Pref称为本地优先级,其中的(Local)本地就是指本AS,Local_Pref属性的传递范围,只在同一个AS内有效,一条路由的Local_Pref属性只能在同一AS内部传递,出了AS后就会被还原成默认值。

2、Local_Pref属性在BGP邻居之间自动传递,只有在将路由发给iBGP时才会传递,而在发给eBGP时,没有Local_Pref值,Local_Pref的默认值为100,一条路由在AS内所有路由器上的默认值是100.

3、本地优先级属性是用于区分到同一目的地的各个路由优先程度的。本地优先级越高,路由优先级越高;推荐使用Local_Pref属性来控制一个AS的路由器去往目的地在其它AS的路径。

5.MULTI_EXIT_DISC(MED,可选不可传递属性):

1、MED就是BGP路由中的metric,是被设计用来影响在多个下一跳都为eBGP邻居时,如何选择最优路径;多条路径中拥有最小MED值的路径会被优先使用。MED默认值为0。MED只能在AS之间传递,只有在将路由发给eBGP邻居时,才会传递MED,在发给iBGP时,是不会传递MED的。

2、同一个AS内,所有发给iBGP邻居的路由的MED值都为0,这是为了让所有AS内部路由器都能够拥有相同的选路结果。

6.Weight

1、Weight属性为Cisco私有属性,只有Cisco的路由器才能认识和理解Weight。路由的Weight属性只在路由器本地起作用,BGP将路由传递给邻居时,并不会保留Weight。Weight值的范围为0~65535,默认为0,如果是BGP本地路由,则Weight值为32768。

2、当BGP路由表中到达同一目的地存在多条路径时,会优选Weight值最大的路径。在Cisco路由器中,比较最优路径的第一条规则就是比较Weight值,所以只要改动Weight值,就绝能够控制Cisco路由器的BGP选路。

BGP最优路径选择

在默认情况下,到达同一目的地,BGP只走单条路径,并不希望在多条路径之间执行负载均衡。

1.最高Weight值(选择最高Weight值的路由,Weight值为Cisco私有,并且只有本地有效,默认Weight值为0,本地发起路由为32768。

2.最高LOCAL_PREF值(如果Weight值相同,则选择拥有最高LOCAL_PREF值的路由,默认为100。)
3.本地发起路由

(如果LOCAL_PREF值相同,则选择BGP本地发起的路由: 也就是下一跳为0.0.0.0的路由,本地发起的路由有多种方式,如通过在BGP进程下命令network命令从IGP路由表导入,将其它路由协议重分布进BGP路由表,最后是汇总路由表。而通过命令network和重分布的路由优先于手工汇总的路由。)

4.最短AS_PATH

(如果本地发起路由无法比出最优路径,则选择拥有最短AS_PATH的路由,但是可以跳过这一步,输入命令bgp bestpath as−path ignore后,就会忽略对AS_PATH的比较,而直接比较下一属性。需要更加注意的是,AS_SET被认为是1个AS,而无论AS_SET中包含多少个AS,并且BGP联邦内部AS不被计算。)

5.最低Origin类型

(如果AS_PATH无法比出最优路径,则选择拥有最低Origin类型的路由,Origin表示路由最初是如何进入BGP路由表的,目前有三种进行BGP路由表的方法,从IGP导入,从EGP学习,以及重分布,它们的优先级为IGP优于EGP,EGP优于Incomplete,即IGP>EGP>Incomplete。

6.最小MED值

(如果Origin类型无法比出最优路径,则选择拥有最小MED值的路由,并且只有当多个下一跳邻居在同一AS时才比较MED值。如果要在多个不同AS的下一跳中比较MED,可在BGP进程中输入命令bgp always-compare-med,注意须保证此命令在整个AS的路由器上输入,否则可能产生路由环路。默认的MED值为0,如果收到一条没有MED的路由,也认为是0。)
7.eBGP优于iBGP

(如果MED值无法比出最优路径,则选择下一跳为eBGP的邻居而不选择iBGP邻居。都知道eBGP的路由AD值为20,而iBGP的路由AD值为200,但BGP并不在eBGP与iBGP之间比较AD值,并且在比到此步时,邻居类型才影响了最优路径的选择,这种影响是受邻居类型的影响,而不是受AD值的影响。注意:BGP联邦内部没有此规则。)

8.最小IGP metric到达下一跳的路由

(如果多条路径的下一跳邻居同为eBGP或iBGP,则选择拥有最小IGP metric到达下一跳的路由。)

9.负载均衡(如果开启的话)

(BGP并不是不能负载均衡的,如果之前的属性都无法选出最优路径,则执行负载均衡,但必须是之前的所有属性均完全相同,缺一不可。需要注意:只有负载均衡功能开启了,BGP才会执行负载均衡,否则,继续比较下一属性。)

在开启负载均衡功能时,在BGP进程下输入以下命令:

maximum-paths n (多条路径的下一跳邻居都为eBGP时,输入此命令)

maximum-paths ibgp n(多条路径的下一跳邻居都为iBGP时,输入此命令)

其中n为执行负载均衡的路径数量,最大值为6,默认为1,也就是不执行负载均衡。

如果在eBGP和iBGP邻居之间同时执行负载均衡,输入命令maximum-paths eibgp n,此命令只支持在Ipv4 VRF模式下输入,就是只能支持MPLS VPN下的eBGP和iBGP邻居之间负载均衡。

10.如果下一跳都为eBGP,则选择最早学习到的路由(即时间最长的路由)

(为了避免路由翻动,所以选择最早学习到的路由,如果要忽略比较路由学习到的时间长短,可在BGP进程下输入命令bgp best path compare−routerid,某些IOS已经自动加入此命令,并且不能删除。如果多条路由拥有相同的Router-ID,比如路由是从同一个邻居学习到的,同样也会忽略比较路由学习到的时间长短。)

11.最低Router-ID下一跳

(BGP的Router-ID选举如同OSPF,在此步,拥有最低Router-ID的下一跳路由将被选为最优路径。)

12.最短cluster list(如同AS_PATH)

[cluster list只在BGP reflector (RR)的环境下才有,功能如同AS_PATH]

13.最小下一跳的邻居地址

(如果比较之前的所有属性都无法选出最优路径,最终选择下一跳的邻居地址最小的路由,这个地址就是在建立邻居时所指的地址,也是邻居和自己建立TCP连接所使用的源地址,建立不同邻居,不可能使用相同地址,所以不可能两个不同路径的邻居地址是相同的,在这一步一定能够选出最优路径.)

原文:http://blog.sina.com.cn/s/blog_be409c2f0102x6sg.html

BGP属性+13条选路原则(转载)的更多相关文章

  1. bgp选路原则【第二部】

    面向逻辑谈bgp选路原则(第二部) 终于到了BGP终极解析的第二部曲--BGP选路原则.与题目相呼应,我不会直接介绍选路原则的规则,而是从时间逻辑和空间逻辑上将所有的选路原则分层分类.因为只有从这种角 ...

  2. BGP选路原则

    bgp选路原则 1 最高有weight优先,默认为0(思科特有,选大的) 2 本地优先级高的优先(只可以在IBGP邻居之间传递) 3 起源本路由器上的路由(network.aggregate-addr ...

  3. CCIE路由实验(2) -- BGP选路原则

    BGP路径属性分为4类: 公认必遵(Well-Known Mandatory):BGP更新报文中必须包含的,且必须被所有BGP厂商实现所能识别的,包括ORIGIN,AS-PATH和Next_Hop 1 ...

  4. BGP华为、思科选路规则

    选路规则 华为BGP选路规则 思科BGP选路规则 第0条 下一跳是否可达,如果不可达则不参与选路 BGP 向IBGP对等体发布import引入的IGP路由时, 将下一跳属性改为自身的接口地址,而非IG ...

  5. BGP - 5,BGP属性

    metric,自己决定去哪个EBGP邻居 local-pre,影响AS内部IBGP邻居的路由决策 med,影响AS外部EBGP邻居的路由决策   1,BGP属性     公认传递(well-known ...

  6. RIP、OSPF、BGP、动态路由选路协议、自治域AS

    相关学习资料 tcp-ip详解卷1:协议.pdf http://www.rfc-editor.org/rfc/rfc1058.txt http://www.rfc-editor.org/rfc/rfc ...

  7. BGP属性控制实验

    目录 实验拓扑 实验需求 实验步骤 个人小结: 实验拓扑 实验需求 更改BGP路由的属性让R4访问R1优先选R2这条路 实验步骤 1. 按照图示配置IP地址及环回口地址 R1 [R1]int g0/0 ...

  8. REST风格的5条关键原则

    REST风格的5条关键原则包括: (1)网络上的所有事物都被抽象为资源. (2)每个资源对应一个唯一的资源标识. (3)通过通用的连接件接口对资源进行操作. (4)对资源的各种操作不会改变资源标识. ...

  9. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

随机推荐

  1. 浅谈log4j-6-xml配置 转自godtrue

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SY ...

  2. Js判断字符的种类

    Js判断字符的种类:unicode范围: 48-57:0-9    数字字符 65-90:A-Z    大写字母 97-122: a-z  小写字母 19968-40869:汉字 其他字符 实例:输出 ...

  3. Js 字符串的三大操作

    回顾: var num = str.length:字符个数 str = str.toLowerCase()/toUpperCase() var char = str.charAt(index)  :指 ...

  4. 【java编程】加载Resources配置文件的方法

    一.加载配置实现k-v //FILTER_PROPERTY_NAME=META-INF/abc.properties private void loadFilterConfig(Properties ...

  5. Android 播放内部mp3音乐

    private void heartSound() { try { AssetManager am = getAssets();//获得该应用的AssetManager AssetFileDescri ...

  6. MACOS-Can't-connect-to-local-MySQL-server-through-socket-'/tmp/mysql.sock'

    mac os start mysql fail by "brew services start mysql"you can try : mysql.server  start

  7. Python-pycurl模块的安装

    先执行以下命令(因为我在另一个终端执行,所以history的编号有重复) 7 wget https://pypi.python.org/packages/source/p/pycurl/pycurl- ...

  8. NET使用NPOI组件导出Excel-入门示例及通用方法

    一.Excel导入及导出问题产生:   从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题:   导出问题:   如果是as ...

  9. 论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务

    在 <企业应用架构模式> 中 提到了 乐观锁定, 用 时间戳 来 判定 交易 是否有效, 避免 传统事务 的 表锁定 造成 的 瓶颈 . 在 现在的 大并发 的 大环境下, 传统事务 及其 ...

  10. thinkphp5 查询的数据是对象时,获取原始数据方法

    获取原始数据 如果你定义了获取器的情况下,希望获取数据表中的原始数据,可以使用: $user = User::get(1); // 通过获取器获取字段 echo $user->status; / ...