基于传输控制协议的报文传输系统及其方法

文档序号:7614210阅读:130来源:国知局
专利名称:基于传输控制协议的报文传输系统及其方法
技术领域
本发明涉及数据通信,特别涉及基于传输控制协议(Transfer ControlProtocol,简称“TCP”)的数据报文重传技术。
背景技术
当今世界,很多不同的厂家生产各种型号的计算机、通信设备等信息产品,它们运行完全不同的操作系统,但传输控制协议/网际互连协议(Transmission Control Protocol/Internet Protocol,简称“TCP/IP”)协议族允许它们互相进行通信。TCP/IP起源于60年代末美国政府资助的一个分组交换网络研究项目,目前它的作用已经远远超出了起初的设想。而在协议簇中,TCP是当前占统治地位的高层通信协议,它是最简单、最早、最广泛使用的通讯方案之一,其协议的开放、灵活和套接字(socket)编程接口的简单易用,在各种通信环境中得到了广泛的应用,拥有成千上万的用户。
虽然TCP有如此众多的优点,但是它本身并不是一个实时协议,当传输中出现丢包或错包时,TCP流量和时延将发生很大的变化,因此现有技术中企图通过引入快速重传技术来解决这个问题。
熟悉本领域的技术人员都知道,快速重传是指在TCP协议中,接收端收到一个失序的报文段时,将立即需要产生一个重复的无数据ACK,这里的ACK是指携带TCP头部中的ACK标志的报文,通过将TCP头部的32位确认序号置为希望收到的下一个序号,向对端确认已经收到的报文,当连接建立后,报文中的ACK标志总是置位。此重复的无数据ACK将立即返回发送端,目的在于让发送端知道接收端收到一个失序的报文段,并告诉发送端自己希望收到的序号,发送端会对收到的无数据ACK进行计数,如果一连串收到3个或3个以上的无数据ACK,就非常可能是一个报文段丢失了,发送端马上重传丢失的数据报文段,而无需等待超时定时器溢出。
因此,当传输过程中出现1次丢包或错包时,如果上述快速重传起作用,则不启用拥塞避免算法,流量可以不用降到很低。
然而,目前的快速重传虽然一定程度上减少了TCP实时性业务支持不足的这一先天性缺陷对实际应用的影响,但快速重传适用的场合有限,无法在所有情况下都有效解决TCP由于不具备实时性而导致的丢包和错包,继而无法保证其稳定的流量和理想的时延。
具体的说,目前的快速重传只有在单向成块数据流的程序中,如文件传输协议(File Transfer Protocol,简称“FTP”),才能获得快速重传的好处。当通信两端存在连续的交互数据时,中间很可能夹杂同向的数据报文,很难得到3个连续的无数据ACK报文。本领域技术人员知道,实际通信环境中,经常是成块数据流和交换数据流混杂,在这种情况下通常导致快速重传无法生效。由此可见,TCP的设计主要适用于因特网(Internet)无时延要求的数据业务,但是对工业场合的实时应用场合有些力不从心。
为了解决这个问题,提出了超时重传或修改TCP配置参数这两种方法。
超时重传的方法主要是等待超时定时器溢出,并且将丢失报文段序号以后的所有报文段都要重传。以太网典型的初始超时时间是1.5秒。当一次丢失多个报文时,超时时间采用指数退避,分别是3、6、12、24,48、64、64......64秒,将会引起很长时间的延时。并且当超时后,TCP进行慢启动(slow start),慢启动将发送窗口降低到一个报文,然后根据接收到的对端回应报文采取指数增加的方式扩大发送窗口。显然,慢启动的重传机制比快速重传要复杂得多,延时更长。
修改TCP配置参数的方法则是通过修改TCP配置参数达到扩大快速重传的适用范围的目的。具体的说,通过修改TCP的配置参数,将快速重传所需要的重复无数据ACK报文数改为1,即尽量降低触发快速重传的门限值。这样只需要一个重复的无数据ACK报文,就会触发快速重传,尽量避免采用慢启动重传机制。但是这种方法也存在两个明显的问题,一是容易造成网络拥塞。原因在于TCP参数修改对系统内所有TCP连接都起作用。但是对于互联网的应用,由于数据流会经过不同的路径到达目的,因此,到达主机的报文也可能乱序,这是TCP协议允许的。对此类乱序的报文重发,会造成不必要的网络拥塞。二是用户无法修改TCP参数。原因在于TCP/IP集成在操作系统中,厂商仅提供socket编程接口,因此用户不能修改TCP参数。
总而言之,目前的TCP技术无法有效解决在交互数据流状态下,在传输中出现丢包或错包对TCP流量和时延变化产生的不良影响。
造成这种情况的主要原因在于,现有技术中主要通过导致更长延迟的超时启动、或者通过导致网络拥塞的修改TCP参数的方式来解决交互数据流状态下的丢包错包问题。未解决交互数据流中同向的数据报文与无数据ACK报文相互夹杂,不利于实现快速重传这一根本性问题。

