BGP基本概念:
BGP(Border Gateway Protocol,边界网关协议)
是用来连接Internet上的独立系统的路由选择协议。它是Internet工程任务组【IETF】制定的一个加强的、完善的、可伸缩的协议。
BGP是为取代最初的外部网关协议EGP设计的。它也被认为是一个路径矢量协议。
【AS】Autonomous Systems:(自治系统)
1、运行同一种选路策略,由统一管理者管理的一组网络。
2、RFC对AS的定义:一组被统一管理的路由器,它们使用相同的内部网关协议和统一的度量值在AS内 部路由分组,并使用外部网关协议将分组路由到其他AS。
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地址的分配信息
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路由表中显示出来,表示默认使用主类网络的标准掩码。