BGP协议原理总结BGP协议3:边界网关路由协议(版本3)RFC1267王尚201192339名词解释:1AS(自治系统):在单一技术管理下的一系列路由器,他们使用一个内部网关,在AS内部路由数据包的共同标准,使用同一个外部网关协议来想其他AS传输数据包。
因为这个经典的解释已经被扩展,所以对于一个单一的AS来说在内部使用多个内部网关协议和有时多个系列的标准已经很普遍了。
(在这里使用的AS强调了这样的事实,即便多个内部网关协议和度量标准被使用,一个AS面向其他的AS的管理拥有一个单一的连贯一致的内部路由方案,并且展示一个始终如一的图片,什么的网络通过它可以到达。
从外部的路由的观点来看一个AS可以被看做一个单片集成电路:)图1AS系统2IGP(内部的边界网关协议)专门用于自治系统中的网关间交换数据流转通道信息的协议3EGP(外部的边界网关协议)在自治系统间的相邻的网关主机间交换路由信息的协议。
常用于在INTERNET主机间交换路由表信息。
一个轮询协议,利用HELLO和I-HEARD-YOU消息的转换,能让每个网关控制盒接受网络可达性信息的速率,容许每个系统控制自己的开销,同时发出命令请求更新响应。
路由表包括一组一知路由器及这些路由器的可到达地址及路径开销,从而选择最佳路由。
每个路由器没个120或者480秒访问邻居一次,邻居发挥完整的路由表来响应。
4IBGP(内部边界网关协议)5EBGP(外部边界网关协议)6EBGP对等体7BGP和IGP同步:一个BGP路由器不将从内部Peer得知的目的地通告给外部Peer,除非该目的地也能通过IGP得知。
若一个路由器通过IGP得知该目的地,则可以认为路由能在AS中传播,内部通达已经可以得到保证。
BGP协议概述1BGP协议是外部路由协议,用来在AS之间传递路由信息。
2是一种增强的距离矢量路由协议。
具有以下特点:①可靠的路由更新机制②丰富的Metric度量方法③从设计上避免了环路的发生3可以为路由附带属性信息4支持CIDR(无类别域间路由)5丰富的路由过滤和路由策略6使用的传输层协议是TCP协议,使用的端口号是1797无需周期性的更新8周期性的发送KEEPALIVE报文验证TCP连接的连通性9在进行路由更新时只发送路由增量BGP路由通告原则1当存在多条路径时,BGPSpeaker只选择最优的给自己使用2BGPSpeaker只把自己只用的路由通告给邻居3BGPSpeaker从EBPG获得的路由会向他的所有BGP邻居通告(包括EBGP和IBGP)4BGPSpeaker从IBGP获得的路由不向它的IBGP邻居发送5BGPSpeaker从IBGP获得的路由是否会通告给他的EBGP对等体要依从于IGP和BGP同步的情况来决定6连接一但建立,BGPSpeaker将把自己所有BGP路由通告给新的邻居IBGP全连接①IBGP对等体物理意义上的全连接②IBGP对等体逻辑意义上的全连接BGP报文种类1Open:在TCP会话建立之后,两个邻居都将发送Open消息,每个邻居都利用该消息标识自己并指定BGP操作参数2KeepAlive:当路由器接受了由邻居发送来的Open消息中的指定参数。
它将响应一条KeepAlive消息,此后路由器每60秒发送一条KeepAlive消息,或是以协商的保持时间的1/3为周期发送KeepAlive消息。
由于KEEPALIVE纯粹是一个通信知会,不需要携带什么信息,因此KEEPALIVE报文实际上是不带数据的BGP报文头。
3Update:被用来宣告可行路由、撤销的路由4Notification:只要路由器检测到差错就会发送Notification消息并关闭BGP进程,随后我们将看到BGP邻居断开,然后试图重新建立BGP邻居。
BGP报文头BGP报文的格式都是一样的:BGP报文头+BGP报文体其中BGP报文头格式如下:图2BGP报文头⑴Maker(16byte):全为1,否则标记值要使用认证机制来计算(认证机制是通过认证信息的一部分来指定的)。
标记可以用来探测BGP对端的同步丢失,认证进入的BGP消息。
⑵Length(2byte)BGP报文的全长,长度值必须最少19个字节,最大4096个字节。
可能更多,根据报文类型决定⑶Type(1byte)1-Open2-UPDATE3—Notification4KeepAliveOpen报文:图3Open报文头⑷Version(1字节)当前BGP版本号为3⑸MyAutonomusSystem(2字节):发射者自导系统号⑹HoldTIME(2字节):BGP的Holdtime为180秒⑺BGPIDENTIFIER(4字节):发送者的BGProuteID⑻AUTH. CODE⑼AUTHENTICATIONDATAUpdate图4Update报文头⑽TOTALPathAttributeSLENGTH(2字节):总的路径属性长度0代表在UPDATE消息中没有网络层可达信息域⑾PathAttribute:路径属性,在一个UPDATE中可能存在多个路径属性对。
每个路径属性对包括AttributeFlags,Attributetypecode,AttributeDateLength三个字段。
AttributeFlags,Attributetypecode各占一个字节。
⒈AttributeFlags的8位分别表示:⒉Attributetypecode指明是什么属性。
图5Attributetypecode属性⑿Network(4字节):INTERNETNETWORK编码表明这个AS的路由由这个路径属性表明③KeepAlive报文④Notification报文图6Notification报文头⑴ERRORCODE:(1字节)⑵ErrorSubcode(1字节)⑶Date用来诊断Notification的原因。
依赖于错误码和错误子码。
MessageLength=21+datalengthBGP协议中消息的使用1通过TCP建立BGP连接时,发送Open报文2连接建立后,如果路由需要发送或者路由改变时,发送Update报文告知对端路由信息3稳定后此时要定时发送KeepAlive报文以保持BGP连接的有效性4档本地BGP在运行中发生错误时,发送Notification报文告知BGP对端BGP有限状态机BGP会话共有6种状态,分别是:1- Idle2- CONNECT3- ACTIVE4- OpenSENT5- OpenCONFIRM6- ESTABLISHEDBGP会话共有13种事件,影响BGP的会话,分别是:1- BGPSTART2- BGPStop3- BGPTransportConnectionOpen4- BGPTransportConnectionCLOSED5- BGPTransportConnectionOpenFAILED6- BGPTRANSPORTFATALERROR7- ConnectRetrytimerExPIRED8- HoldTimerExPIRED9- KeepAlivetimerExPIRED10- ReceiveOPENMESSAGE11- ReceiveKEEPALIVEMESSAGE12- ReceiveUpdateMESSAGES13- ReceiveNOTIFICATIONMESSAGE1空闲状态BGP通常以空闲状态开始。
在该状态下,它拒绝接收所有入连接。
当一个开始事件出现的时候,BGP初始化所有BGP资源,打开重试连接计时器(ConnectRetrytimer)、初始化到邻居的TCP连接、接听来自邻居的TCP初始化消息,并将它的状态转到连接状态。
开始事件是由一个操作者配置一个BGP过程,或重置一个已经存在的过程,或者由路由器软件重置BGP过程引起的。
一个差错的出现会将BGP过程的状态转为空闲状态。
路由器可能会试图发起另外一个是事件。
但是对于路由器如何完成这个过程应当加以限制——在具有持续差错的条件下,坚持不懈的试图重新开始会导致摆动。
因此,在第一次转向空闲状态以后,路由器会启动重试连接计时器,当计时器终止后,路由器就会放弃重新开始BGP。
下一次ConnectRetry时间是前一次的两倍,以此类推。
2连接状态在这种状态下,BGP过程会等到TCP连接完成以后再决定后续动作。
如果TCP连接成功,BGP连接将ConnectRetry清零,完成初始化过程,给邻居发送一个Open消息并转移到发送Open消息状态。
如果TCP连接建立失败。
BGP过程会继续监听由邻居发起的连接、重置ConnectRetry计时器并转移到激活状态。
如果再连接状态下,ConnectRetry计时器超时了,计时器将重新开始计时,并再一次试图与邻居建立一个TCP连接,BGP状态继续保持在连接状态。
任何一个其他输入事件的出现都会导致BGP状态转向空闲。
3激活状态在这个状态下,BGP过程试图与邻居建立一个TCP连接。
如果TCP连接建立成功,BGP过程将ConnectRetry清零,完成初始化工作,给邻居发送一个Open消息并转移到发送Open消息状态。
如果BGP在激活状态时,ConnectRetry计时器超时,该过程回到连接状态并且重置ConnectRetry计时器。
它同样也发起一个到对等的TCP连接并且继续监听来自对等得连接。
如果邻居试图与一个未知的IP地址建立TCP会话,那么ConnectRetry计时器会被重置,连接被拒绝并且本地过程保持在激活状态。
任何一个输入事件(除了开始事件,在激活状态下该事件会被忽略)都会导致状态转移为空闲。
4发送Open消息状态在这种状态下,已经发送了Open消息,BGP正在等待从邻居发来的Open消息。
当收到一个Open消息后,检查该消息的所有字段。
如果发现了差错,会给它的邻居发送一个Notification消息并且将状态转移到空闲。
如果再接收到的Open消息种没有发现差错。
BGP给邻居发送一个KeepAlive消息,并且将KeepAlive计时器置位。
邻居之间协商一个Hold时间,他们会选用较小的值。
如果协商的Hold时间是0,则没有启动Hold和KeepAlive计时器。
根据对等的AS号,决定该连接是内部的还是外部的,并且将状态转移到Open消息确认。
如果收到了一个TCP断开消息,本地过程断开BGP连接,重置ConnectRetry计时器,开始监听将要由邻居发起的新的连接并将状态转移到激活。
任何一个输入事件(除了开始事件,在激活状态下该事件会被忽略)都会导致状态转移为空闲。
5Open消息确认状态在这种状态下,BGP过程会等待一个KeepAlive或者Notification消息。