IEC-60870-5-104协议报文监控方法
技术领域
本发明涉及智能变电站网络报文分析领域,尤其涉及通信协议的报文分析技术领域,具体是指一种IEC-60870-5-104协议报文监控方法。
背景技术
智能变电站是智能电网的关键环节,通信平台网络化是其重要特征,传统变电站的电缆直连通信方式由交换机和网线替代。站内二次设备之间通过网络报文的方式进行数据交换。随着站内智能设备和设备产生的数据越来越多,二次设备调试和维护越来越困难,智能变电站网络报文分析系统通过镜像抓取并在线分析站内网络报文,实现了对二次设备的实时监控,有效提高了变电站运行效率。
智能变电站内设备类型较多,对通信实时性要求不同,导致站内设备间通过多种协议进行通信。传统网络报文分析仪基本覆盖了站内常见的通信协议,如IEC61850标准中使用的SV-9-2、GOOSE、MMS等。但是,目前对变电站与调度系统之间的通信协议监控的较少。
变电站与调度系统之间一般通过IEC60870-5-104(简称104)协议进行通信,104以TCP/IP系列协议为底层通信协议,技术成熟,使用方便。但是,由于TCP/IP协议延迟不固定等问题,在具体实现上除了控制网络流量之外,还需要对104协议的报文进行监控。
现有技术中,一类通过定时发送测试报文判断链路连接状态,无法对实时报文结构错误进行判断;一类利用端口镜像方法抓取实时报文,对报文结构进行仔细的检查,但是通过报文长度判断报文类型,容易出错,且该方法只能分析报文结构,对于涉及到多条报文的控制过程无法监控;其他方法通过镜像抓取全站报文,对报文结构和各种命令进行了多维的统计,但是计算太过复杂,实现难度较大,实用性较差。
发明内容
为解决以上问题,本发明提供了一种可大大提高通信可靠性的IEC-60870-5-104协议报文监控方法。
为了实现上述目的,本发明的IEC-60870-5-104协议报文监控方法如下:
该IEC-60870-5-104协议报文监控方法,其主要特点是,所述的方法包括以下步骤:
(1)初始化变量;
(2)创建报文解析线程;
(3)创建决策线程。
较佳地,所述的步骤(1)中的初始化为:
将相关变量初始化为零,并清空TCP连接映射表map_link和控制过程映射表map_ctl,其中,所述的相关变量包括报告周期定时器t_rpt、链路通信状态定时器t_commuState、遥测刷新状态定时器t_rfhState[n],其中n表示遥测点数量,主站关闭TCP连接次数n_masterclose、子站关闭TCP连接次数n_slaveclose、遥测数据无效次数n_teleMesInvalid、遥测数据溢出次数n_teleMesOv和遥信数据无效次数n_teleSigInvalid。
更佳地,所述的步骤(2)中的创建报文解析线程为:
(2.1)读取报文,并取出报文中的链路层报文;
(2.2)在链路层对该链路层报文进行分析,获取网络层报文,并判断该网络层报文是否为IP报文,若是,则进入步骤(2.3),否则返回步骤(2.1);
(2.3)在网络层对该IP报文进行分析,获取传输层报文,并判断该传输层报文是否为TCP报文,若是,则进入步骤(2.4),否则返回步骤(2.1);
(2.4)在传输层对该TCP报文进行分析,获取应用层报文,并判断该应用层报文是否为IEC-60870-5-104报文,若是,则进入步骤(2.5),否则返回步骤(2.1);
(2.5)在应用层对该IEC-60870-5-104报文进行分析,并保存分析结果,返回步骤(2.1)。
尤佳地,所述的步骤(2.3)包含以下步骤:
(2.3.1)在网络层对该IP报文进行网络层分析,获取该IP报文的源IP地址和目的IP地址,并解析IP报文获取传输层报文;
(2.3.2)解析出该传输层报文的传输层协议类型,并根据传输层协议类型进一步判断其是否为TCP报文。
尤佳地,所述的步骤(2.4)中包括以下步骤:
(2.4.1)在传输层对该TCP报文进行分析,获取该TCP报文的TCP头信息,并判断是否存在TCP连接,若不存在,则新建TCP连接。
甚佳地,所述的TCP连接中包括以下在新建TCP连接时要进行初始化清零的相关变量:
客户端建立请求变量establish_req、服务端确认变量establish_ack、客户端确认变量establish_ackself、释放请求变量release_req、释放确认变量release_ack、释放再次请求变量release_req2和释放再次确认变量release_ack2、客户端端口号变量port_client、服务端端口号变量port_serv、连接关闭者变量closer;
新建TCP连接时进行初始化的变量还包括超时计时器t_timeout、客户端IP地址ip_client、服务端IP地址ip_serv,其中,对客户端IP地址ip_client和服务端IP地址ip_serv的初始化均为置空,对超时计时器t_timeout的初始化为将当前时间置为超时计时器t_timeout的初始值。
极佳地,所述的客户端建立请求变量establish_req、服务端确认变量establish_ack、客户端确认变量establish_ackself、释放请求变量release_req、释放确认变量release_ack、释放再次请求变量release_req2和释放再次确认变量release_ack2的值与各变量对应的事件是否发生相关,若各变量对应的事件发生,则置1,否则置0,其中,
客户端建立请求变量establish_req对应TCP连接中发生客户端建立请求这一事件;
服务端确认变量establish_ack对应TCP连接中发生服务端确认这一事件;
客户端确认变量establish_ackself对应TCP连接中发生客户端确认这一事件;
释放请求变量release_req对应TCP连接中发生释放请求这一事件;
释放确认变量release_ack对应TCP连接中发生释放确认这一事件;
释放再次请求变量release_req2对应TCP连接中发生连续两次释放请求时发生第二次释放请求这一事件;
释放再次确认变量release_ack2对应TCP连接中发生连续两次释放请求时发生第二释放确认这一事件;
所述的连接关闭者变量closer的值与该TCP连接的连接情况相关,若该TCP连接正常,置0;若该TCP连接由客户端关闭,置1;若该TCP连接由服务端关闭,置2。
绝佳地,所述的步骤(2.4.1)后还包括以下步骤:
(2.4.2)将超时计时器t_timeout更新为当前时间,并根据获取的TCP头信息,判断当前报文是否为TCP连接建立或释放时的特殊报文,若是,则将TCP连接中的相应变量置1后进入步骤(2.4.3),否则直接进入步骤(2.4.3);
(2.4.3)判断当前TCP连接中的释放再次确认变量release_ack2是否被置1,若是,则进入步骤(2.4.4),否则进入步骤(2.4.5);
(2.4.4)判断当前报文源端口号是否等于客户端端口号变量port_client,若是,则将连接关闭者变量closer置1,否则将连接关闭者变量closer置2;
(2.4.5)根据TCP头信息判断该应用层报文是否为IEC-60870-5-104报文,若是,则进入步骤(2.5),否则返回步骤(2.1)。
绝佳地,所述的步骤(2.5)为:
(2.5.1)判断连接关闭者变量closer的值,若为0,进入步骤(2.5.2);若为1,子站关闭TCP连接次数n_slaveclose加1,并返回步骤(2.1),若为2,则主站关闭TCP连接次数n_masterclose加1,返回步骤(2.1);
(2.5.2)检查IEC-60870-5-104报文的应用服务数据单元ASDU类型标识符,若为遥测报文,则进入步骤(2.5.3),否则进入步骤(2.5.5);
(2.5.3)更新遥测点刷新时间t_rfhState[n],其中n表示第n个遥测点,判断数据遥测数据是否为无效,若是,则令遥测数据无效次数n_teleMesInvalid加1;否则进入步骤(2.5.4);
(2.5.4)判断遥测数据是否溢出,若是,则令遥测数据溢出次数n_teleMesOv加1;否则进入步骤(2.5.5);
(2.5.5)检查IEC-60870-5-104报文应用服务数据单元ASDU类型标识符,若为遥信报文,则进入步骤(2.5.6),否则进入步骤(2.5.7);
(2.5.6)判断遥信数据是否无效,若是,则令遥信数据无效次数n_teleSigInvalid加1,否则进入步骤(2.5.7);
(2.5.7)检查IEC-60870-5-104报文应用服务数据单元ASDU类型标识符,若为遥控报文,则进入步骤(2.5.9),否则进入步骤(2.5.8);
(2.5.8)检查IEC-60870-5-104报文应用服务数据单元ASDU类型标识符,若为遥调报文,则进入步骤(2.5.9),否则进入步骤(2.5.11);
(2.5.9)根据IP报文的IP地址判断是否存在控制过程,若存在,则进入(2.5.10),否则在新建控制过程后进入(2.5.10);所述的控制过程中包含主站选择命令变量select_req、子站选择确认命令变量select_ack、主站撤销命令变量cancel_req、子站取消确认变量cancel_ack、主站执行命令变量act_req和子站执行响应变量act_ack,分别代表遥控过程中的实际执行步骤和遥调过程中的实际执行步骤,相应步骤未执行时变量置0,否则置1,控制过程中还包含响应超时计时器t_response和过程超时计时器t_process,新建控制过程时,响应超时计时器t_response和过程超时计时器t_process均设置为当前时间,且该控制过程中的其他变量在新建时均设置为0;
(2.5.10)更新响应超时计时器t_response和过程超时计时器t_process为当前时间,将相应步骤标识变量置1;
(2.5.11)将该IEC-60870-5-104报文与标准报文格式进行对比,若该IEC-60870-5-104报文的报文格式有错,则报文格式错误计数器加1。
超佳地,所述的步骤(3)的创建决策线程为:
(3.1)判断配置的TCP链路是否都存在,若有配置的TCP链路不存在,立即报告链路中断事件,并进入步骤(3.2);否则进入步骤(3.2);
(3.2)检查已存在的所有TCP链路的链路通信状态定时器t_commuState与当前时间之差是否超过预定的第一阈值,若是,则报告通信中断事件,并进入步骤(3.3),否则进入步骤(3.3);
(3.3)对于循环配置的遥测点,检查遥测点刷新时间t_rfhState[n]与当前时间之差是否超过预定的第二阈值,若是,则报告遥测点未刷新事件,并进入步骤(3.4),否则进入步骤(3.4),且遥测点刷新时间t_rfhState[n]中的n表示第n个遥测点;
(3.4)对于所有遥控过程和遥调过程,判断响应超时计时器t_response和当前时间之差是否超过预设的第三阈值,若是,则报告遥控过程或遥调过程失败,并进入步骤(3.5),否则进入步骤(3.5);
(3.5)对于所有遥控过程和遥调过程,判断过程超时计时器t_process和当前时间之差是否超过预设的第四阈值,若是,则报告遥控过程或遥调过程失败,并进入步骤(3.6);否则进入步骤(3.6);
(3.6)判断周期报告计时器是否到期,若是,则进入步骤(3.7)并将周期报告计时器清零,重新计时,否则返回步骤(3.1);
(3.7)计算所有的TCP连接数量并报告;
(3.8)报告报文格式错误计数器示数、主站关闭TCP连接次数n_masterclose、子站关闭TCP连接次数n_slaveclose、遥测数据无效次数n_teleMesInvalid、遥信数据无效次数n_teleSigInvalid和遥测数据溢出次数n_teleMesOv,并在报告后进行清零处理,返回步骤(3.1)。
采用本发明的IEC-60870-5-104协议报文监控方法,可在网络报文分析仪中实现,在不影响原链路的情况下,简单方便的对基于IEC-60870-5-104协议的链路状态进行判断,对实时报文结构进行分析,对遥控和遥信过程进行监控,对严重错误立即报告,定期上送统计信息,实现了IEC-60870-5-104协议的全方位监控,提高了通信可靠性。
附图说明
图1为根据本发明的IEC-60870-5-104协议报文监控方法实施的系统流程图。
图2为根据本发明的IEC-60870-5-104协议报文监控方法实施的报文解析线程。
图3为根据本发明的IEC-60870-5-104协议报文监控方法实施的决策线程。
具体实施方式
为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
请参阅图1,在一种具体实施例中,该IEC-60870-5-104协议报文监控方法具有以下步骤:
(1)将相应变量初始化为零,清空TCP连接映射表map_link和控制过程映射表map_ctl,相应变量包括报告周期定时器t_rpt、链路通信状态定时器t_commuState、遥测刷新状态定时器t_rfhState[n],其中n表示遥测点数量,主站关闭TCP连接次数n_masterclose、子站关闭TCP连接次数n_slaveclose、遥测数据无效次数n_teleMesInvalid、遥测数据溢出次数n_teleMesOv和遥信数据无效次数n_teleSigInvalid;
(2)创建报文解析线程;
(3)创建决策线程。
请参阅图2,第(2)步创建报文解析线程包含以下步骤:
(2.1)读取报文并取出链路层报文;
(2.2)在链路层对链路层报文进行分析,获取网络层报文,并判断网络层报文是否为IP报文,若是,则进入步骤(2.3),否则返回步骤(2.1)进入下一轮;
(2.3)在网络层对该IP报文进行分析,获取传输层报文,并判断该传输层报文是否为TCP报文,若是,则进入步骤(2.4),否则返回步骤(2.1)进入下一轮;
(2.4)进行传输层分析,获取应用层报文,并判断应用层报文是否为104报文,若是,则进入步骤(2.5),否则返回步骤(2.1)进入下一轮;
(2.5)进行应用层分析,保存分析结果,返回步骤(2.1)进入下一轮。
其中第(2.3)步包含以下步骤:
(2.3.1)在网络层对该IP报文进行网络层分析,获取该IP报文的源IP地址和目的IP地址,并解析IP报文获取传输层报文;
(2.3.2)解析出该传输层报文的传输层协议类型,并根据传输层协议类型进一步判断其是否为TCP报文。
实际上,后续对报文类型的判断,都是基于对该层协议类型的判断,对报文的首部进行解析,获取相应的层级协议类型。
其中第(2.4)步包含以下步骤:
(2.4.1)解析出TCP报文的TCP头信息,判断TCP连接是否已经存在,若是,则进入(2.4.2),否则先新建一个TCP连接再进入(2.4.2),每条TCP连接包括客户端建立请求变量establish_req,服务端确认变量establish_ack,客户端确认变量establish_ackself,释放请求变量release_req,释放确认变量release_ack,释放再次请求变量release_req2,释放再次确认变量release_ack2,上述7个变量分别代表TCP连接建立和释放时的实际步骤,取值为0表示该步骤未完成,取值为1表示该步骤已完成,新建时上述7个变量均为0,每条TCP连接还包含超时计时器t_timeout,在新建TCP连接时被初始化为当前时间,客户端IP地址ip_client,初始化为空,服务端IP地址ip_serv,初始化为空,客户端端口号变量port_client,初始为0,服务端端口号变量port_serv,初始为0,以及连接关闭者closer,取0表示连接正常没有关闭,取1表示由客户端关闭,取2表示由服务端关闭;
(2.4.2)将超时计时器t_timeout更新为当前时间,并根据获取的TCP头信息,判断当前报文是否为TCP连接建立或释放时的特殊报文,若是,则将TCP连接中的相应变量置1后进入步骤(2.4.3),该种特殊报文对应的相应变量包括客户端建立请求变量establish_req和释放请求变量release_req等;否则直接进入步骤(2.4.3);
(2.4.3)若当前TCP连接中的释放再次确认变量release_ack2被置1,进入(2.4.4),否则进入(2.4.5);
(2.4.4)若当前报文源端口号等于客户端端口号变量port_client,将连接关闭者变量closer置1,否则将连接关闭者变量closer置2;
(2.4.5)根据TCP头信息判断应用层报文是否为104报文,若是则继续,否则返回步骤(2.1)进入下一轮。
所述的步骤(2.5)包含以下步骤:
(2.5.1)根据传输层分析结果,若连接关闭者变量closer为0,进入(2.5.2),若连接关闭者变量closer为1,子站关闭TCP连接次数n_slaveclose加1,返回步骤(2.1)进入下一轮,若连接关闭者变量closer为2,主站关闭TCP连接次数n_masterclose加1,返回步骤(2.1)进入下一轮;
(2.5.2)检查104报文应用服务数据单元ASDU类型标识符,若为遥测报文进入(2.5.3),否则继进入(2.5.5);
(2.5.3)更新遥测点刷新时间t_rfhState[n],其中n表示第n个遥测点,判断数据遥测数据是否为无效,若是,则令遥测数据无效次数n_teleMesInvalid加1,否则继续(2.5.4);
(2.5.4)判断遥测数据是否溢出,是则令遥测数据溢出次数n_teleMesOv加1,否则继续(2.5.5);
(2.5.5)检查104报文应用服务数据单元ASDU类型标识符,若为遥信报文,则进入(2.5.6),否则进入(2.5.7);
(2.5.6)判断遥信数据是否无效,是则令遥信数据无效次数n_teleSigInvalid加1,否则继续下一步;
(2.5.7)检查104报文应用服务数据单元ASDU类型标识符,若为遥控报文,则进入(2.5.9),否则继续(2.5.8);
(2.5.8)检查104报文应用服务数据单元ASDU类型标识符,若为遥调报文,则进入(2.5.9),否则进入(2.5.11);
(2.5.9)根据IP地址判断控制过程是否存在,是则进入(2.5.10),否则新建控制过程后进入(2.5.10),控制过程包含主站选择命令变量select_req,子站选择确认命令变量select_ack,主站撤销命令变量cancel_req,子站取消确认变量cancel_ack,主站执行命令变量act_req,子站执行响应变量act_ack,上述变量分别代表遥控和遥调命令实际执行步骤,且
其中主站选择命令变量select_req对应遥控和遥调命令实际执行步骤中的主站选择命令事件,子站选择确认命令变量select_ack对应遥控和遥调命令实际执行步骤中的子站选择确认命令事件;主站撤销命令变量cancel_req对应遥控和遥调命令实际执行步骤中的主站撤销命令事件;子站取消确认变量cancel_ack对应遥控和遥调命令实际执行步骤中的子站取消确认事件;主站执行命令变量act_req对应遥控和遥调命令实际执行步骤中的主站执行命令事件;子站执行响应变量act_ack对应遥控和遥调命令实际执行步骤中的子站执行响应事件;上述变量取值为0表示相应步骤未执行,取值为1表示相应步骤已执行,控制过程还包含响应超时计时器t_response和过程超时计时器t_process,新建时,上述两个计时器设置为当前时间,其他变量均为0;
(2.5.10)更新响应超时计时器t_response和过程超时计时器t_process为当前时间,将相应步骤标识变量置1;
(2.5.11)与标准报文格式进行对比,若该104报文的报文格式有错,则报文格式错误计数器加1。
第(3)步包含以下步骤:
(3.1)观察系统保存的TCP链路,判断配置的TCP链路是否都存在,若有配置的链路不存在,立即报告链路中断事件,并进入下一步;否则继续进入下一步;
(3.2)对于已存在的所有TCP链路,检查链路通信状态定时器t_commuState与当前时间之差是否超过预定的阈值,是则立即报告通信中断事件,并进入下一步,否则继续进入下一步;
(3.3)循环配置的遥测点,检查遥测点刷新时间t_rfhState[n](其中n表示第n个遥测点)与当前时间之差是否超过预定的阈值,是则立即报告遥测点未刷新事件,并进入下一步,否则继续进入下一步;
(3.4)对于所有遥控和遥调过程,判断响应超时计时器t_response和当前时间之差是否超过阈值,是则立即报告遥控过程或遥调过程失败,并进入下一步,否则进入(3.5);
(3.5)对于所有遥控和遥调过程,判断过程超时计时器t_process和当前时间之差是否超过阈值,是则立即报告遥控过程或遥调过程失败,并进入下一步,否则进入(3.6);
(3.6)判断周期报告计时器t_rpt是否到期,是则进入下一步并将计时器清零重新计时,否则返回步骤(3.1)进入下一轮;
(3.7)计算所有的TCP连接数量并报告;
在一种具体的实施例中,该方法中各种数据的上报具有一定顺序,请参阅图3,在该具体实施例中,各种数据以以下顺序进行上报:
(3.8)报告报文结构错误次数,并清零次数;
(3.9)报告主站关闭TCP连接次数,并清零次数;
(3.10)报告子站关闭TCP连接次数,并清零次数;
(3.11)报告遥测数据无效次数,并清零次数;
(3.12)报告遥信数据无效次数,并清零次数;
(3.13)报告遥测数据溢出次数,并清零次数;
(3.14)返回步骤(3.1)进入下一轮。
采用本发明的IEC-60870-5-104协议报文监控方法,可在网络报文分析仪中实现,在不影响原链路的情况下,简单方便的对基于IEC-60870-5-104协议的链路状态进行判断,对实时报文结构进行分析,对遥控和遥信过程进行监控,对严重错误立即报告,定期上送统计信息,实现了IEC-60870-5-104协议的全方位监控,提高了通信可靠性。
在说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。