1     协议介绍

1.1   协议概述

BGP(BorderGateway Protocol,边界网关协议)是一种实现AS(自治系统)之间路由的距离矢量性动态路由协议。使用TCP作为其传输层协议(端口号为179),保证了协议传输的可靠性。BGP选择一条单一路径,默认为到达目的网络的最佳路径。这个最佳路径选择算法是通过分析路径属性来确定哪个路径将被作为最佳路径安装在BGP路由表中。

1.2   消息分类

(1)    OPEN  

OPEN数据包是TCP建立后发送的第一个消息,用于建立BGP对等体的关系。其内容为协议版本号、自治域号、路由器标示符、连接保持时间以及可选的能力参数。

(2)    UPDATE

UPDATE消息是路由信息实际载体,用于在对等体之间传递路由信息。其主要内容除必要的协议头外,最重要的是路由属性,针对某个可达网络前缀,路由属性对该前缀进行描述,对等体通过这些属性描述决定路由该被如何处理。

(3)    KEEPALIVE

KEEPALIVE消息在BGP会话中具有确认和保持连接的作用。在会话初始阶段,对等体进行OPEN消息协商时,该消息用来确认对方的OPEN消息;在连接建立后,对等体周期性发送,以保持连接有效。

(4)    NOTIFICATION

NOTIFICATION消息被用来进行错误通知,在BGP会话的各个阶段中,如果一方对等体发现异常,可通过该消息通知对方,通过错误码和错误描述,该消息可以将错误信息进行分类及描述。

(5)    ROUTEFRESH 

ROUTEFRESH消息用于通知对方重发路由。在其拓展能力ORF中,将本端基于前缀的入口策略通过刷新报文发送给对端,对端通过该策略构造出口策略,避免了大量无用路由。

1.3   交互过程

(1)    首先要给A、B路由器配置邻居,只有事先配置成邻居的路由器间才能建立会话连接。

(2)    A端路由器首先发送Open消息给邻居B,其携带了自己BGP参数和支持的能力,如果没什么错误,B端路由器回复一个Open消息和一个Keepalive消息对邻居A的OPEN消息进行确认。

(3)    A端路由器收到邻居B发来的OPEN消息,检查无误后,发送一个KEEPALIVE消息进行确认,至此BGP会话建立。

(4)    会话建立后,A路由器与B端路由器处于对等水平,可以发送剩下三种数据包的任意一种,据情况发送。

(5)    刚建立连接时,一般A、B会互相发送UPDATE消息,将自己已有的路由信息通告对方;如果某端需要,会发送ROUTEREFRESH消息,要求对

方重发路由信息;如果某端接收的数据包有错,会发送NOTIFICATION通告对方,并断开连接。

图1.3.1 协议交互状态

2     测试套开发

2.1   数据建模

Peach使用XML元素来描述和构造数据包,使用官方文档所列出的元素和属性去建立数据模型。比如,基本元素Number,String,Blob,Flag等元素去描述协议字段本身的数据类型;Relation,Fixup,Transform等元素去描述数据之间的关系;Name,Size,Value等属性去限定和描述数据内容。在建模之前,开发人员应熟悉这些元素和属性的使用,详情请见Peach官方文档。

数据建模的依据是协议官方文档,BGP协议的官方基础文档为rfc-4271,另外可以参考实际环境中的抓包。见图 2.1.1 文档规OPEN消息格式图 2.1.2 wiresahrk解析的OPEN消息格式,这是本例数据建模的两个基本依据。

本测试套以OPEN消息为例,讲解数据建模过程。

(1)    除去协议的通用报头外,OPEN消息的第一个字段为Vesion,根据文档的描述,它的大小为一个字节,当前版本发展到BGPv4,因此值固定为4,根据wireshark抓包也可以验证该描述。通过这些信息,我们就可以用XML的元素和属性描述通用报头的第一个字段,见图 2.1.2 通用报头的peach建模

(2)    第二个元素为MyAs,它表示本地AS号,是在BGP网络中通信的一个标识,应根据具体路由器配置来决定值大小,因此该处的value用配置项表示##MyAs##。接下来的HoldTime和bgpID同样需要根据具体环境配置。因此,协议数据建模中很重要的一点就是,对各个字段要充分理解,以构造合法的数据包。

(3)    OptParaLen为一个字节大小,表示下面可选参数的长度,用Relation可以灵活表示下面数据块的大小。

(4)    我们可以看到数据模型中有很多继承关系,所有的能力选项都是在其他地方定义好,在该数据模型中被引用。

(5)    举一个能力参数的建模,如图 2.1.3 OPEN消息的peach建模所示。

(6)    总之,充分使用Peach所提供的元素和属性去准确的描述数据包。

图 2.1.1 文档规定OPEN消息格式

