IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析

2、通过ss命令发现确有链接端口变化,与设备约一天一次的重连,通过抓包(tcpdump -vvv -nn port 1001 -w 0926.cap)分析得以下现象

2.1、异常情况时未对设备的I帧均匀的回S帧进行确认,正常情况时均匀的回S帧进行确认

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第1张图片

2.2、长达23秒的缓存区满

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第2张图片

2.3、发送报文中接收帧序列号错误

结论:该IEC104设备未关注暂无影响

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第3张图片

    1. 不明原因链接断开

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第4张图片

2.5、链接短时不稳定有多次各种原因的关闭与重连颠簸,完全恢复正常时间长

3、根据以上现象分析代码并增加日志,cs104_connection.c文件中关键函数static void* handleConnection(void* parameter)、static bool handleTimeouts(CS104_Connection self)

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第5张图片

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第6张图片

结合抓包得以下结论:

a异常情况时handleConnection线程未执行到(怀疑在进行链接异常关闭流程或Semaphore_wait卡住)receiveMessage,未及时从系统TCP缓存区中读取数据会导致2.2;

b异常情况时handleConnection线程未执行到(怀疑在进行链接异常关闭流程或Semaphore_wait卡住)confirmOutstandingMessages,未及时回S帧进行确认会导致2.1;

c根据抓包及日志I message timeout,判定104设备在变化上报遥测数据过程中,偶发不会或不能及时对worker发送的遥脉总召唤C_CI_NA_1的I帧进行I帧响应、S帧确认,会导致2.4;

d根据c结论将以下代码屏蔽删除,即不对104设备的S帧做超时判断,从而避免链接断开,恢复时间长影响数据采集。按协议标准规定应对S帧做超时判断,这里删除该逻辑对其它104协议设备应无影响(可能有报文时序不匹配的风险),具体待观察。

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第7张图片

4、遗留问题

a本次修改后链接稳定性待观察;

b本次修改对其它104协议设备的影响待观察;

c以上有一些是怀疑与猜测故需对60870库、IEC104协议通信机制、worker代码细节进一步了解;

d反控反馈逻辑错误,不应使用send成功,而应使用send后的响应报文判断(asduhandle里处理);

f本协议关于控制规定有预发、执行、撤销三步,此处一步写入是否能兼容存疑。

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析_第8张图片

你可能感兴趣的:(java,开发语言)