发明内容
有鉴于此,本发明的主要目的在于提供一种基于传输控制协议的报文传输系统及其方法,使得能够有效保证基于TCP的数据报文传输中交互数据流状态下出现丢包和错包现象时顺利启动快速重传,从而减少由此对TCP流量和时延产生的不良影响,确保TCP数据流保持较高速率,避免不断振荡。
为实现上述目的,本发明提供了一种基于传输控制协议的报文传输系统,包含第一和第二主机,以及连接它们的第一和第二套接字连接;所述第一套接字连接用于承载从所述第一主机向所述第二主机发送的数据报文,以及从所述第二主机向所述第一主机发送的相应的确认报文;
所述第二套接字连接用于承载从所述第二主机向所述第一主机发送的数据报文,以及从所述第一主机向所述第二主机发送的相应的确认报文。
其中,所述相应的确认报文包含当所述主机收到对端主机的丢序数据报文时,向该对端主机回应的无数据确认报文。
此外,所述主机还用于在从所述套接字连接连续收到的无数据确认报文个数达到预定门限(按协议为3)时,向对端主机重发该无数据确认报文所指定的缺失数据报文。
本发明还提供了一种基于传输控制协议的报文传输方法,包含以下步骤在第一和第二主机之间建立第一和第二套接字连接;所述第一主机通过所述第一套接字连接向所述第二主机发送数据报文并接收回应的确认报文,同时,所述第二主机通过第二套接字连接向所述第一主机发送数据报文并接收回应的确认报文。
其中,所述相应的确认报文包含当所述主机收到对端主机的丢序数据报文时,向该对端主机回应的无数据确认报文。
此外,所述方法还包含以下步骤当所述主机连续收到的无数据确认报文个数达到预定门限(按协议为3)时,向对端主机重发该无数据确认报文所指定的缺失数据报文。
通过比较可以发现,本发明的技术方案与现有技术的主要区别在于,本发明将两个socket连接复合成一个通信信道,每一个socket连接只负责承载一个方向的数据传输及回应的ACK报文,即将同向的数据报文和相应的ACK报文通过不同的socket通道传送。
这种技术方案上的区别,带来了较为明显的有益效果,即由于避免了同向的数据报文与无数据ACK报文的相互夹杂,当出现丢包错包时能够顺利启动快速重传机制,有效地通过快速重传,减小了丢包错包对TCP流量以及时延的影响。这样,一是可以减少慢启动发生的几率,使报文重传速度加快;二是可以使TCP流量保持在一个比较高的速率并且流量均衡,不会经常振荡。由此,克服了部分TCP协议对实时性支持不好的固有缺陷,使TCP协议在实时性要求比较高的工业领域得到更为广泛的应用。


