小议 CNAPS系统流水号规范
摘要:中国国家现代化支付交易清算系统(ChinaNationalAutomationPaymentSystem),简称 CNAPS,
是中国人民银行在世界银行贷款支持下正在建设中的中央银行支付系统,该系统的主要功能是对各商业
银行的资金进行最终的清算。文章分析了目前 CNAPS系统可靠性,响应时间等方面的一些不完善之处,
介绍了改善系统可靠性,缩短系统响应时间的方法,即流水号管理。
关键词:CNAPSSB分行系统资金清算流水号套接口
商业银行(SpecialBank)之间的资金收、付交易,必须经过政府授权的中央银行进行资金清算,以发
挥中央银行的宏观调控功能,从而稳定货币、稳定市场。CNAPS系统即是由各级中央银行组成,因此 SB
分行系统必须和 CNAPS系统通信,通过 CNAPS系统完成资金的最终清算。CNAPS系统的可靠、有效运
行,将关系到企业、个人的资金是否实现有效、及时、可靠的转移,对维护和健全银行体系,完善金融
市场是至关重要的。
CNAPS系统中数据的传送是全双工的。一方面是 CNAPS向 SB发送信息或文件;另一方面 SB也向 CNAPS
发送信息或文件。以下着重分析 CNAPS向 SB发送信息或文件时的情况,SB向 CNAPS发送信息或文件时
的情况与此类似。
1目前 CNAPS系统的一些不完善之处
目前在 CNAPS向 SB发送信息或文件的路径上存在以下不足之处:接收端不能得到独立的信息或文件;
文件请求响应时间过长;传输层能提供的可靠性有限。
1)不能得到独立的信息和文件
两个应用程序通过 TCP连接交换 8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将
这称为字节流服务(bytestreamservice)。如果一方的应用程序先传 10字节,又传 20字节,再传 50
字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分 4次接收这 80个字节,每次接
收 20个字节。一端将字节流放到 TCP连接上,同样的字节流将出现在 TCP连接的另一端。TCP对字节
流的内容不作任何解释。对字节流的解释由 TCP连接双方的应用层解释。当 CNAPS向 SB发送信息或文
件时,SB得到的只是无记录标识的字节流,而无法还原出独立的信息或文件。
2)文件请求响应时间过长
在 CNAPS系统中,SB作为客户机,CNAPS作为服务器运行,客户是指主动发起通信请求的应用程序,而
服务器是被动等待接收通信请求的应用程序。所以在 CNAPS向 SB发送信息或文件的路径上,CNAPS不
会主动向 SB发送信息或文件,它必须首先收到 SB的请求。
在 CNAPS向 SB发送信息或文件的路径上,SB向 CNAPS发出信息或文件请求的同时启动一个定时器,当
定时器超时(仍未接收到正确的信息或文件)SB则认为这个请求丢失或损伤因而进行重传。当 CNAPS
与 SB传送的数据单元是文件时,由于文件数据量很大,正常情况下都要经过很长的时延才能从 CNAPS
端全部传送到 SB端,因此定时器的时间应设置为比较大的值,SB往往要等待很长的时间才能判断是否
重发请求,SB的响应时间很长。特别是当 CNAPS发送的文件有一小部分出错,SB端 TCP检查到效验和
出错时就会抛弃整个文件,接着 SB定时器超时,SB重发请求,CNAPS再次重发整个文件,SB从发出第
一次请求开始,需要经历很长的时间才能接收到完全正确的文件。
3)传输层能提供的可靠性是有限的
CNAPS系统的传输层采用的是 TCP传输控制协议,理论上 TCP协议是可靠的,然而实际的传输服务并非
毫无错误,但在不可靠的网络之上提供可靠的服务正是传输层要实现的目标。
传输层是增强网络层提供的服务质量,它必须弥补应用层用户要求与网络层所提供的服务之间的差别。
用户在建立连接时对各种服务参数(如残余误码率)指定希望的、可接受的最低限度的值,传输层根据
网络服务的种类或它能够获得的服务来检查这些参数,决定能否提供所要求的服务。当传输层发现服务
质量参数的某些值是无法到达的,传输层甚至不去与目的机器连接,便直接通知应用层连接请求失败。
因此传输层能提供的可靠性是有限的。
2CNAPS系统性能改善方法--流水号管理
改进了的 CNAPS系统在 CNAPS发送信息或文件的路径上都增加了流水号管理的通信处理机制,进一步增
强 CNAPS系统可靠性,并缩短了文件请求/发送的响应时间。
一、对接收方信息或文件不能独立和文件请求响应时间过长的解决
在 CNAPS发送信息或文件的路径上,发送数据在 CNAPS端,为保证 SB端接收到独立的信息或文件,通
信上采用 SB请求一次,CNAPS发送一次的办法。
CNAPS给它生成的每个信息分配一个流水号,以标识该信息在 CNAPS数据流中的位置。通信上 SB请求
一个流水号,CNAPS才发送流水号为对应值的信息。这样各个信息就能分开。
在 CNAPS向 SB发送信息路径上流水号的处理过程可分成三步:
1)当系统开始,链路建立后 SB向 CNAPS发初始化流水号请求,随后 CNAPS向 SB发送初始化流水号回
答,把 SB的流水号初始化为 0。不是系统开始,如出现故障链路断开再次建立,链路建立后 SB会向
CNAPS发证实流水号请求,如 CNAPS判断 SB的流水正确,CNAPS会发出证实流水号回答。
2)接着 SB开始不断地向 CNAPS发送信息请求并从 CNAPS接收信息,直到接收到 CNAPS端无信息发送电
文为止。当 SB端接收到 CNAPS的无信息发送电文,隔一段时间,SB又会向 CNAPS发送信息请求。
3)当一天结束时,SB端会向 CNAPS发送一个结束流水号请求,当 SB接收到 CNAPS的结束流水号回答
后,SB断开链路。
证实流水号请求和证实流水号回答(或初始化流水号请求和初始化流水号回答)这两个步骤称为流水号
同步,通过流水号同步,SB可以知道已经接收到 CNAPS发送数据流的什么位置。(这类似于 TCP的三
步握手)。在 TCP的三步握手协议中,因为数据传输是双向的,所以要完成客户和服务器的同步需要三
个步骤。在 CNAPS系统中,CNAPS发送信息路径上数据是由 CNAPS向 SB端单向传输,因此在该路径上
CNAPS和 SB的流水号同步只需两个步骤。
下面是日初系统开始时,CNAPS向 SB发送信息路径上,CNAPS端有 2个未发送信息时流水号的处理过程
(文件接收路径上流水号的处理过程与此类似):
CNAPS(日初流水号初始化为 0)SB(流水号为上日终止时的
值 50)
图 2-1没有电文丢失、重复等错误的理想情况(未到一天结束时)
图 2-1直线两侧数值是 CNAPS端和 SB端的流水号,斜线上表示是 SB和 CNAPS之间的传送电文。CNAPS
端流水号是指 CNAPS已发送且被 SB正确接收到的信息的个数(如 CNAPS端流水号为 3,表示 CNAPS已
发送出去 3个信息且这时 SB接收到的信息个数也是 3)。SB流水号是指 SB已正确接收到信息的个数。
CNAPS流水号的更新是在 CNAPS接收到 SB请求下一个流水号时,这时 CNAPS就知道上一个流水号已被
SB正确接收到了。SB端流水号的更新是当 SB正确接收到了信息。
规定 SB必须正确接收到一个流水号才能请求下一个流水号。斜线上 SB信息请求报文中请求的流水号为
SB端的流水号+1,即 SB希望接收到的下一个 CNAPS信息的流水号。
2)在 CNAPS向 SB发送文件的路径上
流水号处理过程与 CNAPS向 SB发送信息路径上流水号处理类似。
把 CNAPS生成的文件分成若干分块,给予每个分块一个流水号,以标志该文件分块在 CNAPS数据流中的
位置(分块大小的指标是保证 SB文件分块请求的响应时间可以接受)。通信上 SB请求一个流水号,
CNAPS才发送流水号为对应值的文件分块。当文件传输过程中出现错误时,SB能及时发现,只需要
CNAPS重传某个文件分块,而不用整个文件重新传送。由于文件分块的数据量不大而且 SB能及时处理
错误,因此 SB正确接收到整个文件的响应时间比不采用流水号管理时的响应时间大大缩短了。当一个
文件接收完毕,SB才请求下一个文件,这样每个文件也能独立开来。流水号处理过程与图 2-1类似。
二、对传输层只能提供有限可靠性的解决
流水号管理中采用了类似于传输层 TCP协议的一些机制,相当于在应用层进一步增强传输层可靠性。
1)超时重传机制
TCP协议中为了解决分组的丢失,采用的是超时重传机制。客户发出连接请求的同时启动一个定时器,
不管请求或者响应丢失,定时器总会超时溢出。一旦定时器超时,客户再次发起连接请求,并重新启动
定时器。直到成功建立连接,或当重传次数到达一定限度时,认为连接不可建立而放弃。
在 CNAPS向 SB发送信息或文件路径上的流水号管理采用了类似 TCP的超时重传机制,SB发出信息或文
件分块请求的同时启动一个定时器。当 CNAPS返回的信息或文件分块因线路噪声损坏,SB方就会检测
到出错,从而丢弃它们。在 SB定时器时间到达时仍未收到正确的信息或文件分块,SB就会断开连接。
2)序号机制
TCP协议中通过给数据流中每个八位组赋予序号并要求接收方记住所收八位组的序号来检测重复现象。
为了避免迟到的确认和重复确认带来的混乱,TCP的"带重传的肯定确认"协议在确认信息中携带一个序
号,这样接收方就能正确地把分组与确认关联起来。
在 CNAPS向 SB发送信息或文件路径上对信息或文件分块进行编号,这种编号称为流水号,每个待发送
数据都对应一个流水号的机制使得接收端能够辨别接收数据是否重复。
4结论
CNAPS系统在我国金融界举足轻重的地位决定了必须从多方面保证它的可靠性,否则一个失误可能会导
致上百亿元的资金流失。在 CNAPS系统中运用流水号的管理方法是非常必要的,它可以进一步增强系统
可靠性,缩短系统的响应时间。
[参考文献]
[1]周明天汪文勇,《TCP/IP网络原理与技术》,清华大学出版社,1993年 12月
[2]中国人民银行支付与科技司,《中国国家现代化支付系统》,中国金融出版社,1995年 8月