基于CNAPS的流水号管理方法
摘 要:中国国家现代化支付交易清算系统(China National Automation Payment System),简称CNAPS,是中国人民银行在世界银行贷款支持下正在建设中的中央银行支付系统,该系统的主要功能是对各商业银行的资金进行最终的清算。文章分析了目前CNAPS系统可靠性,响应时间等方面的一些不完善之处,介绍了改善系统可靠性,缩短系统响应时间的方法,即流水号管理。
关键词:CNAPS SB分行系统 资金清算 流水号 套接口商业银行(Special Bank)之间的资金收、付交易,必须经过政府授权的中央银行进行资金清算,以发挥中央银行的宏观调控功能,从而稳定货币、稳定市场。CNAPS系统即是由各级中央银行组成, 因此SB分行系统必须和CNAPS系统通信,通过CNAPS系统完成资金的最终清算。
CNAPS系统的可靠、有效运行,将关系到企业、个人的资金是否实现有效、及时、可靠的转移,对维护和健全银行体系,完善金融市场是至关重要的。CNAPS系统中数据的传送是全双工的。
一方面是CNAPS向SB发送信息或文件;另一方面SB也向CNAPS发送信息或文件。以下着重分析CNAPS向SB发送信息或文件时的情况,SB向CNAPS发送信息或文件时的情况与此类似。
1 目前CNAPS系统的一些不完善之处目前在CNAPS向SB发送信息或文件的路径上存在以下不足之处:接收端不能得到独立的信息或文件;文件请求响应时间过长;传输层能提供的可靠性有限。1) 不能得到独立的信息和文件两个应用程序通过TCP连接交换8bit字节构成的字节流。
TCP不在字节流中插入记录标识符。我们将这称为字节流服务(byte stream service)。
如果一方的应用程序先传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协议是可靠的,然而实际的传输服务并非毫无错误,但在不可靠的网络之上提供可靠的服务正是传输层要实现的目标。
传输层是增强网络层提供的服务质量,它必须弥补应用层用户要求与网络层所提供的服务之间的差别。用户在建立连接时对各种服务参数(如残余误码率)指定希望的、可接受的最低限度的值,传输层根据网络服务的种类或它能够获得的服务来检查这些参数,决定能否提供所要求的服务。
当传输层发现服务质量参数的某些值是无法到达的,传输层甚至不去与目的机器连接,便直接通知应用层连接请求失败。因此传输层能提供的可靠性是有限的。
2 CNAPS系统性能改善方法--流水号管理改进了的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月