当前位置:文档之家› BGP协议详解

BGP协议详解

BGP协议简介:BGP中文名字:边界网关协议英文名字: border gateway protocolBGP协议是运行于 TCP 上的一种自治系统的路由协议。

BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。

BGP 构建在 EGP 的经验之上。

是互联网上一个核心的去中心化自治路由协议。

它通过维护IP路由表或‘前缀’表来实现自治系统(AS)之间的可达性,属于矢量路由协议。

BGP不使用传统的内部网关协议(IGP)的指标,而使用基于路径、网络策略或规则集来决定路由。

功能:BGP 系统的主要功能是和其他的BGP 系统交换网络可达信息。

网络可达信息包括列出的自治系统(AS)的信息。

这些信息有效地构造了AS 互联的拓朴图并由此清除了路由环路,同时在AS 级别上可实施策略决策。

BGP的强大过滤功能:解决大规模网络应用中遇到的问题:优缺点:优点:应用特定的属性避免环路的发生路由信息携带丰富的属性丰富的属性值可以组建可扩展的巨大的网络丰富的路由过滤和路由策略缺点:传统的BGP-4只能管理IPv4单播路由信息,对于使用其它网络层协议(如IPv4 组播,IPv6单播、组播)的应用,在跨自治系统传播时就受到一定限制。

为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成MP-BGP。

所有的用户私有网络在被BGP 传递时,都加入了RD(路由区分符),BGP 要支持这些RD 的传递,也需要多协议的BGP(MP-BGP)MP-BGP采用地址族(Address Family)来区分不同的网络层协议。

目前,系统实现了多种MP-BGP扩展应用,包括对VPN的扩展、对IPv6的扩展等。

为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。

假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。

当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。

解决上述问题的方法很多,但是在解决上述主要问题的同时还必须满足如下几个标准:简单:必须易于配置同时也易于理解容易转变:在不改变拓扑和自治系统的前提下,能够将全连接的拓扑转变。

“联盟”技术在这点上就做得不够好,对管理者来说是不幸的。

兼容性:必须保证在IBGP发言者之间的连接只有原自治系统或者域全连接的一部分的情况下,不丢失任何的路由信息。

实现技术就是——1,BGP Route ReflectorRR 从clients 和nonclients 收路由更新后路由反射的规则 按照BGP 的基本选路原则,选出最佳路由,只通告最佳路由 从 client 收到的更新,反射到 nonclients 和 clients 从 nonclient 收到的更新,反射到 clients从 EBGP 邻居收到的更新,反射到 所有nonclients 和 clients数据包结构:BGP 有四种报文:所有的BGP 分组共享同样的公有首部:Marker : (16字节) 鉴权信息,标记字段标记报文的边界 Length : (2字节) 包括首部在内的报文总长度Type : (1字节) 定义分组的类型,用数值1至4定义BGP 消息类型作用什么时候发包Open 报文 协商BGP 邻居的各项参数,建立邻居关系通过TCP 建立BGP 连接,发送open 报文Keeplive 报文用来确认Open 报文,和周期性地证实邻站关系定时发送KEEPALIVE 报文以保持BGP 邻居关系的有效性 Update 报文发送某一路由的信息,以及列出要撤消的多条路由,进行路由信息的交换 连接建立后,有路由需要发送或路由变化时,发送UPDATE 通告对端路由信息Notification 报文报告错误,中止邻居关系当BGP 在运行中发现错误时,要发送NOTIFICATION 报文通告BGP 对端Open报文:Version :BGP的版本号。

对于BGP-4来说,其值为4。

My autonomous system:本地AS号。

AS号可以确定是EBGP连接还是IBGP 连接。

Hold time:保持时间。

在建立对等体关系时两端要协商Hold time,并保持一致。

如果在这个时间内未收到对端发来的Keepalive消息或Update消息,则认为BGP连接中断。

RFC规定两种实现,一种采用本地配置和收到的OPEN较小值进行协商,不过这个值为3。

另一种是如果hold time不一致则断开连接。

BGP identifier:BGP标必须为0或者最小识符。

以IP地址的形式表示,用来识别BGP路由器。

Opt Parm Len(Optional Parameters Length):可选参数的长度。

如果为0则没有可选参数。

Optional parameters:可选参数。

用于多协议扩展(Multiprotocol Extensions)等功能。

Keepalive报文:BGP使用keepalive消息来维护邻居关系。

消息格式中只包含报文头,没有任何其他字段。

Update报文:更新报文是BGP协议的核心,路由器使用它来撤销以前已通知的终点和宣布到一个新终点的路由,或两者都有。

Unfeasible Routes Len不可行路由长度:这个2字节字段定义下一字段的长度。

Withdrawn Routes撤销路由:这个字段列出必须从以前通知的清单中删除的所有路由。

Path Attribute Len路径属性长度:这个2字节字段定义下一个字段的长度Path Attributes 路径属性:这个字段定义到这个报文宣布可达性的网络路径属性。

Network Layer Reachability Information网络层可达性信息:这个字段定义这个报文真正通知的网络。

它有一个长度字段和一个IP地址前缀,长度定义前缀中的位数。

前缀定义这个网络地址的共同部分。

例如,若这个网络是123.1.10.0/24,则网络前缀是24而前缀是123.1.10。

Notification报文:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP 连接会立即中断。

Error Code:差错码,指定错误类型,1bytes。

