基金项目:中国地震局监测司“三结合”课题(3JH-202402059)
作者简介:吕帅(1991-),男,在读硕士,工程师,主要从事地震监测和地震信息化工作。E-mail:lv_303494@163.com
1.云南省地震局,昆明 650224;2.中国地质大学(北京)信息工程学院,北京 100083
1.Yunnan Earthquake Agency, Kunming 650224, China;2.School of Information Engineering , China University of Geosciences , Beijing 100083, China
Transmission protocol;Seedlink;Seismic data;RingServer;NetSeis/IP
DOI: 10.13512/j.hndz.2024.01.13
得益于现代网络技术的发展,人们可以将远在百里之外地震计记录的地面运动数据以毫秒级的延迟传回至地震数据中心进行处理。Victor Sar⁃dina等人经过统计得出:太平洋海啸预警中心(The Pacific Tsunami Warning Center, PTWC)对世界各地地震的平均响应时间已下降至6分钟,全球响应时间超过8分钟的区域已经消失[1],布设更为密集的预警台站的仪器触发响应时间更是降低至2 s左右[2]。虽然基于TCP/IP协议的现行网络体系拥有较为完善的传输机制,但地震数据在采集器与流服务器之间、流服务器与流服务器之间传输时,仍有一些问题需要解决。例如:数据包大小多少合适?数据包在传输中错序到达如何解决?传输过程网络中断又恢复如何保证数据的连续性?以上问题需要通信双方按照协议来约定执行。因此,地震数据传输协议在保障地震数据的可靠性上扮演着十分重要的角色。
国内外基于TCP协议Socket请求响应式的地震实时数据传输协议有LISS(Live Internet Seismic Server)[3-4]、 SeedLink[5]、 NetSeis/IP[6]和Http[7-8]等, LISS协议已基本淘汰,NetSeis/IP协议和Http是目前国内地震速报预警系统Jopens流服务器之间数据传递的主要协议,SeedLink协议则是目前全球通用的事实标准[9],在数据汇聚、数据分发和数据共享等方面应用较广。国际通用的地震数据采集器厂商Reftek和Nanometrics等均支持SeedLink协议;地震学联合研究机构(Incorporated Research Institu⁃tions for Seismology,IRIS)和德国地球科学研究中心(GeoForschungsZentrum, GFZ)将接入的地震数据汇集至服务器,采用SeedLink协议提供近实时的数据共享服务。地震监测系统(Earthquake Monitor⁃ing System,EMS)或研究人员编写的代码通过访问其SeedLink服务器IP地址和端口,可获取相应地震台站数据流。当前两个国际主流的开源免费EMS——Earthworm[10]和Seiscomp[5]均支持SeedLink协议。 Earthworm系统多用于北美区域台网[11-13],软件核心组件及衍生产品集成了完善的算法,拥有活跃的社区用户。Seiscomp系统则多用于欧洲综合数据归档中心(European Integrated Data Archive, EIDA)、欧洲地震台网和数据中心[14-15],2020年4月Seiscomp系统更新至第四版,该版本对核心组件进行了重大升级,提供了全面的文档并取消了使用许可认证,以此来吸引更多的开发人员贡献代码和插件[9]。由此可见,SeedLink协议在国际地震数据传递过程中均扮演重要角色。图1为EIDA位于挪威的UiB-NORSAR节点数据汇聚转发流程,展示了从不同渠道获取的地震数据通过SeedLink协议汇总到SeisComp系统归档,再通过FDSN和SeedLink接口共享出去。
图1 EIDA位于挪威的UiB-NORSAR节点数据汇聚转发流程图[14] Fig.1 Flow chart of data aggregation and forwarding of EIDA's UiB-NORSAR node in Norway[14]
由于NetSeis/IP和SeedLink协议在请求指令、传输端口和数据包头等方面存在不同,国内地震数据不能直接接入Earthworm和SeedLink等系统进行处理。为解决国际开源EMS系统本地化应用以及远程数据在线接收、传输和共享等问题,本文从数据传输格式入手,介绍NetSeis/IP和SeedLink协议的数据接收方法,提出了一种快速搭建Seed⁃Link服务器的方法,一方面有助于解决开源EMS系统本地化的数据接入问题,另一方面为国内地震数据的在线传输和共享提供参考。
SEED作为一种国际数字地震数据交换标准,广泛应用于国内外地震观测台网数据归档中。地震数据通过压缩算法,结合数据文件的索引及台网、台站控制头段等内容,形成相应的台网台站卷。SEED数据往往过大,频繁的拆分及组装不利于网络实时传输,因此产生了仅存储数据部分的MiniSeed数据格式文件。 MiniSeed数据由固定头段,一个或两个字块序列组成的可变头段和数据区三部分组成,不包含台站控制头段和仪器响应等信息,每个数据包512字节。数据区包含一台仪器的某个通道在一定时间段内的原始时间序列数据,数据内容采用Steim1或Steim2压缩算法进行压缩[16],整个数据区长度448字节。MiniSeed数据格式具有数据传输率高、易于组装等特点,适合现代网络实时传送,被广泛应用到地震数据传输和交换领域,目前国内外地震数据实时传输协议传输的都是MiniSeed格式的数据包。图2展示了MiniSeed数据包格式。
图2 512字节MiniSeed包数据格式示意图[17] Fig.2 Schematic of data format of the 512-byte MiniSeed packet[17]
美国阿尔伯克基地震实验室(Albuquerque Seis⁃mological Laboratory,ASL)于1990年开发了LISS[4]协议,采用Internet技术接收中国数字地震台网(China Digital Seismic Network, CDSN)台站数据,首次实现了地震波形数据在Internet上共享。协议基于TCP/IP的Socket连接实现,在OSI参考模型传输层基础上完成数据传输,继承了下层传输结构优点。由于TCP是面向连接的可靠传输,LISS协议具有完善的流量控制和差错控制,可以改善实时地震数据传输的可靠性。LISS系统采用互联网信道为介质进行传输,用户可通过互联网有选择地获取地震数据[18]。由于LISS协议的客户端与服务器端连接后,没有更多的交互,虽然使用方便但功能也受限,因此,虽然目前大部分地震仪器和速报软件还支持LISS协议的对接,但实际使用程度不及SeedLink等协议。
Http协议是万维网之父蒂姆伯纳斯李(Tim Ber⁃ners-Lee)[8]于1990年提出的一种广泛应用于Web服务的网络通信协议,在RFC7230中定义为:一种无状态的、应用层的、以请求/应答方式运行的协议,使用可扩展的语义和自描述消息格式,与基本网络的超文本信息系统灵活的互动。Http定义了九种请求方法,分别是GET、 POST、 HEAD、PUT、 DELETE、 OPTIONS、 TRACE和CONNECT等,每种请求方法规定了客户和服务器之间不同的信息交换方式,最常用的GET和POST方法[7]。在Jopens 6.0系统中采用Http协议传输256字节的MiniSeed数据,每0.5秒打一个包,缺值补0,每秒传输2个包,以满足国家地震烈度速报预警系统地震数据快速传输需求。
NetSeis/IP协议[6]全名中国数字台网网络化通讯协议,由黄文辉于2003年左右设计开发,广泛应用在Jopens数字化地震台网系统5.2版本中。该协议类似LISS协议,但在对大型系统的适应能力方面较LISS协议有许多改善,较好地满足国内地震监测系统使用。NetSeis/IP协议同样基于TCP/IP模型实现,拥有TCP的差错控制、流量控制等功能,有利于数据可靠传输。NetSeis/IP协议采用身份认证及数据端口协商等机制,具有一定的安全性[18]。协议的交互方式类似FTP协议,控制命令与数据传输使用不同端口。默认在5000端口传输控制命令,验证正确后服务器会协商分配数据传输端口。
NetSeis/IP协议数据请求流程如图3(a)所示。首先,客户端向服务器传输控制端口发起连接请求,用户名密码验证成功后,建立起传输指令连接。然后,客户端发送PASV RT命令,获取服务器端分配的数据传输端口号,返回值是六个数组成的字符串,用于计算服务器指定的数据传输接口。前四个数值是数据传输服务器的IP地址,后两个数值用于计算数据传输端口,端口计算公式:
P=α×256 + β(1 )
式中P为数据传输端口,α是服务器返回的第五个字段,β是服务器返回的第六个字段。
例如:服务器端响应字符串为“192, 168, 1,100,35,40”,则数据传输服务器接口的IP地址为192.168.1.100,端口号为35×256+40=9000。客户端需再启动一个Socket连接至192.168.1.100服务器的9000端口,开启数据传输通道。最后,客户端在原传输控制指令连接发送STOR+台站列表,即可从刚建立的数据通道获取所需台站512字节的MiniSeed实时数据流。
Seedlink协议[5]是GFZ为地震速报预警系统Seiscomp开发的一套用于实时地震数据分发的传输协议,同样基于TCP/IP协议,拥有TCP的差错控制、流量控制等功能,使用MiniSeed数据格式进行传输,默认端口18000。Seedlink协议自发布以后被广泛采用,现已成为IRIS、EIDA、GFZ等众多地震研究机构和地震台网的标准通用协议。Seis⁃Comp3系统[5]、Earthworm系统[10]和Antelope系统[19]等众多知名的地震速报预警软件以及Reftek和Nanometrics等品牌的地震数据采集器均支持Seed⁃link数据传输协议。Python地震学工具包ObsPy也集成了SeedLink客户端模块,用户可以通过两行简单的代码调取SeedLink服务器端实时数据。
SeedLink的数据请求流程如图3(b)所示。首先,客户端通过Scoket向SeedLink服务器端口(默认18000)发起连接请求,待TCP握手成功后,客户端发送HELLO字段验证连接是否建立,如果服务器返回SeedLink版本号及台网名称,表明双方连接已建立。然后,客户端发送SELECT、STATION指令来筛选和订阅台站,服务器正常接收指令则响应OK。最后,客户端发送DATA、FETCH指令请求数据,SeedLink服务器从同一端口向客户端发送SeedLink数据流。该数据流包含一个8字节的SeedLink头(含序列号)和512字节的MiniSeed数据包,按先进先出(First In First Out,FIFO)的顺序进行传输。SeedLink头是一个ASCII字符串,由SL和6位十六进制的包序号组成,每个台站有属于自己的序号。数据获取有单通道和多通道模式,如果使用单通道模式请求多个台站,客户端需要查看MiniSeed头段来判定是哪个台站数据。
图3 NetSeis/IP服务器(a)和SeedLink服务器(b)数据请求流程图Fig.3 Data request flowchart of NetSeis/IP server(a)and SeedLink server(b)
随着地震数据自动化处理技术的发展,网络带宽的不断提升,在线实时传输的地震数据流变得越来越流行。IRIS、GFZ、EIDA以及众多国家级地震台网(如罗马尼亚实时地震台网[20])、区域地震台网(如UiB-NORSAR)都采用SeedLink协议来传输和共享数据。国内主要采用Netseis/IP协议和Http协议实现国内省级地震台网之间、省级地震台网与国家地震台网之间的Jopens系统数据交换,考虑到直接对接生产环境流服务器可能会影响速报预警业务的稳定性,一般国家台网和省级台网很少对外开放流服务,因此利用国内地震台站实时数据实现Earthworm、Seiscomp等EMS系统的本地化运行存在一定不便。
本文第二节介绍SeedLink协议的数据请求方式,本节介绍一种快速搭建SeedLink服务器的方法,开放SeedLink协议接口,提供实时SeedLink数据流。一方面为国外EMS系统本地化部署提供数据基础;另一方面,对未来数据共享工作和实时数据传输提供参考。
SeedLink实时数据流服务器的工作方式是开辟一片内存缓冲区用于缓存本地MiniSeed格式数据,在指定端口监听客户端请求并于握手指令完成后按需向客户端提供MiniSeed数据包。目前快速搭建SeedLink服务器的主要方式有两种,一种是基于GFZ的Seiscomp插件,将其他协议的数据流转换为SeedLink协议数据流;另一种是基于IRIS的Ring⁃Server软件,开辟内存缓冲器并监听请求。第一种实现方式需安装Seiscomp3系统,通过插件将数据流转化为SeedLink数据流,这种实现方式支持本地MiniSeed文件、LISS协议及Reftek、Nanometrics等数采。第二种实现方式由RingServer[21]独立完成,支持MiniSeed和SAC格式文件。
RingServer是一个由IRIS DMC提供的基于Apache2.0协议开源的环形数据流缓冲器,可以方便用户快速搭建基于TCP的SeedLink实时数据流。由C语言编写,核心模块包括MiniSeed scanner和MiniSeed archiver,支持在Linux、 Solaris或者Mac OSX等操作系统上安装。软件的工作原理是扫描读取本地MiniSeed文件,将数据记录添加到Ring buf⁃fer环形缓冲器中,缓冲器遵循FIFO的原则,如果缓冲器满载,新加入的数据会将旧数据挤出缓冲器。RingServer通过内存映射机制实现数据的鲁棒性,保证当RingServer停止并重启后,客户端不会丢失数据。第一种方式需依赖Seiscomp3系统,在使用过程中存在诸多不便,因此,本文以第二种基于RingServer的实现方式进行了SeedLink服务器的搭建和测试。
以VMware虚拟机做测试,处理器选择4核,内存4G,本地磁盘80G,安装CentOS7操作系统,网络模式选择NAT共享主机IP模式,可以方便本机访问虚拟机IP。首先,下载并编译RingServer,生成可执行文件,将需要实时推送的数据文件(MiniSeed格式)保存至指定目录(本次将台站名为ZD58和ZD69的MiniSeed数据文件放置MiniSeed文件夹下),开放虚拟机防火墙18000端口访问,然后,对RingServer进行配置,主要配置项如表1所示。
表1 RingServer软件主要配置项Table 1 The main configuration items of RingServer software
最后,通过./ringserver ring.conf>ring.log 2>&1命令启动缓冲器,将允许日志写入ring.log方便审查,如果命令行没有报错且终端保持不变,表明Ringserver正常启动,可通过telnet端口测试服务是否建立,服务启动后终端并不再接受指令输入,用户可打开cat ring.log查看软件运行日志。
通过Telnet的指令测试和Slinktool软件[22]接收的数据以及RingServer的日志文件来看,这种搭建方式可正常识别SeedLink协议指令,对请求主机和软件正常响应请求的数据,基本实现了SeedLink服务器的功能,服务器数据缓存大小可以在Ring⁃Server的配置文件中自行定义。无论是NetSeis/IP还是SeedLink,数据传输的底层实现都基于OSI参考模型的TCP/IP协议栈,拥有TCP协议的差错控制、流量控制和数据校验等功能,能保证上层数据包的数据完整性,属于可靠传输。在TCP的基础上封装512字节的MiniSeed数据包,实现地震数据的传输,但二者在数据包、指令和数据端口等方面略有不同,体现在:
Ø数据包不同。SeedLink在MiniSeed包的基础上添加SL和6位十六进制的包序号组成的SeedLink包头,NetSeis/IP传输的是MiniSeed包。
Ø数据接收端口不同。SeedLink协议的指令端口和数据端口默认都是18000,NetSeis/IP指令端口默认是5000,数据端口由服务器协商生成,不同连接的数据端口不相同。
Ø 指令不同。 SeedLink 指令包括 HELLO、STATION、SELECT、DATA等,NetSeis/IP指令类似FTP协议如PASV、STOR等。
Ø应用范围不同。国外绝大多数数据共享中心、台网中心、速报预警软件、地震计数据采集器均支持SeedLink协议。国内各省级测震台网使用的Jopens5.2系统采用NetSeis/IP协议。随着地震烈度速报与预警工程项目的推进推出的Jopens 6.0系统,采用Http协议进行数据传输Jopens5.2和6.0之间通过中间件程序实现数据流转换。
本文介绍了几种地震实时数据传输协议发展历程和应用范围,对比了NetSeis/IP和SeedLink协议的数据请求步骤、指令和数据包格式,提出一种基于IRIS的开源软件RingServer的SeedLink服务器的搭建方式,在本地VMware虚拟机CentOS7系统上进行了验证,通过Telnet和Slinktool测试了该方式搭建的SeedLink服务器的指令响应和数据传输,为国际主流EMS软件本地化运行和我国地震数据在线共享提供参考。