图1是现有技术中单个socket数据发送及其响应示意图;图2是根据本发明的一个实施例的基于TCP的报文传输系统结构及工作原理示意图;图3是根据本发明的另一个实施例的基于TCP的报文传输方法的流程示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
总的来说,本发明的原理在于,采用了复合socket连接的方式,使主机间的通信整体上体现为半双工方式工作,采用一个socket通道,即第一通道专门负责主机A发送到主机B的数据,另一个socket通道,即第二通道专门负责主机B发送到主机A的数据。并且,每个单独的socket通道内仍然符合TCP协议要求,属于全双工方式工作,即主机A通过第一通道将数据报文发送到主机B,主机B通过该第一通道反馈ACK报文。同样的,主机B通过第二通道将数据报文发送到主机A,主机A通过该第二通道反馈ACK报文。每个主机仍然采用快速重传算法处理丢包或错包的情况。由于这种方法使两个主机之间同向的数据报文和无数据ACK报文通过不同的socket连接传送,两种报文不会相互夹杂,因此当出现丢包错包时,能够顺利启动快速重传机制,加快报文重传速度,有效避免了对TCP流量和时延的影响。大大提高TCP协议处理实时业务的能力。
下面将对照附图,解释和说明本发明的一个实施例中的,基于TCP的报文传输系统的构成以及工作原理。为了使本技术方案更易于理解,在描述本发明所采用的复合socket连接技术之前,需要对传统情况下通过TCP建立单socket通道全双工数据传送方式进行说明。
如图1所示,主机10、主机11是通信通道的两个终端,熟悉本领域的人员应该知道,主机10和主机11可以是PC机、服务器等设备。二者通过socket连接12进行数据交互,socket连接12是由一对分别在主机10内的套接字接口(socket)101和主机11内的套接字接口(socket)111建立的。
其中,由于单个socket是全双工工作方式,主机10、主机11既可以是消息发送方又可以为消息接收方,用于发送数据报文和ACK报文,并用于在连续地从socket连接12收到的无数据ACK报文个数达到预定门限时,向对端主机重发该无数据ACK报文所指定的缺失数据报文,在快速重传机制中,这里的预定门限值为3。
主机10和主机11建立一个socket连接后就建立了一个全双工的通信信道,即socket连接12。当主机10通过socket接口101向主机11发送数据后,主机11通过socket接口111向主机10发送带数据的ACK报文。反之,当主机11通过socket接口111向主机10发送数据时,主机10也可以通过socket接口101向主机11发送带数据的ACK报文。
本发明的重点即在于用两个上述单向传输的socket连接来构成复合socket连接,这种复合socket连接构成一个通信信道。基于TCP的报文传输中的无数据ACK和发送数据可以从同一端的不同socket接口发送出去,通过不同的Socket连接,到达对端相应的socket接口。主机发送给对端的无数据ACK报文在被接收的对端接收的过程中不会夹杂同向的数据报文来影响快速重传的顺利启动。
具体的说,如图2所示,本实施例的基于TCP的报文传输系统包含主机20和主机21,以及连接它们的socket连接22和socket连接23。
其中,socket连接22用于承载从主机20向主机21发送的数据报文,以及从主机21向主机20发送的相应ACK报文;同理,socket连接23用于承载从主机21向主机20发送的数据报文,以及从主机20向主机21发送的相应ACK报文。需要指出的是,上述相应的ACK报文包含当其中一个主机收到对端主机的丢序数据报文时,向该对端主机回应的无数据ACK报文。
在本实施例中,主机20和主机21是通信信道的两端。主机20上的socket接口201与主机21上的socket接口211建立了socket连接22,主机20上的socket接口202与主机21上的socket接口212建立了socket连接23。socket连接22与socket连接23构成了一对通信信道,对于该信道两端的任何一个主机,向对端发送数据报文以及接收来自对端的数据报文分别承载在不同的socket接口上。虽然每个socket接口都是全双工的,但是对于要传送的数据报文来说,可以将每个socket看作是半双工的。
另一方面,根据本发明的原理,上述信道两端的任何一个主机在从socket连接连续收到的无数据ACK报文个数达到预定门限,例如3时,将向对端主机重发该无数据报文确认报文所指定的缺失数据报文。
由此可见,通过采用“专门”的socket连接回传主机收到对端的数据报文后的相应的ACK报文,与该ACK报文同向的数据报文不会与其相互夹杂,因为该同向报文通过另一条复合socket连接发送给对端。在这种情况下,当出现丢包错包时,能够顺利启动快速重传,保证TCP流量和时延不受影响。
下面继续结合图3具体描述根据本发明的另一个实施例的基于TCP的报文传输方法。
如图所示,首先,在步骤310在信道两端的第一和第二主机之间分别建立第一和第二socket连接。具体的说,在第一主机,即主机20和第二主机,即主机21之间建立第一socket连接,即socket连接22和第二连接,即socket连接23。换句话说,socket连接22通过socket接口201和socket接口211连接两端,socket连接23通过socket接口202和socket接口212连接两端。其中如上所述,socket连接22用于承载从主机20向主机21发送的数据报文,以及从主机21向主机20发送的相应的ACK报文。socket连接23用于承载从主机21向主机20发送的数据报文,以及从主机20向主机21发送的相应的ACK报文。
接下来,一个主机通过第一socket连接向对端发送数据报文,并接收回应的ACK报文,反之亦然;同时,当一个主机连续收到的无数据ACK报文个数达到预定门限时,向对端主机重发该无数据确认报文所指定的缺失数据报文。具体的说,图1中的主机20在建立的TCP连接上,即socket连接22上,通过socket接口201和socket连接22,向主机21的socket 211发送数据报文,主机21在收到来自主机20的数据报文后,通过socket接口211和socket接口23,向主机20发送相应的ACK报文。同时,主机21在建立的TCP连接上,即socket连接23上,通过socket接口212和socket连接23,向主机20的socket接口202发送数据报文,主机20在收到来自主机21的数据报文后,通过socket接口202和socket连接23,向主机21发送相应的ACK报文。这里的相应的ACK报文包含当主机收到对端主机的丢序数据报文时,向该对端主机回应的无数据ACK报文。
当信道两端的任何一个主机连续收到的无数据ACK报文个数达到预定门限,如3时,向对端主机重发该无数据ACK报文所指定的缺失数据报文。
通过分析可以发现,主机21的socket接口211通过socket连接22发送的仅仅是包含无数据ACK报文在内的ACK报文,此外socket接口211不会向对端的socket接口201发送任何数据报文;类似地,主机21的socket接口202通过socket连接23发送的仅仅是包含无数据ACK报文在内的ACK报文,此外socket接口202不会向对端的socket接口212发送任何数据报文。
由此可见,快速重传机制可以在每个单独的socket连接中顺利执行,即当主机20或主机21收到的连续无数据ACK报文个数达到门限时,向对端主机重发该无数据ACK报文所指定的缺失数据报文。具体地说,当主机20的socket 201发往主机21的socket 211的数据报在传输过程中出现丢包或错包时,因为socket 211没有任何要发送的数据报,只发送无数据的ACK报文。主机21在收到3个主机20发送的数据时间里,也会发送出3个无数据的ACK报文,从而引发socket 201重传丢失的报文,快速重传生效。类似地,主机21到主机20出现丢包的处理相同,因为同向的无数据ACK报文和发送数据走不同的Socket链接,所以可以保证无数据ACK报文可以被发送端连续地收到,中间不会夹杂同向的数据报文,从而可以顺利启动快速重传机制。
虽然通过参照本发明的某些优选实施例,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种各样的改变,而不偏离所附权利要求书所限定的本发明的精神和范围。
权利要求
1.一种基于传输控制协议的报文传输系统,其特征在于,包含第一和第二主机,以及连接它们的第一和第二套接字连接;所述第一套接字连接用于承载从所述第一主机向所述第二主机发送的数据报文,以及从所述第二主机向所述第一主机发送的相应的确认报文;所述第二套接字连接用于承载从所述第二主机向所述第一主机发送的数据报文,以及从所述第一主机向所述第二主机发送的相应的确认报文。
2.根据权利要求1所述的基于传输控制协议的报文传输系统,其特征在于,所述相应的确认报文包含当所述主机收到对端主机的丢序数据报文时,向该对端主机回应的无数据确认报文。
3.根据权利要求2所述的基于传输控制协议的报文传输系统,其特征在于,所述主机还用于在从所述套接字连接连续收到的无数据确认报文个数达到预定门限时,向对端主机重发该无数据确认报文所指定的缺失数据报文。
4.一种基于传输控制协议的报文传输方法,其特征在于,包含以下步骤在第一和第二主机之间建立第一和第二套接字连接;所述第一主机通过所述第一套接字连接向所述第二主机发送数据报文并接收回应的确认报文,同时,所述第二主机通过第二套接字连接向所述第一主机发送数据报文并接收回应的确认报文。
5.根据权利要求4所述的基于传输控制协议的报文传输方法,其特征在于,所述相应的确认报文包含当所述主机收到对端主机的丢序数据报文时,向该对端主机回应的无数据确认报文。
6.根据权利要求5所述的基于传输控制协议的报文传输方法,其特征在于,所述方法还包含以下步骤当所述主机连续收到的无数据确认报文个数达到预定门限时,向对端主机重发该无数据确认报文所指定的缺失数据报文。
全文摘要
本发明涉及数据通信,公开了一种基于TCP的报文传输系统及其方法,使得能够有效保证基于TCP的数据报文传输中交互数据流状态下出现丢包和错包现象时顺利启动快速重传,从而减少由此对TCP流量和时延产生的不良影响,确保TCP数据流保持较高速率,避免不断振荡。本发明关键在于,将两个socket连接复合成一个通信信道,每一个socket连接只负责承载一个方向的数据传输及回应的ACK报文,即将同向的数据报文和ACK报文通过不同的socket通道传送,避免它们夹杂在一起,影响快速重传的有效进行。
文档编号H04L1/16GK1825846SQ200510033349
公开日2006年8月30日 申请日期2005年2月25日 优先权日2005年2月25日
发明者申纪伟 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1