BGP基本概念:

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

是用来连接Internet上的独立系统的路由选择协议。它是Internet工程任务组【IETF】制定的一个加强的、完善的、可伸缩的协议。

BGP是为取代最初的外部网关协议EGP设计的。它也被认为是一个路径矢量协议。

【AS】Autonomous Systems:(自治系统)

 1、运行同一种选路策略,由统一管理者管理的一组网络。

 2、RFC对AS的定义:一组被统一管理的路由器,它们使用相同的内部网关协议和统一的度量值在AS内 部路由分组,并使用外部网关协议将分组路由到其他AS。

  1.     每一个自治系统都有一个AS号,AS号由internet地址授权委员会(IANA (Internet Assigned Numbers Authority) )统一负责分配,用2个字节来表示,范围为0-65535

     AS号取值范围:0-65535

       0  被系统保留

       1-64511 【65535-1024】  (公有)

       64512-65535              (私有)【掩码表示为1111 1100 0000 0000】

 例如:电信AS号:4134 4809  网通AS号:9929 4837  中国教育网:4538

      以下的网站可以获取到AS的一些信息

      Bgp.potaroo.net  一个好的网站,可以了解到关于AS号和IP地址的分配信息

      http://www.routeviews.org/

      Telnet route-server.ip.att.net   telnet这一地址可以看到一台BGP路由器的镜像

比较:internet>AS>domain>area

BGP的认识:

·BGP协议用在AS之间传递路由;

·BGP路由使用AS号进行防环,BGP没经过一跳都会记录并形成自己的路径列表,BGP路由器不会接受路 径列表中包含其AS号的路由选择更新,这种方式用来防止路由环路。

·BGP路由器只能将 其使用 最优的路由通告给他的邻居。

·BGP可以称为路由矢量路由协议,从一个AS向另一个AS所传递的BGP路由更新【类似于rip中的Hop-by-Hop】,其实是传递一条路径信息,并且描述了通过这条路径所能到达的网络。

·BGP支持逐跳路由选择模式的策略--你可以决定自已的数据流去往哪一个AS,但不能决定邻接的AS如何转发你的数据流。BGP属性丰富可以基于决定自身AS数据的转发,不能觉得其他的AS。

何时使用BGP:

1、AS允许数据包通过自已到达其它AS

2、AS有多条到其它自治系统的连接

3、需要对数据流进入和离开AS的方式进行控制

使用BGP的好处:

容易管理大的网络

支持更多的路由条目

容易执行选路策略

能扩展更多的协议ipv6,vpnv4等

BGP的特性:

·BGP属于EGP,是高级DV协议,也被称为路径矢量协议,基于TCP 179端口。

·现在使用版本BGP4。

·第一次做完整更新,以后就只增量更新、触发更新

·使用keeplive消息维持邻居关系

·丰富的metric值,也叫路径属性

·被设计用于特大的网络,例如internet

·BGP的目地是提供一种域间路由选择系统,确保自主系统能够无环路的交换路由选择信息。BGP路由器交换有关前往目标网络的路径的信息。

BGP的三张表:

·Neighbor table 邻居表

  保存所有的邻居信息,BGP的邻居关系需要显示的配置,而且 邻居不需要直连

·BGP forwarding table/database

  保存从每一个邻居处学到的路由信息

·IP routing table

  List of best paths to destination networks

注意:

BGP表和IGP路由表是独立的,同样遵循AD小的进入路由表。

BGP默认不做负载均衡,只会选出最优的路由放进路由表,

·BGP中,每一个路由器也要有Router-ID,选举顺序和指定过程同OSPF一致。

   选举顺序如下:

    1、bgp router-id 来指定

    2、最大的环回口

    3、最大的IP地址

BGP报文:

BGP有5种类型的报文,分别为OPEN、UPDATE、NOTIFICATION和KEEPALIVE。

BGP对等体间通过发送OPEN报文来交换各自的版本、自治系统号、保持时间、BGP标识符等信息,进行协商。

UPDATE报文携带的是路由更新信息。其中包括撤销路由信息和可达路由信息及其路径属性。

当BGP检测到差错(连接中断、协商出错、报文差错等)时,发送NOTIFICATION 报文,关闭同对等体的连接。

KEEPALIVE报文在BGP对等体间周期地发送,以确保连接保持有效。

OPEN报文主要用于建立邻居(BGP对等体)关系,它是BGP路由器之间的初始握手消息,应该发生在任何通告消息之前。其他在收到OPEN消息之后,即以KEEPALIVE消息作为响应。一旦握手成功,则这些BGP邻居就可以进行UPDATE(更新)、KEEPALIVE(保持激活)以及NOTIFICATION(通知)等消息的交换操作。

BGP报头:

BGP报文头的格式如图所示,每行的宽度为4个字节。

Marker 鉴权信息:16 字节,全1。这个标记的作用主要是用来检测BGP对等体之间的同步是否丢失,并对进来的BGP消息进行验证。

Length 消息的长度:2 字节,指示整个消息的长度,包括头标长度,最小的BGP消息长度是19字节(Keepalive报文),最大的长度是4096字节。

Type 消息的类型:1 字节,指示报文类型,如OPEN、UPDATE报文等。

1 :OPEN

2 :UPDATE

3 :NOTIFICATION

4 :KEEPALIVE

5 :Router-Refresh

    

Open ---includes holdtime and BGP router ID,当然还有AS号。

在一个TCP建立之后,OPEN报文是BGP发送的第一个报文。如果Open报文被接收,一个keepalive报文用于确认open报文已经被发送回来。