图 2.1.2 wiresahrk解析的OPEN消息格式

 

图 2.1.3 OPEN消息的peach建模


图 2.1.4 能力参数的peach建模

 

2.2   状态建模

状态模型描述的是数据包的交互过程,Peach使用StateModel模块完成这一过程的描述。StateModel中基本作用元素是Action,它的类型有Open,Connect,Input,Output,Close,但对于协议来说,最重要的就是Input和Output,因为协议最根本的行为就是数据包的收发,而输入或输出的对象正是在测试套开发中第一阶段建立的数据模型。

状态建模的依据依然是官方文档和实际环境的抓包,在测试套开发的第一阶段中或者在协议研究的过程中,我们应该可以了解BGP协议有哪些类型的报文,它们的作用是什么,它们通过怎样的配合完成了该协议的使命。这些信息就是我们状态建模的基本理论依据,通过环境抓包最好将抽象的理论变成摆在眼前的实现,这样会更加清晰地掌握协议的行为。

BGP协议可以在多种环境中使用,自治域内外、IPv4和IPv6等,但是其交互状态是相同的,其环境的区别在于数据包所带信息的不同。下面是BGP协议Peach状态模型建模的片段。对照图 2.2.1 状态建模示例,其过程描述如下。

(1)    第一个动作是open,该动作本是默认的,但在该处为了延时,所以特意对默认值进行修改,每个动作元素有属性onStart,它的值可以是一句Python代码,此处加了个time.sleep(1)的作用是,在一次连接断开后,路由器有恢复时间,所以在开始连接时等待1秒。

(2)    根据上文对协议交互过程的描述,我们可知两个路由器使用BGP协议进行通信的第一个动作,是其中一方发送一个OPEN报文。所以第一个Action应该是Output。

(3)    接下来是两个输入,对应于交互过程的对端回复OPEN数据包和对收到的OPEN消息进行确认的KEEPALIVE消息。

(4)    第5个和第6个动作是chageState,其作用是判定某个状态,在满足某个条件后进行跳转,也可以不判断,直接跳转。第5个动作中的when即是判断条件。

(5)    完整状态建模请见测试套文件。

图 2.2.1 状态建模示例

 

2.3   测试配置说明

测试配置中所做的工作就是,如何按照StateModel中所规定的行为去和被测目标交互,使用什么样的监视手段去监视交互过程出现的异常,日志保存的路径以及变异策略选取。

(1)    Test中的第一个子元素是Statemodel,即测试套开发中第二阶段所定义的某个测试状态模型。

(2)    Agent是peach中的代理,管理诸多监视程序。详情请参考peach官方文档。

(3)    Publisher对于协议测试套来说是发包器,是将报文发到指定目标中的某种Socket。Peach将各个Socket封装成Publisher,我们只需要配置相应参数,便可以建立各种通信信道,进行数据包的收发。BGP协议用TCP的Client模式收发数据包。

(4)    日志保存路径就不做多的解释了。

(5)    peach规定了三种变异策略。详情请参考peach官方文档。

图 2.3.1 测试配置示例

3     测试组网

3.1   测试原理

peach模仿BGP网络中的一个节点,与网络中其他节点交互。该过程中,从peach中发出的数据包是经过变异处理的,被测路由器接收变异数据并处理该数据,进而达到测试的效果。

3.2   测试组网说明

图3.2.1 测试示意图

首先使路由器与Peach网络连通,给路由器配置BGP协议,在不同的测试状态下,将Peach配置为和路由器在同一路由域内或不同路由域内,以测试不同状态。

3.3   测试状态说明

BGP协议的环境可分为,自治域间和自治域内,IPv4、IPv6、VPN、多播等多种环境。由于其交互状态相同,因此Peach测试套仅有一个状态模型。环境的区分在于UPDATE中路由属性的选择,以及OPEN消息中的能力声明。针对这些变化,本测试套设计成通过选择不一样的UPDATE数据包来实现状态选择,详情见4.2 配置bgp.xml.config

(1)    BgpSession

BGP协议所有环境的状态模型相同。

4     配置及测试

4.1   特别说明

BGP协议的应用场景众多,而这些场景不同之处仅表现在Open数据包和Update数据包内容的差异,既没数据包交互状态的变化,也无新包出现。内容的可变性很强,特别是Update数据包,有许多内容是需要根据应用场景增添或修改的。本测试套仅有一个StateModel,但是经过配置,可以测试8个环境。

路由器对于每次BGP连接断开后,有个恢复时间,需要对路由器设置后才能使用Peach不断迭代的命令。华为AR1200型号,修改路由器的命令为:

【router A-bgp】timer connect-retry 1

意思是:断开连接后恢复时间改为1秒。

4.2   配置bgp.xml.config:

(1)     必配区

TargetIP修改为被测试路由器与peach直连的接口地址。

