资源描述
IEC 61850数据包分析IEC 61850数据包分析第 44 页 共 44 页前 言31. 工具简介41.1 抓包工具41.2 抓包方法41.3 分析举例41.4 启动步骤62. GOOSE报文分析93. 9-2采样报文分析104. MMS报文分析124.1.初始化124.2.后台读装置模型、以及装置的回答134.3.报告控制块使能144.4.监控后台或主站向装置写参数154.5.测试心跳连接的报文154.6.总召唤164.7.装置上送总召的遥测数据174.8.装置上送总召的遥信数据184.9.变位遥信上送:194.10.遥测报文204.11.遥脉报文204.12.保护动作信号224.13.读波形文件列表234.14.调定值254.15.修改定值284.16.遥控压板354.17.遥控开关38附录1:IEC61850的GOOSE报文的帧格式:41附录2:IEDsout使用注意事项44附录3:触发选项的规定44前 言随着IEC 61850变电站的增多,现场调试人员会越来越感到调试工具的匮乏,往往出现问题不能从根源上找原因,分析定位也无从下手。本文旨在采用mms ethereal抓包工具,从报文层面分析各种IEC 61850数据包,帮助大家解决一些实际问题。有什么好的建议和想法请发邮件到duanyunxin。段运鑫2011年6月1. 工具简介1.1 抓包工具常用的抓包工具有Windows下的mms-ethereal,WireShark和Solaris下的snoop命令。mms-ethereal可以自动解释mms报文,适合进行应用层报文的分析。WireShark是ethereal的替代版本,界面更加友好,但标准版本中没有对mms报文分析的支持,不过可以把抓到的数据包用mms-ethereal打开;snoop主要是用来抓包,没有图形化的分析界面,snoop抓取的文件可以用WireShark打开辅助分析;1.2 抓包方法对于广播和组播报文如装置的UDP心跳报文,可以用笔记本连接到交换机上任意端口抓取。对于后台与装置之间的TCP通讯,有两种方法。一是直接在后台机上安装软件来抓包,二是利用HUB连接后台与装置,将笔记本直接接到HUB上抓包。(注意一定要使用HUB,HUB是透明转发,交换机会按MAC过滤,如果现场只有交换机,则需要进交换机配置界面的端口镜像Port Mirror)WireShark和mms-ethereal均是图形化的界面,使用起来比较简单,注意在interface选择正确的网卡(MS lookback或wireless字样的都不是)即可。snoop的使用方法可以用man snoop取得,最基本的命令为snoop -d bge0 -o xx.snoop1.3 分析举例均以mms-ethereal为例,WireShark与之类似。1.3.1 设置抓包过滤条件在后台上抓包时,数据量比较大,文件一大之后,解析起来速度很慢,如果单纯为了分析应用层报文,可在抓包的时候设置过滤条件。如果为了分析网络通断问题,一般不设置过滤条件,便于全面了解网络状况。抓包过滤条件在Capture-Options-Capture Filter里设置,点Capture Filter会有很多现成的例子,下面列举几个最常用的。tcp 只抓取tcp报文udp 只抓取udp报文host 198.120.0.100 只抓取198.120.0.100的报文ether host 00:08:15:00:08:15 只抓取指定MAC地址的报文1.3.2 设置显示过滤条件打开一个抓包文件后,可以在工具栏上的filter栏设置显示过滤条件,这里的语法与Capture Filter有点差别,举例如下。tcp 只抓取tcp报文udp 只抓取udp报文ip.addr=198.120.0.100 只抓取198.120.0.100的报文eth.addr=00:08:15:00:08:15 只抓取指定MAC地址的报文还可以在报文上点击右键选择apply as filter等创建一个过滤条件,比较方便。1.3.3 判别网络状况输入显示过滤条件tcp.analysis.flags,可以显示丢失、重发等异常情况相关的TCP报文,此类报文的出现频率可以作为评估网络状况的一个标尺。常见的异常类型有以下几个TCP Retransmission由于没有及时收到ACK报文而产生的重传报文TCP Dup ACK xxx重复的ACK报文TCP Previous segment lost前一帧报文丢失TCP Out-Of-OrderTCP的帧顺序错误偶尔出现属于正常现象,完全不出现说明网络状态上佳。(1) 监视TCP连接建立与中断输入显示过滤条件,tcp.flags.syn=1|tcp.flags.fin=1| tcp.flags.reset=1SYN是TCP建立的第一步,FIN是TCP连接正常关断的标志,RST是TCP连接强制关断的标志(2) 统计心跳报文有无丢失在statistics-conversations里选择UDP,可以看到所有装置的UDP报文统计。一般情况下,相同型号装置的UDP报文的数量应该相等,最多相差1到2个,如果个别装置数量异常,则可能是有心跳报文丢失,可以以该装置的地址为过滤条件进行进一步查找。1.4 启动步骤1. 点击启动mms-ethereal点击“capture”(新版需要再选择相应的网卡右边的prepare):滚屏显示实时更新数据2. 打开抓报工具,点击左侧第二个按钮开始设置:3. 选择本计算机网卡,地址就是本地连接里面设置的IP地址:4. 设置要监视的装置的IP地址:格式为host 198.120.0.72。5. 点击browse按钮设置存储文件名及路径(可不选,选上自动存为文件):设置长期抓包存储,选中,按抓包大小存贮(m代表MB,可以是KB或者GB);按时间存储如下图:6. 把这个选项勾上就可以实时显示数据,便于查找问题。7.点击“start”按钮开始抓包。实时抓包的时候不能保存,只有停止抓包了才能保存所抓的包,点击“File”下的“save”或者“save as”即可。将保存的报文拖到程序主界面窗口即可自动打开。Unix 后台可以使用snoop命令来抓包,常用的命令如下:snoop -d bge0 -o xx.snoop-d(接受包的设备名(网络接口));bge0 网卡名称-A网;-o 全数据包;xx.snoop 文件名。这是抓和网卡beg0通讯的所有的数据包。snoop o xx.snoop scada1(198.120.0.181) 198.120.xx.xx-o 全数据包;xx.snoop 文件名; scada1(198.120.0.181) 后台机的机器名或者IP;198.120.xx.xx 装置的IP。此命令是抓后台机scada1和装置198.120.xx.xx之间的所有的数据包。“Ctrl”+“c”即可停止抓包,这个抓包的实时性差一点,信号上来后,在等一分钟在停止数据包。因为报分分析工具的限制,有的时候 snoop抓的数据包在打开的时候报单个报文过大,导致整个报无法分析。所以在抓包的时候有条件还是使用HUB抓包比较好。下面针对不同类型的报文进行分析:2. GOOSE报文分析destination这两个MAC地址都是IL2215B的MAC地址,source是实际网卡的MAC地址,就是大家平时所说的MAC地址,destination是组播地址,在SCD中填写,下面以一组报文进行分析(过滤里填“iecgoose”注意全部要小写):时间品质,详见附录1的“时间标签”这一节数据集中有22个数据与SCD中GSEControl下的值相同GOOSE程序处理后打的时标,实际意义不大AppID名字即装置的检修压板的位置即SqNum即StNumDatSet名字Appid的十进制表达GoCBRef名字我们实际分析GOOSE报文的时候,一般只需要分析IEC 61850 GOOSE下面的报文即可。StNum:如果状态没有变化,每一帧报文的值相同,如果状态变化了,则值加1.SqNum:如果状态没有变化,每一帧报文的值加1,如果状态变化了,则值清零。在数据集中的每一个值,他反应的是最后一次变位的值,也就是当前的值,下面的SOE时间表示最后一次状态变位发生的时间,是格林威治时间,即比当前时间晚了8个小时。时间品质反应最后一次状态变位发生时候的时间品质,而不是当前状态的时间品质。报文中数据集与装置的GOOSE文件中的数据集一致,即顺序也一致,要想看某个值是否变位以及什么时候变位,直接在GOOSE的数据集中找到这个点,然后到报文中数数,数到这个点既可以看他的值。或者在SCD的数据集中找这个点在数据集中的位置也可以。具体格式见附录13. 9-2采样报文分析采样数据,大小显示不出来GPS同步标准采样序号,要连续AppID名字一包数据含几个ASDU,注意发送接收要保持一致Appid的十六进制表达过滤里填“iecsmv”注意全部要小写mms-ethereal显示内容不是很全,但大致可以看出主要信息。这里需要注意采样序号要连续,如果80点采样则3999就要翻转为0;同步标志应该为true。采样数据大小新版的WireShark可以看到采样值的大小,不过好像跟实际大小不对应。WireShark可以解析每个点的品质,应该是品质位均为0才对。如果有非0的,则互感器输出可能会有问题。以上是静态的分析报文是否正确,适合检查配置错误问题。还可以用“IEC61850报文监控分析工具”动态分析和记录日志,便于长期观察和分析。品质、同步等日志有效值、品质4. MMS报文分析过滤里填“mms”注意全部要小写.4.1. 初始化后台发初始化请求:装置的应答:装置支持的服务(service)列表,在ICD的一致性声明中定义4.2. 后台读装置模型、以及装置的回答装置响应:GetNameList其实是后台从装置内部调取装置模型,比直接从后台SCD读取更可靠。仿真主站连接的时候,把acsicfg.xml里false改为true就自动从IED调取装置模型。4.3. 报告控制块使能将报告控制块使能置为假:装置回答写成功如果装置回答失败,如图,则需要着重检查ICD文件是否有错。这个返回结果有问题,报类型不一致。4.4. 监控后台或主站向装置写参数(写触发选项前必须要把RptEna置为false,即步骤4)包括:前置写完参数将前置使能4.5. 测试心跳连接的报文通过每10秒读取health状态,南瑞后台需要在ICD的实例化里把health置为1。4.6. 总召唤先写对应报告控制块GI(General Interrogation)的值。成功后装置会将GI的值置为false,并上送整个报告控制块的全部数据,触发选项GI为1。URCB为不带缓存的数据(一般为遥测),BRCB为带缓存的数据(一般为遥信)。主站写GI装置回答写成功,(注意invokeID对应,其他read、write报文也一样要对应)。装置随后自动上送总召唤的数据,触发选项是总召唤。(其他地方的分析下边讲)4.7. 装置上送总召的遥测数据4.8. 装置上送总召的遥信数据这里有可能是数据集的子集,不送的点置为0,紧接着下边就只上送相应序号置为1的数据的值。4.9. 变位遥信第12位为test4.10. 遥测报文数据集的第四个元素的值数据集名称这里是遥测数据集CMPYC的子集,不送的点置为0,紧接着下边就只上送相应序号置为1的数据的值。上送原因为dchg4.11. 遥脉报文遥脉一般是周期上送的,遥脉的数据集,一般不用。4.12. 保护动作信号故障报告A相接地4.13. 读波形文件列表15. 四方的保护装置在读波形的时候报错。四方的保护波形文件目录是/COMTRADE/。深南瑞的是/D/COMTRADE/。所以装置回报错,这个要在通讯参数里面配置一下。4.14. 调定值 首先,主站读LLN0$SP$SGCB的值其实目的就是调取当前定值区,此时装置已经开始调定值的各项操作了。 装置响应SGCB它的结构是NumOfSG,ActSG,EditSG,CnfEdit;分别表示总定值区个数,当前读取定值区,当前修改定值区,确认修改使能 主站读取数据集每个定值的值,可以一起读整个数据集的值,也可以一个一个读。 装置响应数据需要注意:数据集里的定值顺序和个数必须跟装置上送的实际定值顺序和个数保持一致。4.15. 修改定值61850规约上规定的如下:使用的名词:SelectActiveSG(选择激活定值组)SelectEditSG(选择编辑定值组)SetSGValuess(设置定值组值)ConfirmEditSGValues(确认编辑定值组值)GetSGValues (读定值组值)GetSGCBValues(读定值组控制块值)推荐改定值过程:1)客户端发出选择编辑组SelectEditSG请求,服务器响应;2)客户读取编辑组当前定值,服务器响应;3)客户写服务器编辑组定值,服务器响应;4)客户读取编辑组当前定值(用于验证写是否成功),服务器响应;5)客户确认定值修改ConfirmEditSGValues,服务器响应,新定值有效;改激活定值组号,可直接由写服务完成。仿真主站修改定值的步骤:最后确认修改再修改定值大小,注意填完后回车再读定值先读定值控制块这是南瑞后台实际修改C系列装置定值的步骤:1. 读定值SGCB2. 装置回答定值SGCB32,2,0,false3. 读定值数据集。4. 装置回答定值大小。5. 把LLN0$SP$SGCB$EditSG置为当前区(2)6. 装置回答写成功。7. 写定值数据集。7. 装置回答写成功。8. 把LLN0$SP$SGCB$CnfEdit置为true。9. 装置回答写成功。此时已经完成。10. 此时如果读定值SGCB,发现是32,2,2,false我对修改定值步骤的分析:(以许继后台为例,一个一个修改)原始状态: NumOfSG,ActSG,EditSG,CnfEdit = 1,1,0,false 分别是总定值区个数,当前读取定值区,当前修改定值区,确认修改使能1. 把LLN0$SP$SGCB$EditSG置为1, 此时为1,1,1,false2. 写需要修改的第一个定值, 此时为1,1,1,false3. 把LLN0$SP$SGCB$CnfEdit置为true, 此时为1,1,0,true此时若读定值SGCB不会变化,为1,1,0,true接着修改下一个定值:4. 把LLN0$SP$SGCB$EditSG置为1, 此时为1,1,1,false5. 写需要修改的定值, 此时为1,1,1,false6. 把LLN0$SP$SGCB$CnfEdit置为true, 此时为1,1,0,true(在这时如果把LLN0$SP$SGCB$EditSG置为0,可以使CnfEdit变为false)4.16. 遥控压板1. 写RYBGGIO01$CO$SPCS8$Oper的值,投为true,退为false。注意:我们的保护老版本压板遥控是直控的,所以只用写oper值。2. 装置回答写值成功,上送变位遥信。退压板遥控成功怎么知道其他数据块的含义?报文里很多数据项,可以在“仿真主站”里打开找到原型。比如上边压板遥控的数据,对应关系是这样的:这样我们就可以看懂每一项数据大概代表什么意思。遥测、遥信、遥脉、定值等各种报文也可以用这种方法来找到对应关系。(不过看多了,就不用一项一项去查了)4.17. 遥控开关开关遥控一般是选控。 首先,主站写CSWI$CO$POS$SBOW的值,合为true,分为false。这个跟远方就地有关,如果填错,就地也可以出口 装置报写成功(报文就不贴了) 主站写CSWI$CO$POS$Oper的值,合为true,分为false。 装置报report:这个返回结果是对的这个返回结果有问题,LastAppError=11 装置报写成功(报文就不贴了) 装置上送变位遥信。附录1:IEC61850的GOOSE报文的帧格式:87654321HeaderMACMAC目的地址(6字节)=0x010CCD0100000x010CCD0101FFMAC源地址(6字节)PrioritytaggedTPID(2字节类型)= 0x8100TCI(2字节)=0x4000HeaderEthertypeEthertype(2字节)=0x88B8APPID (2字节)=0x00000x3FFFLength(2字节)= 8+mReserved 1(2字节)=0x0000Reserved 2(2字节)=0x0000ASDU(m字节1480)MAC填充(Pad bytes if necessary)(若干字节)MAC计算检验CRC(4字节)ASDU格式(开关量):说 明报文内容gocbRef字符串类型=80H长度65gocbRef字符串有效时间t,INT32U,单位:毫秒类型=81H长度4tDatSet名字符串类型=82H长度65DatSet名字符串goID字符串类型=83H长度65goID字符串StNum加1时的时间,精确到毫秒类型=84H长度=8t变化序号,INT32U,每次报文中的数据有变位时,此值加1,初始值=1,值0保留类型=85H长度4StNum报文(递增)顺序号,INT32U,初始值=1,值0保留,StNum变化时此值复归到1。类型=86H长度4SqNum测试标志test,BOOLEAN类型=87H长度=1Test配置版本号(配置次数),INT32U类型=88H长度4confRev未配置好标志,BOOLEAN类型=89H长度=1ndsComGoose数据总个数,INT32U类型=8aH长度4总个数GOOSE数据的报头类型=abH长度GOOSE数据1C1/KZGGIO1.DPCSO.stVal 类型=83H长度=1stValC1/KZGGIO1.DPCSO.q 类型=84H长度=303Hq(2字节)C1/KZGGIO1.DPCSO.t 类型=91H长度=8tGOOSE数据2C1/KZGGIO2.DPCSO.stVal 类型=83H长度=1stValC1/KZGGIO2.DPCSO.q 类型=84H长度=303Hq(2字节)C1/KZGGIO2.DPCSO.t 类型=91H长度=8t。q属性为1字节(bit.116),bit.113分别表示如下:bit.12bit.3bit.4bit.5bit.6bit.70=正常,1=无效,2=保留,3=有问题溢出出界错误引用抖动失败bit.8bit.9bit.10bit.11bit.12bit.13旧数据不一致不准确取代测试闭锁bit.1416不用。附录2:IEDsout使用注意事项要想iedscout连接成功,需要在ip字段里的OSI-AP-Title如下配置: 1,1,9999,1,1 /许继一般是1 3 9999 33没逗号,必须改成上面的,否则连不上。 开头的version和revision必须删掉。在字段里不能有version和revision出现。在configuration里把ip配好。includeall不能有,必须删掉。gi=false不能有,必须删掉。如果是单实例,把报告控制块部分支持的主站个数改为0即可。南瑞后台调定值需要在数据集里选DA。附录3:触发选项的规定触发选项:遥信和压板 不选周期保护事件 不选周期和总召遥测 全选以上:includeall都不选dchg和dupd区别:前者是数值变化,后者是时标变化即AD采样刷新了但是值不一定变。
展开阅读全文