Version :(1字节) 发端BGP版本号

My Autonomous System :(2字节无符号整数) 本地AS号

Hold Time :(2字节无符号整数) 发端建议的保持时间 BGP Identifier :(4字节)发端的路由器标识符

Optional parameters Len :(1字节) 可选的参数的长度

Optional Parameters :(变长) 可选的参数

消息的开始部分包括BGP的版本号和发送方的自治系统编号。接下来是保持时间(HOLD TIME)字段,这是发送方提供建议的保持定时器的设定秒数。保持定时器规定了BGP邻居认为发送方信息有效的时间长度。再下一个字段是BGP标识(BGP ID),也就是BGP发送方的标识。该值是在BGP对等体之间进行握手操作的过程中确定的,并且在每个本地接口及每个BGP对等体之间是保持不变的。

Keepalive ---每隔60S发送一次。hold time=180S

KeepAlive 报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。 KeepAlive 消息在对等路由器间的交换频度以保证对方保持定时器不超时为限。

当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送Keepalive 报文,表明该连接是否还可保持。

缺省情况下,发送Keepalive 的时间间隔为 60 秒。

Update ---information for one path only (could be to multiple networks)

      ---Includes path attributes and networks

更新报文用于通告路由、NLRI可达性信息、或者撤销的路由。

参考:  

Unfeasible Routes Len :(2字节无符号整数) 不可达路由长度

Withdrawn Routes :(变长) 撤消路由

Path Attribute Len :(2字节无符号整数) 路径属性长

Path Attributes :(变长) 路径属性(以下详细说明)

Network Layer Reachability Information :(变长) 网络可达信息(目标)

其中撤消路由和目标地址的表示方法为一 <length,prefix> 的二元组。length一个字节,指示地址前缀的长度。prefix为地址前缀,长度1至4字节。

UPDATE 报文是BGP系统中最重要的信息,用于在同伴之间交换路由信息,它最多由三部分构成:不可达路由(unreachable)、路径属性(path attributes)、网络可达性信息(NLRI,network layer reachability information)。

UPDATE 消息可以向BGP对等体通告一条路由,也可以撤消多条"行不通"的路由。不可达路由字段包括一个所撤消路由的IP地址前缀列表。路径属性字段是一个路径属性的列表,包括:属性类型、属性长度和属性值等。网络可达字段包括了BGP路由器所知道的且可到达的IP地址前缀列表。

一个UPDATE 消息一次只能通告一个路由,但它可以携带多个路径属性。

一个UPDATE 消息一次也可通告多条路由,但它的路径属性必须相同。

一个UPDATE 消息可以同时列出多个被撤消的路由。

Notification

     ---when error is detected

     ---BGP connection is closed after sent  (做maximum-prefix【最大的前缀限制】时可看到)

Notification 报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误代码(如定时器超时等),包括错误代码、辅助错误代码及错误信息。

Errorcode :(1字节) 错误代码。

Errsubcode :(1字节) 辅助错误代码。。

Data :(变长) 依赖于不同的错误代码和辅助错误代码。用于诊断错误原因。

· BGP用Open报文建邻居,用KeepaLive报文维持邻居关系

·OPEN消息中包含以下内容:

 1、版本

 2、自主系统号

 3、hold time 注意: 这个时间是可以协商的,取两个BGP邻居中较小的保持时间。

 4、BGP 路由器的 router-id,选择方法与OSPF中相同

 5、可选参数

实际上也就是说一个UPDATE中只能有一组相同的路径属性,也就是说只能有一条路径,但可以有多个目标网络号。

Refresh :

BGP的邻居关系:

BGP邻居也叫BGP对等体,分两种:

 EBGP--位于当前AS之外的,属于其它AS的邻居,通常要求直连。

 IBGP--位于同一个AS之内的邻居,无需彼此相连,只要它们能够彼此到达对方,完成TCP握手即可。

· 建议EBPG之间用直连接口来建邻居

· 建议IBGP中用环回口建邻居

BGP的管理距离:

·从EBGP邻居学到的路由管理距离是20

·从IBGP邻居学到的路由管理距离是200

BGP的防环机制:

·BGP's Split Horizon Rule:

  IBGP:从IBGP邻居收到的路由不再传给其他的IBGP邻居。

  EBGP:不接收携带本AS号的路由更新。

BGP路由黑洞问题:

产生路由黑洞的原因是bgp路由可通过隔跳的BGP邻居建立tcp连接来单播传递,但是数据的传送师基于网络设备的每一跳的进行传递的,会在没有运行bgp路由协议的路由器上出现无目的路由的情况,最终导致不可达的包从这里丢弃,像一个黑洞一样。

·BGP路由黑洞的解决方法:

 1)物理线路的Full Mesh

 2)BGP重分布进IGP

 3)IGP内所有路由器都运行BGP

 4) MPLS/VPN【推荐】

·IBGP水平分割的解决方法:

 IBGP的水平分割是对于一个IBGP的router,当从它的IBGP邻居收到的路由不会在传递另一个IBGP邻居。

 1)Full Mesh

 2)BGP's Partial Mesh (路由反射器/联邦)

BGP网络的宣告:

 BGP网络的宣告仅仅是路由表中的路由通告给其他的bgp邻居,不同其他IGP路由的network。

 其他的路由器的network有两层含义,启动进程和通告直连网络。

·如果是宣告一个主类网络,则它的掩码不会在BGP路由表中显示出来,表示默认使用主类网络的标准掩码。