您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 大学课件 > BGP路由协议详解(完整篇)
1BGP路由协议详解制作人:张选波二〇〇九年六月二十二日2一、BGP的概况BGP最新的版本是BGP第4版本(BGP4),它是在RFC4271中定义的;一个路由器只能属于一个AS。AS的范围从1-65535(64512-65535是私有AS号),RFC1930提供了AS号使用指南。BGP的主旨是提供一种域间路由选择系统,确保自主系统只能够无环地交换路由选择信息,BGP路由器交换有关前往目标网络的路径信息。BGP是一种基于策略的路由选择协议,BGP在确定最佳路径时考虑的不是速度,而是让AS能够根据多种BGP属性来控制数据流的传输。1、BGP的特性BGP将传输控制协议(TCP)用作其传输协议。是可靠传输,运行在TCP的179端口上(目的端口)由于传输是可靠的,所以BGP0使用增量更新,在可靠的链路上不需要使用定期更新,所以BGP使用触发更新。类似于OSPF和ISIS路由协议的Hello报文,BGP使用keepalive周期性地发送存活消息(60s)(维持邻居关系)。BGP在接收更新分组的时候,TCP使用滑动窗口,接收方在发送方窗口达到一半的时候进行确定,不同于OSPF等路由协议使用1-to-1窗口。丰富的属性值可以组建可扩展的巨大的网络2、BGP的三张表邻居关系表所有BGP邻居转发数据库记录每个邻居的网络包含多条路径去往同一目的地,通过不同属性判断最好路径数据库包括BGP属性路由表最佳路径放入路由表中EBGP路由(从外部AS获悉的BGP路由)的管理距离为20IBGP路由(从AS系统获悉的路由)管理距离为200如下图所示。3邻居表,包含与之建立BGP连接的邻居使用命令showipbgpsummary可以查看到Router#shipbgpsummaryBGProuteridentifier11.1.1.1,localASnumber100BGPtableversionis8,mainroutingtableversion85networkentriesusing585bytesofmemory6pathentriesusing312bytesofmemory4/3BGPpath/bestpathattributeentriesusing496bytesofmemory1BGPAS-PATHentriesusing24bytesofmemory0BGProute-mapcacheentriesusing0bytesofmemory0BGPfilter-listcacheentriesusing0bytesofmemoryBGPusing1417totalbytesofmemoryBGPactivity5/0prefixes,6/0paths,scaninterval60secsNeighborVASMsgRcvdMsgSentTblVerInQOutQUp/DownState/PfxRcd10.1.1.14100141880000:09:32211.1.1.24200121680000:07:031转发表,从邻居那里获悉的的所有路由都被加入到BGP转发表中。使用命令showipbgp可以查看Router#shipbgpBGPtableversionis8,localrouterIDis11.1.1.1Statuscodes:ssuppressed,ddamped,hhistory,*valid,best,i-internal,rRIB-failure,SStaleOrigincodes:i-IGP,e-EGP,?-incompleteNetworkNextHopMetricLocPrfWeightPath*10.1.1.0/240.0.0.0032768i*i10.1.1.101000i*11.1.1.0/240.0.0.0032768i*i192.168.1.010.1.1.101000i*192.168.2.00.0.0.0032768i*192.168.3.011.1.1.200200i路由表,BGP路由选择进程从BGP转发表中选出前往每个网络的最佳路由,并加入到路由表中。使用命令showiproutebgp可以查看Router#shiproutebgpB192.168.1.0/24[200/0]via10.1.1.1,00:13:11B192.168.3.0/24[20/0]via11.1.1.2,00:11:1943、BGP消息类型open:用来建立最初的BGP连接。(包含hold-time,router-id)Keepalive:对等体之间周期性的交换这些消息以保持会话有效。(默认60秒)Update:对等体之间使用这些消息来交换网络层可达性信息。Notification:这些消息用来通知出错信息。所有的BGP分组共享同样的公有首部,在学习不同类型的分组之前,先讨论公共首部,如下图所示,这个首部的字段如下。标记:这个16字节标记字段保留给鉴别用长度:这个2字节字段定义包括首部在内的报文总长度类型:这个1字节段定义分组的类型,用数值1至4定义BGP消息类型打开消息:主要是利用此报文建立邻居,运行BGP的路由器打开与邻居的TCP连接,并发送打开报文,如果邻居接受这种邻居关系,由响应保活报文。打开报文格式如下所示。5版本:这个1字节字段定义BGP的版本,当前的版本是4自治系统:这个2字节字段定义自治系统号。保持时间:这个2字节字段定义一方从另一方收到保活报文或更新报文之前所经过的最大秒数,若路由器在保持时间的期间内没有收到这些报文中的一个,就认为对方是不工作的。BGP协议标识:这是2字节字段,这定义发送打开报文的路由器,为此,这个路由器通常使用它的IP地址中的一个作为BGP标识符。选项长度:打开报文还可以包含某些选项参数,若包含,则这个1字节字段定义选项参数总长度,若没有选项参数,则这个字段的值为0选项参数:若选项参数长度的值不是0,则表示有某些选项参数,每一个选项参数本身又有两个字段,参数长度和参数值,到现在已定义的唯一的选项参数是鉴别。如下图是采用ethereal采集到的BGP的打开消息报文。更新报文:更新报文是BGP协议的核心,路由器使用它来撤销以前已通知的终点和宣布到一个新终点的路由,或两者都有,应该注意:BGP可以撤销好几个在以前曾通知过的终点,但在单个更新报文中则只能通知一个新终点,如下所示。6不可行路由长度:这个2字节字段定义下一字段的长度。撤销路由:这个字段列出必须从以前通知的清单中删除的所有路由路径属性长度:这个2字节字段定义下一个字段的长度路径属性:这个字段定义到这个报文宣布可达性的网络路径属性网络层可达性信息:这个字段定义这个报文真正通知的网络。它有一个长度字段和一个IP地址前缀,长度定义前缀中的位数。前缀定义这个网络地址的共同部分。例如,若这个网络是123.1.10.0/24,则网络前缀是24而前缀是123.1.10。下图为,是采用ethereal采集到的BGP的更新消息报文。7保活报文:是用来告诉对方自己是工作的,保活报文只包括公共首部,如下图所示。下图为,是采用ethereal采集到的BGP的保活报文。8通知报文:当检测出差错状态或路由器打算关闭连接时,路由器就发送通知报文,如下图所示。差错码:这个1字节字段定义差错的种类差错子码:这个1字节字段进一步定义每一种差错的类型差错数据:这个字段可用来给出关于该差错的更多的诊断信息具体的差错码,如下表所示。差错码差错码说明差错子码说明1报文首部差错3种不同的子码:同步问题(1),坏的报文长度(2),坏的报文类型(3)92打开报文差错6种不同的子码:不支持的版本(1),坏的对等AS(2),坏的BGP标识符(3),不支持的可选参数(4),鉴别失败(5),不可接受的保持时间(6)3更新报文差错11种不同的子码:错误形成的属性表(1),不能识别的熟知属性(2),丢失熟知属性(3),属性标志差错(4),属性长度差错(5),非法起点属性(6),AS路由选择环路(7),无效的下一路属性(8),可选属性差错(9),无效的网络字段(10),错误形成的AS_PATH(11)4保持计时器截止期到未定义子码5有限状态机差错定义过程的差错,未定义子码6关闭未定义子码下图为,是采用ethereal采集到的BGP的通知报文。4、建立邻居的过程在两个BGP发言人交换信息之前,BGP都要求建立邻居关系,BGP不是动态地发现所感兴趣的运行BGP的路由器,相反,BGP使用一个特殊的邻居IP地址来配置的。BGP使用周期性的Keepalive分组来确认BGP邻居的可访问性。Keepalive计时器是保持时间(HoldTime)的三分之一,如果发给某一特定BGP邻居三个连续的Keepalive分组都丢失的话,保持时间计时器超时,那个邻居被视为不可达,RFC1771对保持时间的建议是90秒,Keepalive计时器的建议值是30秒。按照RFC1771,BGP建立邻居关系要经历以下几个阶段,如下图所示。10Idle:在此状态下不分配网络资源,不允许传入的BGP连接。当在持续性差错条件下,经常性的重启会导致波动。因此,在第一次进入到空闲状态后,路由器会设置连接重试定时器,在定时器到期时才会重新启动BGP,思科的初始连接重试时间为60秒,以后每次连接重试时间都是之前的两倍,也就是说,连接等待时间呈指数关系递增。Connect:(已经建立完成了TCP三次握手),BGP等待TCP连接完成,如果连接成功,BGP在发送了OPEN分组给对方之后,状态机变为OpenSent状态,如果连接失败,根据失败的原因,状态机可能演变到Active,或是保持Connect,或是返回Idle。Active:在这个状态下,初始化一个TCP连接来建立BGP间的邻居关系。如果连接成功,BGP在发送了OPEN分组给对方之后,状态机变为OpenSent状态,如果连接失败,可能仍处在Active状态或返回Idle状态。OpenSent:BGP发送OPEN分组给对方之后,BGP在这一状态下等待OPEN的回应分组,如果回应分组成功收到,BGP状态变为OpenConfirm,并给对方发送一条Keepalive分组,如果没有接到回应分组,BGP状态重新变为Idle或是Active。OpenConfirm:这时,距离最后的Established状态只差一步,BGP在这个状态下等待对方的Keepalive分组,如果成功接收,状态变为Established,否则,因为出现错误,BGP状态将重新变为Idle。Established:这是BGP对等体之间可以交换信息的状态,可交换的信息包括UPDATE分组、KeepAlive分组和Notification分组。connect和active都是TCP连接阶段,ACTIVE是发起方,connect是应答方。可以使用命令showipbgpsummary、debugipbgpevents、debugipbgp来查看。Router#debugipbgpBGPdebuggingisonforaddressfamily:IPv4Unicast*Jun2322:00:05.619:BGP:11.1.1.2wentfromIdletoActive11*Jun2322:00:05.627:BGP:11.1.1.2openactivedelayed30128ms(35000msmax,28%jitter)*Jun2322:00:06.215:BGP:11.1.1.2passiveopento11.1.1.1*Jun2322:00:06.219:BGP:11.1.1.2wentfromActivetoIdle*Jun2322:00:06.219:BGP:11.1.1.2wentfromIdletoConnect*Jun2322:00:06.227:BGP:11.1.1.2rcvmessagetype1,length(
本文标题:BGP路由协议详解(完整篇)
链接地址:https://www.777doc.com/doc-5062894 .html