1 概述
XCOM是上海宝信软件股份有限公司自主研发的通信中间件,它基于TCP/IP协议与对等的通信程序进行数据交换,广泛应用于制造业,交通管理和其它自动控制领域。本文档描述了宝钢标准通信协议。
2 基本术语与约定
2.1 基本术语
1. 应用(Application):处理用户相关数据的程序;
2. 通信中间件(Communication Middleware):负责为应用传输数据的程序,如:XCOM;
3. 数据块(Data Block):应用系统希望接收或发送的一整块数据(应用数据),即为应用和通信中间件之间的数据收发单位,最大数据块长度不超过4096字节。
4. 电文(Message):在通信中间件之间传送的数据包,一般由电文头,电文体(数据块)和结束符组成。
该协议存在两种电文:数据电文和心跳电文。
a) 数据电文用于传送应用系统的数据块,XCOM不对该类型电文进行拆分,但该电文有可能被底层的TCP协议进行拆分和重组。
b) 心跳电文用于监视回线和对方通信程序的状态,用作状态检测,双方可根据实际需要决定是否发送心跳电文。
5. 回线(Session):在双方通信程序之间建立的一条TCP连接,一条回线既可以接收也可以发送数据,但一般一条回线只是用作单向的数据传输。因此通信双方通信程序之间需要建立两条回线。
6. 通讯传输方式(Communication Transfer Mode):静态SOCKET。
静态SOCKET:静态SOCKET通信是指通信双方建立的TCP/IP连接一直保持,直到停止通信程序或异常终止。通信设计思想、原理、通信模式,采用的协议规范都与动态SOCKET方式相同。
该协议采用静态SOCKET连接方式。
7. 网络地址,这部分解释了以太网的信息。
a) 以太网地址(MAC地址)
以太网地址用于以太网物理层上的处理。以太网上的所有计算机都有固定的以太网地址和固化代码的网卡,它们被每个网卡厂商指定了唯一的号码。
b) IP地址
IP地址用于网络上TCP/IP和UDP/IP协议的处理。网络用户必须为每个网络节点指定IP地址。以下列出了三类IP地址:
A类地址:有1,677,214个形如N.H.H.H(1<=N<=126)IP地址的节点号
B类地址:有65,536个形如N.N.H.H(128.1<=N.N<=191.254)IP地址的节点号
C 类地址:有256个形如N.N.N.H(192.0.1<=N.N.N<=223.256.254)IP地址的节点号
( N:网络号 H:主机号 )
在同一网络内的所有网络节点必须被指定同一IP地址类。C类地址将被应用在网络内的计算机系统。
2.2 协议
一台计算机通过TCP/IP协议与网络中的其它计算机通信。网络协议遵守OSI模型的物理和数据链路层的IEEE802.标准。
接收和发送的电文使用两种逻辑连接。逻辑连接也被成为回线,每个逻辑连接运用Server/Client模式。
在TCP/IP的socket接口中,Server/Client模式是十分流行的。
Server/Client模式决定如何建立逻辑连接,但在建立连接后并不确定通信规约。在规约中,发送数据的主动方和接收数据的被动方都是提前确定的。
主动方类似Server/Client模式中的client端,直到逻辑连接建立后,主动方总是发起通信连接。
被动方类似Server/Client模式中的Server端,直到通信连接建立后,被动方等待来自主动方的电文。
在标准规约下,此处建立的两条回线必须都是静态socket,即通信双方建立的TCP/IP链路自始至终一直保持连接,直到某一方通信程序退出或异常终止。
2.3 电文校验
l XCOM对接收到的电文头作检查,如果电文头的基本格式非法,则报错。
l 任何一种电文在通信中间件的配置表中都应该有定义,否则报错。
l XCOM收到的实际电文长度与电文头部定义的长度不符,则报错。
2.4 应用应答
应用双方视需求要求接收方发送相应数据电文的应用应答电文,应用应答电文在XCOM看来也是普通的数据电文。一种类型的数据电文是否需要应用应答由应用双方协商决定。
2.5 电文格式
以下规约用于计算机间传送的电文:
1) ASCII文本域的左补0和右补空格问题,分数字数据和字符串数据:
数字数据:在不满位数时左补0:
例如:421: “00421”在5位数字值的情况下
-421: “-0421”
字符串数据:在不够长度时右补空格
例如:TSB: “TSBDDDD”在7位字符串值的情况
2) 电文包括头部和实体部分。实体部分有数据内容和结束符。
电文头部
(40 bytes)
数据内容
(max 4055 bytes)
结束符
(1 bytes)
3) 该协议有如下两种类型的电文:
l 普通电文:用于应用程序通信
l 心跳电文:用于网络的周期性检查
2.5.1 电文头部
电文被分成头部和实体部分。头部被用于检查电文的有效性。该协议电文头部大小是40字节。
下表是电文头部组成:
No
Field
Description
Type
Example
Note
1
电文长度
整个电文的长度,包括电文头,电文内容,结束符
C4
“1024”,
“0066”
2
电文号
用户定义的电文标识,用于区分同一种用途的电文,长度为4字符的字符串,不能含有空格或串结束符。
C4
“AA01”,
”0011”,”kknd”
3
日期
电文发送的日期,8位的数字,依次为年、月、日。
C8
YYYYMMDD
4
时间
电文发送的时间,6位的数字,依次为小时、分钟、秒钟,小时数为24小时制的。
C6
HHMMSS
5
发送端DC
发送端主机的描述码,是个2字符的字符串,不能含有空格或结束符。
C2
“L4”
6
接收端DC
接收端主机的描述码,是个2字符的字符串,不能含有空格或结束符。
C2
“L3”
7
序列号
该字段用来区分在相同时间内传输的不同电文,应用可以通过该字段加上时间,日期来唯一的确定某条电文。该字段为8位的数字,从0000到9999,可以不连续
C4
“0001”
0000
-9999
8
Block or Function
该字段不再使用,这里必须为”00”
C2
“00”
9
保留字段
留作将来备用,这里是8个空格
C8
2.5.2 普通电文
普通电文用于应用程序间的通信。它的格式如下:
电文头部
(40 bytes)
数据内容
(max 4055 bytes)
结束符
(1 bytes)
普通电文由40字节的电文头,最大4055字节的数据内容以及结束符号0x03组成;
电文内容域允许ASCII码(0x20-0x7e)和国标码(0xa1a1-0xf7fe),其具体定义由应用组决定,其总长度不大于3950。但必须确保一个电文代号对应一种电文格式,.不能含心跳,结束符,否则会造成应用系统接收的数据内容不正确。
普通电文格式:
No
Field
Description
Type
Example
Note
1
电文长度
整个电文的长度,包括电文头,电文内容,结束符
C4
“1024”,
“0066”
2
电文号
用户定义的电文标识,用于区分同一种用途的电文,长度为4字符的字符串,不能含有空格或串结束符。
C4
“AA01”,
”0011”,”kknd”
3
日期
电文发送的日期,8位的数字,依次为年、月、日。
C8
YYYYMMDD
4
时间
电文发送的时间,6位的数字,依次为小时、分钟、秒钟,小时数为24小时制的。
C6
HHMMSS
5
发送端DC
发送端主机的描述码,是个2字符的字符串,不能含有空格或结束符。
C2
“L4”
6
接收端DC
接收端主机的描述码,是个2字符的字符串,不能含有空格或结束符。
C2
“L3”
7
序列号
该字段用来区分在相同时间内传输的不同电文,应用可以通过该字段加上时间,日期来唯一的确定某条电文。该字段为8位的数字,从0000到9999,可以不连续
C4
“0001”
0000
-9999
8
Block or Function
该字段不再使用,这里必须为”00”
C2
“00”
9
保留字段
留作将来备用,这里是8个空格
C8
10
数据内容
应用数据内容,最大4055字节
C4055
11
结束符
标记电文结束,在ASCII码表中是Ctrl+C,十六进制值是0x03,是不可显示字符
C1
/03
2.5.3 心跳电文
心跳电文用于计算机间的心跳确认。心跳电文的接收方不会给发送方回送确认电文(ACK)。在静态链路模式中,一定的时间间隔内,如果一直没有数据电文发送,则需要向对方发送心跳电文以检测通信链路是否畅通,如果发送心跳电文失败,则说明静态链路存在问题。
是否发送心跳电文和心跳电文的时间间隔在XCOM中是可配置的(设为T)。在T*2时间间隔内,如果XCOM没有收到对方的心跳电文,则主动地断开与对方的连接。
心跳电文由主动连接对方的那条socket发送出去!该协议下心跳电文长度为一个字节,内容是\0x16,即SYN码
3 流程
回线(session)有以下特点:
n 通信握手规约
n 心跳确认
这部分解释了通信的处理过程
3.1 连接建立
一个发送系统(进程)被定义为生成普通或测试电文的系统(进程)。一个接收系统(进程)被定义为接收普通或测试电文的系统(进程)。通常,发送系统负责维持它的out-going连接。一个连接被定义为一个TCP/IP套接字,并且该连接能够被视为一条回线。因而,如果一个系统给邻居系统发送并接收普通电文,那么会建立两个端口,一个端口发送数据,一个端口接收数据。
当计算机的数据传输进程开始时,发送进程将试图与所有要传送数据的计算机建立连接,并且接收进程会等待来自其它计算机发送进程的连接请求。其它的计算机必须处于合适的状态去等待接收连接请求或者发送数据。
一旦连接建立,在正常的操作过程中,它将保持连接状态。然而,当异常情况发生时,发送进程或者接收进程执行断开连接过程。
每条回线均可独立地执行发送进程,接收进程。
3.2 断开和重连
在以下情况下,连接将被释放:
对于发送进程
u 发送进程调用发送系统时失败
对于接收进程
u 接收到来自发送进程的断开请求(或者接收到0字节数据域长度的数据时)
在以上情况下,通信进程会断开与其它计算机的连接,并且必须执行重连进程。
3.3 通信流程
Client端发完一条电文之后立即发送下一条电文。
在该协议中client端发送一条电文后不需要等待对方返回的应答,而是直接发送下一条电文,这种模式最大保证了发送电文的速度!
Server端接收到一条电文后,不会给client端发送应答电文,而是继续等待下一条电文!
3.4 心跳确认
为了通告本地计算机是激活的,一台计算机会周期地(T1分钟)给另一台计算机发送一条心跳电文。
另一方面,若对端计算机在(T1*2)时间内收不到心跳电文,它会判断发送端计算机是不激活的,然后主动断开与对方的连接。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/baosight_paramita/archive/2005/06/21/399448.aspx
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12378643/viewspace-621516/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12378643/viewspace-621516/