AFISAFI代表支持地址族路由,默认AFI为1,SAFI为1,代表IPv4路由。

5           BGP地址族类型

6           AFI

7           SAFI

8           IP单播

9           1

10        1

11        IPv4组播

12        1

13        2

14        IPv6单播

15        2

16        1

17          VPNv4

18        1

19        128

MyAs是被模拟的路由器所在AS号,若场景为IBGP,则应和被测试路由器相同。

NextHop是路由信息中的下一跳,需配置合法可达地址,否则路由器将会丢弃路由,在EBGP环境下,选择peach主机地址;在IBGP环境下,若路由是外部产生,则为第一次进入AS内的下一跳地址;若为内部产生,则为发送的该消息的接口。

PitLibraryPath是pit测试套所在路径。

Mutation_Strategy是变异策略,配置文件中默认是Random。

UpdateNLRI是适应多场景而构造的不同网络可达消息,目前将场景分为4大类:IBGP、EBGP、IMBGP、EMBGP,对Update_NLRI进行属性的配置可适应ipv4、ipv6、组播、VPN等多种路由环境。如果选择多协议可达性信息或不可达信息,需要到多协议配置根据所选协议类型,配置下一跳;如果选择BGP基本,则无需配置多协议区。

UpdateWithdraw是适应多场景而构造的不同网络不可达消息,目前将场景分为2大类:BGP、MBGP,对Update_NLRI进行属性的增添可适应ipv4、ipv6、组播、VPN等多种路由环境。

(2)     多协议配置区

MP_REACH_NLRI是在MBGP_UpdateMessage_NLRI需要配置的网路可达信息属性,VPN、IPv6、组播的MP_REACH_NLRI结构大体相同,区别在于地址结构,现在已经描绘出VPN、IPv6的地址结构,测试BGP-VPN和IPv6需在此处选定MP_REACH_NLRI_IPv4_Multicast,MP_REACH_NLRI_VPNv4或MP_REACH_NLRI_IPv6。

MP_UNREACH_NLRI是描述多协议网络不可达性信息属性,配置与MP_REACH_NLRI类似。

下一跳地址信息配置,此块配置区域分别描述了Ipv4 Multicast、IPv6和VPNv4的下一跳地址配置。

(3)     可选配置

HoldTime是路由器可以设置的BGP连接保持时间,默认180s。

bgpID是被模拟的路由器的BGP ID,一般默认即可。

MULTI_EXIT_DISC是路由器可配置的判定多出口路径优先值的属性,默认为0。

LOCAL_PREF是在IBGP环境中多路径时,判定最佳路径的属性,可路由器配置,默认为100。

Local_CLUSTER_ID是反射路由簇ID,一般为反射路由器的路由器ID,仅在IBGP环境中存在。

COMMUNITY_val是团体属性值配置,携带表示某种路由策略的团体属性值的路由项,将会根据策略作统一处理,公认的团体属性值有NO_EXPORT:0xffffff01 ,NO_ADVERTISE:0xffffff02 ,NO_EXPORT_SUBCONFED:ffffff03。

ORF能力配置: ORF是将本端基于前缀的入口策略通过刷新报文发送给对端,对端通过该策略构造出口策略,避免了大量无用路由(RFC5291)。配置分两部分,第一部分在Open报文中声明支持ORF能力,第二个部分在RouterRefresh报文中增加ORF实体(即路由策略体)。

GR能力配置:GR是平滑重启能力,配置仅需在Open报文中声明GR能力。

路由属性配置:列出了所有可选路由属性,按照配置环境在选中在Update消息中出现的属性。其中MP_REACH_NLRI和MP_UNREACH_NLRI属性只在非多协议环境中出现,前面有专门的多协议配置。LOCAL_PREF、CLUSTER_LIST、ORIGINATOR_ID属性只在IBGP中出现。必须属性栏是必须配置的,否则消息非法。

Noticefy消息配置:Noticefy消息由3部分构成,主错误代码、副错误代码和附加信息,错误代码的可能取值已列出。

4.3 运行Peach

CMD命令行切换到pits目录,运行以下命令

..\peach Net\BGP.xml

5 参考文档

RFC1977 RFC2545  RFC2918  RFC4271 RFC4360  RFC4456  RFC4760 RFC5291(ORF)  RFC5292(ORF)  RFC4724(GR)

