客户端服务端1. TCP/HTTP连接建立2. 版本协商请求verNego_Req2. 版本协商应答verNego_Resp3. 链路鉴权请求linkAuth_Req3. 链路鉴权应答linkAuth_Resp4. 数据发送请求4. 数据发送应答5. 链路检测请求linkCheck_Req5. 链路检测应答linkCheck_Resp6.链路数据发送校验linkDataCheck_Req6.链路数据发送校验应答linkDataCheck_Resp7.链路释放请求linkRel_Req7.链路释放应答linkRel_Resp8. TCP/HTTP连接拆除
图5-3 SDTP数据传输协议流程
SDTP连接建立和通信流程说明如下:
(1) 请求的发起方作为客户端向服务端指定的IP地址和端口建立TCP长连接; (2) 客户端发起版本协商流程,若协商失败,则转(7)拆除连接;
(3) 客户端向服务端发起链路鉴权请求(使用数据合成服务器与各应用系统间协商
好的共享密钥),若服务端鉴权失败,则转(7)拆除连接;
(4) 请求的发起方发送数据,接收方收到数据并处理后回复处理结果;
(5) 在连接保持期间,如果没有数据包发送,客户端发送链路检测/应答包以维持此
连接;若发现链路断开,则转(7)拆除连接;
(6) 通信完成后,客户端主动发起链路释放请求;
第13页
(7) 双方均可拆除该连接; 5.1.4
连接管理消息
版本协商verNego
5.1.4.1.1 请求
版本协商请求,用于在连接的鉴权通过后,客户端与服务器端协商通信协议版本的信息,由连接的建立方主动发起协议版本协商。参数定义如下:
表5-4 参数定义 字段名 Version SubVersion 字节数 1 1 类型 Unsigned Integer Unsigned Integer 描述 协议的主版本号 协议的子版本号 版本协商的发起方从自身支持的最高版本开始协商,高版本协商失败后再协商低版本。 5.1.4.1.2
应答
版本协商应答,用于返回版本信息的核对结果,参数定义如下:
表5-5 参数定义 字段名 Result 字节数 1 类型 Unsigned Integer 描述 返回原因值。 协议协商的结果,各个值代表意义如下: 1: 版本协商通过。 2: 版本过高。 3: 版本过低。 链路认证linkAuth
5.1.4.1.3 请求
连接鉴权请求,参数定义如下:
表5-6 参数定义 字段名 LoginID 字节数 12 类型 String 描述 账户ID。 由连接的服务端给连接的客户端分配的连接帐号。 描述 用于鉴别源用户,其值通过SHA256计算得出,当对端用相同方式加密之后与接收值 比较,如果计算出来的值相同,第14页
字段名 Digest 字节数 64 类型 String
则通过校验,否则出错。 Timestamp 4 Unsigned Integer 时间戳的明文。 由客户端产生,单位为秒(1970年1月1日0时0分0秒起至当前的偏移总秒数) 由客户端产生的随机数 RAND 5.1.4.1.4
应答
2 Unsigned Integer 连接鉴权应答,参数定义如下:
表5-7 参数定义 字段名 Result 字节数 1 类型 Unsigned Integer 描述 鉴权的返回结果。各个值的含义如下定义: 1 代表鉴权通过。 2 代表LoginID不存在。 3 代表SHA256加密结果出错。 用于对端对本端进行鉴权,其值通过SHA256计算得出,当对端用相同方式加密之后与接收值 比较,如果计算出来的值相同,则通过校验,否则出错。 Digest 64 String 链路检测linkCheck
5.1.4.1.5 请求
当信道上没有数据传输时,客户端应每隔时间C发送链路检测包以维持此连接,当链路
检测包发出超过时间T后未收到响应,应立即再发送链路检测包。服务端收到链路检测请求包后,立即回复链路检测应答。
无参数。 5.1.4.1.6
应答
链路检测请求的应答,无参数。 链路数据发送校验linkDataCheck
5.1.4.1.7 请求
本消息与notifyCDR/TDRData_Req和XDRRawDataSend_Req消息同方向。消息的作用是,告知数据接收方,在两个本消息间隔期内发送的notifyCDR/TDRData_Req和XDRRawDataSend_Req消息包数量,以便接收方校验是否有丢包情况发生。若有丢包发生时,
第15页
notifyCDR/TDRData_Req和XDRRawDataSend_Req消息的接收方应立即通过返回消息告知发送方有数据丢失。本消息建议5分钟进行数据校验,数据量大时为避免过多的传输缓存,可减少时间间隔,数据接收方应不受校验周期影响。
表5-6 参数定义
字段名 数 Sendflag 4 Int 检测包顺序标签,1小时内不重复即可。本参数目的是为了发现校验包的丢失,可以通过该参数判断出校验包的丢包。 距离上次发送间发送的数据包数量。(仅仅包含notifyCDR/TDRData_Req和XDRRawDataSend_Req包的数量) 字节类型 描述 SendDataInfo 5.1.4.1.8
应答
4 int 本消息与notifyCDR/TDRData_Req和XDRRawDataSend_Req消息方向相反。消息的作用是,告知数据发送方,在两个本消息间隔期内接收了多少个notifyCDR/TDRData_Req和XDRRawDataSend_Req消息包,以便告知发送方是否有丢包情况发生。
表5-6 参数定义
字段名 Sendflag 字节数 4 类型 Int 描述 检测包顺序标签,1小时内不重复即可。(与请求包相同)本参数目的是为了发现校验包的丢失,可以通过该参数判断出校验包的丢包。 0:数据量正确;1:接收方数据小于发送方数据;2:接收方;数据大于发送方数据。 距离上次发送间发送的数据包数量。(仅仅包含notifyCDR/TDRData_Req和XDRRawDataSend_Req包的数量)(与请求包相同) 距离上次发送间接收的数据包数量。(仅仅包含notifyCDR/TDRData_Req和XDRRawDataSend_Req包的数量) result 1 int SendDataInfo 4 int RecDataInfo 4 int
第16页