Error Subcode:差错子码,错误类型的详细信息,1bytesData差错数据,用于辅助发现错误的原因,它的内容依赖于具体的差错码和差错子码,记录的是出错部分的数据,长度不固定。

差错码差错码说明差错子码说明1 报文头部差错同步问题(1)坏报文长错(2)坏报文类型(3)2 打开报文差错6种不同的子码:不支持的版本(1),坏的对等AS(2),坏的BGP标识符(3),不支持的可选参数(4),鉴别失败(5),不可接受的保持时间(6)3 更新报文差错11种不同的子码:错误形成的属性表(1),不能识别的熟知属性(2),丢失熟知属性(3),属性标志差错(4),属性长度差错(5),非法起点属性(6),AS路由选择环路(7),无效的下一路属性(8),可选属性差错(9),无效的网络字段(10),错误形成的AS_PA TH(11)4 保持计时器到期未定义子码5 有限状态机差错定义过程差错,未定义子码6 停止未定义子码工作流程:启动进程>>>资源预留>>>TCP 连接>>>建立BGP Peer>>>通告维持路由Idle:标志正在启动BGP 进程和准备相关资源Connect:标志正在进行TCP 连接Active:标志TCP 连接失败;重新尝试新的连接Open sent:标志TCP 连接成功;发送Open 报文建立BGP PeerOpen confirm:标志Open 参数协商成功;发送Keepalive 报文维持BGP Peer Establised:收到Keepalive 后就可以发送Update 报文通告路由了IE 描述1 BGP 开始2 BGP 结束3 BGP 传输连接打开4 BGP 传输连接终止5 BGP 传输连接打开失败6 BGP 传输致命差错7 重试连接计时器超时8 持续时间终止9 Keepalive 计时器终止10 收到Open 消息11 收到Keepalive 消息12 收到Update 消息13 收到Notification 消息Idle Statea) BGP 通常以Idle State 开始(此时拒绝接收所有入连接)。

当一个开始事件出现,BGP 过程初始化所有BGP 资源打开重试连接(ConnectRetry)计时器,初始化到邻居的TCP 连接,接听来自邻居的TCP 初始化消息并将它的状态转到Connect 状态.b) 开始事件是由一个操作者配置一个BGP 过程,或者重置一个已经存在的过程或者路由器软件重置BGP 过程引起c) 一个差错的出现会将BGP 过程的状态转为Idle.路由器可能会试图发起另外一个开始事件.为了防止在持续差错条件下导致的摆动,在第一次转回到空闲状态后,路由器会自动开启重试连接计时器,当计时器终止后,路由器就会放弃重新开始BGP.重试计时器第一次的时间为60s,下一次为前一次的2 倍120s,成指数形式增加Connect State此状态下BGP 过程会等到TCP 连接完成以后再决定后续的动作.1. 如果TCP 连接建立成功,BGP 连接将ConnectRetry 清零,完成初始化并给邻居发送一个Open 消息,转移到Open状态2. 如果TCP 连接建立失败,BGP 继续监听由邻居发起的连接,重置ConnectRetry 计时器并转移到Active 状态3. 如果在连接状态下,ConnectRetry 超时,计时器将重新开始,并再一次试图与邻居建立TCP 连接,BGP 保持Connect 状态,此时如果有任何其他输入事件,转入Idle 状态Active State在此状态,BGP 过程试图与邻居建立一个TCP 连接1. 如果连接成功,BGP 过程将ConnectRetry 计时器清零,完成初始化,给邻居发送一个Open 消息并转移到发送Open消息状态,Hold 计时器设置为4mins2. 如果在激活状态,ConnectRelay 计时器超时,将回到ConnectState 并且重置ConnectRelay 计时器.也发起一个到对等的TCP 连接并继续监听来自对等体的连接.3. 如果邻居试图与一个未知IP 建立TCP 会话,同时ConnectRelay 计时器重置,连接被拒绝并保持在Active 状态4. 任何一个事件(除开始事件)都回导致状态转向idleOpen send State在此状态下,已经发送了Open 消息,BGP 等待邻居发来的Open 消息,1. 当收到一个Open 消息,如果发现差错,将给邻居发一个Notification 消息并转入Idle 状态2. 如果收到的Open 消息没有差错,将给邻居发送一个Keepalive 消息并将Keepalive 计时器清零,此时协商一个较短的holdtime,如果为0,则没有启动Hold 和keepalive 计时器,根据AS 号选择IBGP 或者EBGP,同时将状态转移到OpenConfirm 状态3. 如果收到一个TCP 断开消息,本地断开BGP 连接,重置ConnectRetry 计时器,并转Active 状态Open Confirm State此状态下BGP 会等待一个Keepalive 消息或者Notification 消息1. 如果收到一个Keepalive 消息,转移到Establish 状态2. 如果收到一个Notification 消息,转入Idle 状态,并断开TCP 连接3. 如果Hold 计时器超时,检测到一个差错或出现stop 事件,BGP 将给邻居发送Notification 并断开连接转入Idle 状态Establish State此状态下,BGP 对等体间的连接已经完全建立,可以交换Update Keepalive 和Notification消息,如果收到Notification自动转入Idle,并中断连接标准:IETF(Internet工程任务组)先后为BGP制定了多个建议,分别为:RFC 4271:当前正使用的BGP协议版本,称之为BGP4。

相关主题