BGP协议测试套开发及使用指导书相关推荐

  1. 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书

    嵌入式Linux开发课程设计指导书 课程编码: 适应专业:计算机专业.电子信息工程专业 学时:3周(计算机专业),2周(电子信息工程专业) 学分: 3(计算机专业),2(电子信息工程专业)时间安排:分 ...

  2. 张晓霞oracle,《Oracle应用开发》实验指导书 - 图文

    <应用开发>实验指导书 张晓霞编著 年月 1 / 18 < 应用开发> 课程实验 一.本实验课在培养实验能力中的地位及作用 < 应用开发>是软件工程专业的一门专业课 ...

  3. Android技术应用实验指导书,Android应用开发实验指导书

    第 1 页手机应用开发实验指导书西南科技大学计算机科学与技术学院2015.11第 2 页目录手机应用开发 .1实验指导书 .1实验一:搭建 Android开发平台和创建 HelloWorld程序 .- ...

  4. dais-86pro+实验指导书_风光互补并网发电与机电实训系统实验台, 风能太阳能发电实训装置_搜狐汽车...

    一.概述: 该系统由太阳能光伏电板.双轴跟踪控制模块.蓄电池模块.太阳能控制器模块.太阳能逆变器模块.模拟风洞发电模块.开关控制模块.环境监测模块.上位机监控模块,仪表显示部分,(各功能转换接口模块) ...

  5. jmeter web服务器协议,【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter测试SOAP协议性能测试脚本开发(示例代码)...

    目录: [阐述]:首先应该遇到了一个共同的问题,JMeter3.2之后就没有WebService(SOAP) Request,后来经过查询网上资料得知其实可以用HTTP请求来操作,结果是一样的. [步 ...

  6. Computer:计算机测试理论(开发/测试/上线)之DEV、SIT、UAT、PRD四套环境(测试环境/开发环境/生产环境)详细介绍之详细攻略

    Computer:计算机测试理论(开发/测试/上线)之DEV.SIT.UAT.PRD四套环境(测试环境/开发环境/生产环境)详细介绍之详细攻略 目录 测试理论 1.DEV.SIT.UAT.PRD四套环 ...

  7. 中兴测试软件可以看sip信令吗,中兴光猫FTTH_SIP协议开通调试现场配置指导书

    <中兴光猫FTTH_SIP协议开通调试现场配置指导书>由会员分享,可在线阅读,更多相关<中兴光猫FTTH_SIP协议开通调试现场配置指导书(5页珍藏版)>请在人人文库网上搜索. ...

  8. linux igmp 属于那层协议,Linux下IGMP协议测试工具的开发与应用

    摘要: 组播以其节约网络带宽.降低网络负荷,实现接收者的并行接收等优势而具有广泛的应用,成为重要的网络技术.对于组播各种应用的研究正在成为热点,对组播各种功能及性能的测试也越来越重要.IGMP (In ...

  9. PyQt4开发环境搭建指导

    PyQt4开发环境搭建指导 基于Windows 7和Ubuntu16.04 + Python3.x+PyQt4 (因为时间紧张,而且并不熟悉eirc软件,所以没有测试其安装.但是因为是一套所以就放在上 ...

最新文章

  1. 最近学了个elarning,结尾非要让写问卷,写了一下,发出来共勉
  2. logging日志配置,day95下午
  3. Java输出数组中最长递增子序列的代码
  4. 快讯 | 美国投资公司Avenue Capital Group联合创始人Marc Lasry:比特币价格可能达到40,000美元...
  5. 危难时刻,每个人都应该站出来
  6. bzoj2245 [SDOI2011]工作安排 费用流
  7. shell-一些有趣的使用
  8. 投身管理工作(项目经理修炼手册正文的开头)
  9. 百兆1光4电工业级光纤收发器4口百兆光纤收发器工业导轨式发送机导轨式以太网光电转换器
  10. mysql锁定某个库_mysql 表锁定,库锁定
  11. SpringBoot搭建个人博客v1.0 - 博客管理功能实现(七)
  12. 横幅(banner)设计的成功技术
  13. FME基础入门学习(四)
  14. windows内核开发学习笔记十五:IRP结构
  15. matlab基础入门学习(有这一篇就够啦)
  16. 如何合理选择压力传感器
  17. php intval 四舍五入,PHP与JS---取整数方法int,celi,floor,round 收藏
  18. AD18使用的简单介绍,添加库,添加PCB封装库,快速添加引脚,绘制器件
  19. 信息安全政策(等级保护、分级保护)
  20. HLS第十五课(clahe)

热门文章

  1. 拉格朗日(Lagrange)插值算法
  2. Android Gallery2 开发经验整理
  3. 用 Delphi 做个发信机
  4. Google Earth Engine(GEE) ——使用大津法(OTSU)sentinel-1影像进行长时序水域面积计算和动态图加载
  5. 按Home键后重新进入app又重新启动问题解决
  6. ORA-00947: 没有足够的值
  7. Linux下C语言实现TCP Socket编程
  8. 室外智慧消防无线监测终端解决方案
  9. 中小企业的股权激励应该如何设计
  10. matlab如何将三维转为二维_求助,二维图像如何绕轴旋转成为三维图像