掌桥专利:专业的专利平台
掌桥专利
首页

报文传输方法、装置及系统

文献发布时间:2024-04-18 20:01:30


报文传输方法、装置及系统

技术领域

本申请涉及通信技术领域,特别涉及一种报文传输方法、装置及系统。

背景技术

在数据通信网络中,发送端设备和接收端设备之间可以通过网络设备来传输报文。其中,发送端设备可以是终端,接收端设备可以是服务器,网络设备可以包括路由器和交换机等具备报文转发功能的设备。

当网络设备出现故障,或者网络设备之间的链路出现故障时,发送端设备发出的部分报文可能会被丢弃。为了保证通信的可靠性,发送端设备可以向接收端设备重传该被丢弃报文。但是,重传会引入端到端的通信时延(delay)以及抖动(jitter),导致网络服务质量下降。

发明内容

本申请提供了一种报文传输方法、装置及系统,可以解决报文重传导致的网络服务质量下降的技术问题。

第一方面,提供了一种报文传输方法,应用于发送端设备。该方法包括:与接收端设备建立传输层连接,并通过该传输层连接向接收端设备发送第一报文和第二报文,使得该第一报文和第二报文通过不同的路径传输至接收端设备。其中,该第一报文和第二报文的载荷相同,且该第一报文和第二报文用于供接收端设备保留其中一个报文,并丢弃另一个报文。

本申请提供的方案中,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。其中,该发送端设备与接收端设备中的一个可以为客户端设备,另一个可以为服务端设备。

可选地,与接收端设备建立传输层连接的过程可以包括:与接收端设备建立第一传输层连接和第二传输层连接。相应的,通过该传输层连接向接收端设备发送第一报文和第二报文的过程可以包括:通过该第一传输层连接向接收端设备发送第一报文,并通过该第二传输层连接向接收端设备发送第二报文。

由于发送端设备与接收端设备之间能够建立两个传输层连接,因此该两个传输层连接可以传输载荷相同的报文,由此有效确保了报文传输时的可靠性。

可选地,该第一传输层连接的源地址与第二传输层连接的源地址不同;和/或,该第一传输层连接的目的地址与第二传输层连接的目的地址不同。

其中,每个传输层连接的源地址可以是发送端设备的一个物理接口的网络地址,每个传输层连接的目的地址可以是接收端设备的一个物理接口的网络地址。该物理接口的网络地址可以是互联网协议(Internet protocol,IP)地址。

可选地,该第一传输层连接的源地址与第二传输层连接的源地址可以不同,且该发送端设备可以与一个或多个网关设备连接。或者,该第一传输层连接的源地址与第二传输层连接的源地址相同,且该发送端设备可以与一个网关设备连接。

若两个传输层连接的源地址不同,则该两个传输层连接的源地址可以是发送端设备的不同物理接口的网络地址。相应的,发送端设备可以通过不同的物理接口与一个或多个网关设备连接。若该两个传输层连接的源地址相同,则该两个传输层连接的源地址可以是发送端设备的同一物理接口的网络地址。相应的,发送端设备可以通过该一个物理接口与一个网关设备连接。

可选地,该第一传输层连接和第二传输层连接可以绑定至该发送端设备的同一个套接字(socket)接口,且可以绑定至该接收端设备的同一个套接字接口。由此,可以便于通过冗余的传输层连接实现报文的双发选收。

可选地,若该发送端设备为客户端设备,且该接收端设备为服务端设备,则与接收端设备建立第一传输层连接和第二传输层连接的过程可以包括:向服务端设备发送第一连接请求报文和第二连接请求报文,并接收服务端设备基于该第一连接请求报文发送的第一请求响应报文,以及基于该第二连接请求报文发送的第二请求响应报文。之后,即可基于该第一请求响应报文向服务端设备发送第一响应报文,以与服务端设备建立第一传输层连接,以及基于该第二请求响应报文向服务端设备发送第二响应报文,以与该服务端设备建立第二传输层连接。其中,该第一连接请求报文和第二连接请求报文中均可以包括指示信息,该指示信息用于指示该第一传输层连接和第二传输层连接绑定至客户端设备的同一个套接字接口。

通过在第一连接请求报文和第二连接请求报文中均携带指示信息,可以便于服务端设备确定在该两个传输层连接均建立完成后才能与客户端设备交互数据报文。

可选地,向该服务端设备发送第一连接请求报文和第二连接请求报文的过程可以包括:调用绑定函数,以将该第一传输层连接的源地址和第二传输层连接的源地址绑定至客户端设备的同一个套接字接口;之后,调用连接函数,以向服务端设备发送第一连接请求报文和第二连接请求报文。该连接函数的参数包括该第一传输层连接的目的地址,以及该第二传输层连接的目的地址。

其中,该两个传输层连接的目的地址均为服务端设备的网络地址,且该两个传输层连接的目的地址可以是客户端设备中预先配置的,或者可以是客户端设备通过域名系统(domain name system,DNS)获取到的。

可选地,若该发送端设备为服务端设备,且接收端设备为客户端设备,则与接收端设备建立第一传输层连接和第二传输层连接的过程可以包括:接收客户端设备发送的第一连接请求报文和第二连接请求报文,该第一连接请求报文和第二连接请求报文中均包括指示信息,该指示信息用于指示该第一传输层连接和第二传输层连接绑定至客户端设备的同一个套接字接口。之后,基于该第一连接请求报文向客户端设备发送第一请求响应报文,并基于该第二连接请求报文向客户端设备发送第二请求响应报文。进一步的,接收该客户端设备基于第一请求响应报文发送的第一响应报文,以与客户端设备建立第一传输层连接,以及接收该客户端设备基于第二请求响应报文发送的第二响应报文,以与客户端设备建立第二传输层连接。

相应的,通过该第一传输层连接向接收端设备发送第一报文,并通过第二传输层连接向该接收端设备发送第二报文的过程可以包括:基于该指示信息,在确定该第一传输层连接和该第二传输层连接均建立完成后,通过该第一传输层连接向接收端设备发送第一报文,并通过该第二传输层连接向接收端设备发送第二报文。

服务端设备能够基于指示信息,在确定两个传输层连接均建立完成后,再通过该两个传输层连接与客户端设备交互报文,由此可以确保双发选收的可靠性。可以理解的是,服务端设备若确定该两个传输层连接未在目标时长内建立完成,则可以拆分该传输层连接。

可选地,服务端设备在接收客户端设备发送的第一连接请求报文和第二连接请求报文之前,该方法还可以包括:调用绑定函数,以将该第一传输层连接的源地址和第二传输层连接的源地址绑定至该服务端设备的同一个套接字接口,以及调用监听函数,以接收该客户端设备发送的第一连接请求报文和第二连接请求报文。

可以理解的是,对于服务端设备,该每个传输层连接的源地址均为服务端设备的一个网络地址。对于客户端设备,该服务端设备的网络地址为传输层连接的目的地址。

可选地,该第一连接请求报文和第二连接请求报文中的指示信息可以包括该客户端设备生成的随机数。该随机数也可以称为挑战字或魔术字。

可选地,该第一连接请求报文中携带的指示信息可以包括第二传输层连接的五元组信息,相应的,该第二连接请求报文中携带的指示信息可以包括第一传输层连接的五元组信息。

可以理解的是,客户端设备与服务端设备之间建立的传输层连接的数量可以大于或等于2。对于传输层连接的数量大于2的场景,客户端设备可以在其发送的多个连接请求报文中均携带相同的随机数。相比于携带五元组信息,由于随机数的数据量相对较小,因此可以避免指示信息占用过多的比特位,进而可以避免连接请求报文的报文头的长度过长。

可选地,该第一连接请求报文和第二连接请求报文均可以包括传输层报文头,该传输层报文头中的选项字段中可以携带有该指示信息。

可选地,该第一连接请求报文和第二连接请求报文中还可以均包括连接个数。该连接个数用于指示绑定至客户端设备的同一个套接字接口的传输层连接的个数,且该连接个数大于或等于2。

通过在连接请求报文中携带连接个数,可以便于服务端设备准确地确定与同一个套接字接口绑定的传输层连接的数量,进而可以确保服务端设备在确定各个传输层连接均建立完成后,再与客户端设备交互数据报文。

可选地,与接收端设备建立传输层连接的过程还可以包括:与该接收端设备建立第三传输层连接,并且,该方法还可以包括:通过第三传输层连接向接收端设备发送第三报文,使得该第一报文、第二报文和第三报文通过不同的路径传输至该接收端设备。其中,该第一报文、第二报文和第三报文的载荷相同,且该第一报文、第二报文和第三报文用于供接收端设备保留其中一个报文,并丢弃其他报文。

基于上文描述可知,发送端设备与接收端设备之间建立的传输层连接的个数可以大于2,相应的,发送端设备与接收端设备之间可以实现报文的多发选收。

可选地,该第一报文和第二报文中还可以均包括多发选收标记,该多发选收标记用于指示网关设备将该第一报文和第二报文通过不同的路径传输至接收端设备。

由于网关设备可以基于报文中的多发选收标记,通过不同的路径传输不同的报文,因此也可以实现报文的多发选收。可以理解的是,在该实现方式中,发送端设备与接收端设备可以建立一个传输层连接。

可选地,该第一报文和第二报文均可以为互联网协议第6版(Internet protocolversion 6,IPv6)报文,该IPv6报文的扩展报文头中包括该多发选收标记。

可选地,该方法还可以包括:通过该传输层连接接收该接收端设备发送的第三响应报文和第四响应报文,并将该第三响应报文和第四响应报文中在后接收到的响应报文丢弃。其中,该第三响应报文是接收端设备在接收到第一报文后发送的,该第四响应报文是接收端设备在接收到第二报文后发送的。

该第三响应报文和第四响应报文也能够通过不同的路径传输至发送端设备。也即是,发送端设备和接收端设备之间还可以实现响应报文的双发选收。其中,响应报文也可以称为确认报文。

可选地,该发送端设备与接收端设备之间建立的传输层连接可以为下述连接中的任一种:传输控制协议(transmission control protocol,TCP)连接、用户数据报协议(user datagram protocol,UDP)连接、流控制传输协议(stream control transmissionprotocol,SCTP)连接、快速UDP互联网连接(quick UDP Internet connections,QUIC)以及多链路TCP(mulit-path TCP,MPTCP)连接等。

第二方面,提供了一种报文传输方法,应用于接收端设备。该方法包括:与发送端设备建立传输层连接,通过该传输层连接接收发送端设备发送的第一报文和第二报文,并将该第一报文和第二报文中在后接收到的一个报文丢弃。其中,该第一报文和第二报文的载荷相同,且该第一报文和第二报文通过不同的路径传输至该接收端设备。

可选地,与发送端设备建立传输层连接的过程可以包括:与发送端设备建立第一传输层连接和第二传输层连接。相应的,通过该传输层连接接收发送端设备发送的第一报文和第二报文的过程可以包括:通过该第一传输层连接接收该发送端设备发送的第一报文,并通过该第二传输层连接接收该发送端设备发送的第二报文。

可选地,该第一传输层连接和第二传输层连接绑定至该发送端设备的同一个套接字接口,且绑定至该接收端设备的同一个套接字接口。

可选地,该第一传输层连接的源地址和第二传输层连接的源地址不同;和/或,该第一传输层连接的目的地址和第二传输层连接的目的地址不同。

可选地,该方法还可以包括:基于接收到第一报文,通过该传输层连接向发送端设备发送第三响应报文;基于接收到第二报文,通过该传输层连接向发送端设备发送第四响应报文。其中,该第三响应报文和第四响应报文用于供发送端设备保留其中一个报文,并丢弃另一个报文。

可选地,该传输层连接可以为TCP连接、UDP连接、SCTP连接、QUIC或者MPTCP连接。

第三方面,提供了一种报文传输方法,应用于网关设备,该方法包括:接收发送端设备发送的第一报文和第二报文,该第一报文和该第二报文均包括多发选收标记。之后,基于该多发选收标记,将该第一报文和第二报文通过不同的路径传输至接收端设备,以使接收端设备保留该第一报文和第二报文中的一个报文,并丢弃另一个报文。其中,该发送端设备与接收端设备之间建立有传输层连接。

可选地,该第一报文和第二报文均可以为IPv6报文,该IPv6报文的扩展报文头中包括该多发选收标记。

第四方面,提供了一种报文传输设备,该报文传输设备可以是报文传输系统中的发送端设备、接收端设备或网关设备。该报文传输设备可以包括至少一个模块,该至少一个模块可以用于实现上述任一方面所提供的报文传输方法。

第五方面,提供了一种报文传输设备,该报文传输设备可以是报文传输系统中的发送端设备、接收端设备或网关设备。该报文传输设备可以包括:存储器,处理器及存储在该存储器上并可在该处理器上运行的计算机程序,该处理器执行该计算机程序时实现如上述任一方面所提供的报文传输方法。

第六方面,提供了一种报文传输设备,该报文传输设备可以是报文传输系统中的发送端设备、接收端设备或网关设备。该报文传输设备可以包括:主控板和接口板,该主控板和接口板可以用于实现上述任一方面所提供的报文传输方法。

第七方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,该指令由处理器执行以实现如上述任一方面所提供的报文传输方法。

第八方面,提供了一种包含指令的计算机程序产品,该指令由处理器执行以实现如上述任一方面所提供的报文传输方法。

第九方面,提供了一种报文传输系统,该报文传输系统包括:发送端设备和接收端设备。其中,该发送端设备用于实现上述第一方面所提供的报文传输方法,该接收端设备用于实现上述第二方面所提供的报文传输方法。

可选地,该系统还可以包括网关设备,该网关设备可以用于实现上述第三方面所提供的报文传输方法。

第十方面,提供了一种芯片,该芯片可以用于实现上述任一方面所提供的报文传输方法。

综上所述,本申请提供了一种报文传输方法、装置及系统。本申请提供的方案中,发送端设备能够与接收端设备之间建立传输层连接,并能够通过该传输层连接向接收端设备发送第一报文和第二报文,且该第一报文和第二报文能够通过不同的路径传输至接收端设备。由于该第一报文和第二报文的载荷相同,因此接收端设备能够保留其中一个报文,并丢弃另一个报文。基于此,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。

附图说明

图1是本申请实施例提供的一种报文传输系统的结构示意图;

图2是本申请实施例提供的另一种报文传输系统的结构示意图;

图3是本申请实施例提供的一种报文传输方法的流程图;

图4是本申请实施例提供的另一种报文传输方法的流程图;

图5是本申请实施例提供的一种建立传输层连接的示意图;

图6是本申请实施例提供的一种客户端设备与服务端设备之间传输报文的示意图;

图7是本申请实施例提供的另一种客户端设备与服务端设备之间传输报文的示意图;

图8是本申请实施例提供的又一种报文传输方法的流程图;

图9是本申请实施例提供的一种发送端设备的结构示意图;

图10是本申请实施例提供的一种接收端设备的结构示意图;

图11是本申请实施例提供的一种网关设备的结构示意图;

图12是本申请实施例提供的一种报文传输设备的结构示意图;

图13是本申请实施例提供的另一种报文传输设备的结构示意图。

具体实施方式

下面结合附图详细介绍本申请实施例提供的报文传输方法、装置及系统。

图1是本申请实施例提供的一种报文传输系统的结构示意图。如图1所示,该报文传输系统可以包括发送端设备10,接收端设备20,以及连接在该发送端设备10和接收端设备20之间的多个转发设备30。该发送端设备10可以通过该多个转发设备30向接收端设备20发送报文。

其中,发送端设备10和接收端设备20中的一个可以为客户端设备,另一个可以为服务端设备,即该报文传输系统的工作模式可以为客户端/服务端(client/server,C/S)模式。该客户端设备也可以称为用户设备,其可以为手机、笔记本电脑、台式电脑、可穿戴设备和车载设备等终端设备。该服务端设备可以是电脑、服务器、服务器集群或云服务平台(例如云数据中心)等。该多个转发设备30中的每个转发设备30也可以称为网络设备,其可以是路由器或交换机等具备报文转发功能的设备。并且,该多个转发设备30中与发送端设备10或接收端设备20直连的转发设备也可以称为网关设备。

为了提高发送端设备10向接收端设备20发送报文时的可靠性,该报文传输系统可以采用双方选收的方式传输报文。如图2所示,发送端设备10所连接的网关设备GW1与接收端设备所连接的网关设备GW2之间具有两条数据传输链路,其中一条数据传输链路包括转发设备R1和R2,另一条数据传输链路包括转发设备R3和R4。网关设备GW1在接收到发送端设备10发送的报文后,可以将该报文复制两份,并将两份报文通过两条数据传输链路分别发送至网关设备GW2。网关设备GW2在通过两条数据传输链路接收到两份报文后,可以仅保留其中一条数据传输链路传输的报文,并丢弃另一条数据传输链路传输的报文。例如,该两条数据传输链路中的一条为主链路,另一条为备链路,网关设备GW2可以保留主链路传输的报文,并丢弃备链路传输的报文。

在报文传输的过程中,网关设备GW2还可以感知两条数据传输链路的状态,一旦发现正在使用的主链路存在故障,则可以切换数据传输链路至备链路,即网关设备GW2可以从备链路接收报文。但是,网关设备GW2在切换数据传输链路时,该两条数据传输链路可能存在多条业务流,且两条数据传输链路中传输的报文的时序可能不同步。由此,网关设备GW2切换数据传输链路的动作,可能会引起业务流的丢包或者重包。

为了避免切换数据传输链路的动作导致业务流的丢包或者重包,可以在网关设备GW2上缓存所有业务流的报文,并通过接收到的报文的序列号确定是否丢弃报文。但是,上述缓存所有业务流的报文的方法会显著增加网关设备GW2的缓存压力和成本。

本申请实施例提供了一种报文传输方法,该方法可以应用于诸如图1所示的报文传输系统。参考图3,该方法包括:

步骤101、发送端设备与接收端设备建立传输层连接。

在本申请实施例中,发送端设备能够与接收端设备建立传输层连接。该传输层连接可以是TCP连接、UDP连接、SCTP连接、QUIC或者MPTCP连接等。并且,该发送端设备和接收端设备中的一个可以为客户端设备,另一个可以为服务端设备。

步骤102、发送端设备通过该传输层连接向接收端设备发送第一报文和第二报文。

其中,该第一报文和第二报文的载荷相同,且该发送端设备发送的第一报文和第二报文能够通过不同的路径传输至该接收端设备。相应的,接收端设备能够通过不同的路径接收到该第一报文和第二报文。

可选地,该发送端设备与接收端设备之间可以建立两个传输层连接,该第一报文和第二报文可以通过该两个传输层连接分别传输至接收端设备。或者,该发送端设备与接收端设备之间可以建立一个传输层连接,与发送端设备连接的网关设备可以将该第一报文和第二报文通过不同的路径传输至接收端设备。

步骤103、接收端设备将该第一报文和第二报文中在后接收到的一个报文丢弃。

接收端设备通过其与发送端设备之间的传输层连接接收到第一报文和第二报文后,可以将该第一报文和第二报文中在后接收到的一个报文丢弃。也即是,该接收端设备可以仅保留在先接收到的一个报文。

基于上述步骤101至步骤103可知,在本申请实施例提供的方案中,发送端设备与接收端设备之间的转发设备能够提供冗余的报文传输路径,发送端设备则能够提供冗余的报文,两者配合,即可实现发送端设备与接收端设备之间的双发选收。

综上所述,本申请实施例提供了一种报文传输方法,发送端设备能够与接收端设备之间建立传输层连接,并能够通过该传输层连接向接收端设备发送第一报文和第二报文,且该第一报文和第二报文能够通过不同的路径传输至接收端设备。由于该第一报文和第二报文的载荷相同,因此接收端设备能够保留其中一个报文,并丢弃另一个报文。基于此,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。

并且,本申请实施例提供的方法是通过发送端设备和接收端设备实现报文的双方选收,因此可以由接收端设备缓存接收到的报文。由于无需网关设备缓存业务流的报文,因此能有效降低网关设备的缓存压力和成本。

本申请实施例提供了另一种报文传输方法,该方法可以应用于诸如图1所示的报文传输系统。下文以发送端设备为客户端设备,接收端设备为服务端设备,并以发送端设备和接收端设备之间建立两个传输层连接为例,对该报文传输方法进行介绍。参考图4,该方法包括:

步骤201、客户端设备调用绑定函数,以将第一传输层连接的源地址和第二传输层连接的源地址绑定至客户端设备的同一个套接字接口。

在本申请实施例中,该第一传输层连接的源地址和第二传输层连接的源地址可以相同,也可以不同。

作为一种可能的实现方式,若客户端设备具有多个网络地址,则客户端设备可以将该多个网络地址中的两个网络地址分别作为第一传输层连接的源地址和第二传输层连接的源地址。并且,客户端设备能够将该两个传输层连接的源地址绑定至同一个套接字接口。

可选地,参考图5,该客户端设备可以包括应用(application,APP)层和传输层。其中,应用层可以先调用套接字函数socket(),以创建套接字接口。之后,应用层可以调用绑定函数bindx(),以将两个传输层连接的源地址绑定至该套接字接口。

示例的,参考图6,假设客户端设备具有物理接口eth1和物理接口eth2,其中物理接口eth1的IP地址为addr1,物理接口eth2的IP地址为addr2。则客户端设备在创建套接字接口后,可以调用绑定函数bindx(addr1,addr2),以将该两个物理接口的IP地址addr1和addr2与同一个套接字接口绑定。

作为另一种可能的实现方式,若客户端设备仅具有一个网络地址,则客户端设备可以将该网络地址作为第一传输层连接的源地址和第二传输层连接的源地址,并将该网络地址与一个套接字接口绑定。

例如,参考图7,假设客户端设备具有一个物理接口eth1,且该物理接口eth1的IP地址为addr1。则客户端设备在创建套接字接口后,可以调用绑定函数bindx(addr1),以将该物理接口的IP地址addr1与一个套接字接口绑定。

步骤202、服务端设备调用绑定函数,以将服务端的两个网络地址绑定至服务端设备的同一个套接字接口。

在本申请实施例中,服务端设备也可以具有多个网络地址,服务端设备可以将该多个网络地址中的两个网络地址均绑定至服务端设备的同一个套接字接口。可以理解的是,该两个网络地址可以作为与客户端设备之间的两个传输层连接(即第一传输层连接和第二传输层连接)的源地址。对于客户端设备,该服务端设备的两个网络地址即为该两个传输层连接的目的地址。

可选地,参考图5,该服务端设备也可以包括应用层和传输层。其中,应用层可以先调用套接字函数socket(),以创建套接字接口。之后,应用层可以调用绑定函数bindx(),以将两个网络地址绑定至该套接字接口。

例如,参考图6和图7,假设服务端设备具有物理接口eth1和物理接口eth2,其中物理接口eth1的IP地址为addr1*,物理接口eth2的IP地址为addr2*。则服务端设备在创建套接字接口后,可以调用绑定函数bindx(addr1*,addr2*),以将该两个物理接口的IP地址addr1*和addr2*与同一个套接字接口绑定。

步骤203、客户端设备调用连接函数,以向服务端设备发送第一连接请求报文和第二连接请求报文。

客户端设备将两个传输层连接的源地址均绑定至同一个套接字接口后,即可调用连接函数connectx(),以向服务端设备发送第一连接请求报文和第二连接请求报文。其中,该连接函数connectx()的参数可以包括第一传输层连接的目的地址,以及第二传输层连接的目的地址。该两个传输层连接的目的地址均为服务端设备的网络地址,且与服务端设备的同一个套接字接口绑定。该第一连接请求报文和第二连接请求报文中均可以包括指示信息,该指示信息用于指示第一传输层连接和第二传输层连接绑定至客户端设备的同一个套接字接口。

例如,参考图6,由于服务端设备将其两个物理接口的IP地址addr1*和addr2*与同一个套接字接口绑定,因此该客户端设备调用的连接函数connectx(addr1*,addr2*)的参数可以包括该两个IP地址addr1*和addr2*。也即是,客户端设备可以将该两个IP地址addr1*和addr2*分别作为两个传输层连接的目的地址。参考图5,客户端设备的应用层调用连接函数connectx(addr1*,addr2*)后,传输层即可向服务端设备发送第一连接请求报文(sync:1→1*)和第二连接请求报文(sync:2→2*)。

可选地,该第一连接请求报文和第二连接请求报文中还可以均包括连接个数。该连接个数用于指示绑定至客户端设备的同一个套接字接口的传输层连接的个数。并且,该连接个数大于或等于2。示例的,在图5至图7所示的场景中,该连接个数可以等于2。

通过在连接请求报文中携带连接个数,可以便于服务端设备准确地确定与同一个套接字接口绑定的传输层连接的数量,进而可以确保服务端设备在确定各个传输层连接均建立完成后,再与客户端设备交互数据报文。

在本申请实施例中,该第一连接请求报文和第二连接请求报文均可以包括传输层报文头,该传输层报文头中的选项(option)字段中可以携带有该指示信息和该连接个数。例如,假设该第一传输层连接和第二传输层连接均为TCP连接,则该第一连接请求报文和第二连接请求报文中的TCP报文头(header)中可以包括多归属(multi-home)选项字段,该multi-home选项字段中可以携带该指示信息和连接个数。

作为一种可能的示例,该指示信息可以包括该客户端设备生成的随机数,该随机数也可以称为挑战字或魔术字。在该示例中,由于第一连接请求报文和第二连接请求报文中携带有相同的随机数,因此服务端设备可以确定该两个连接请求报文所请求建立的两个传输层连接绑定至同一个套接字接口。

作为另一种可能的示例,该第一连接请求报文中携带的指示信息可以包括第二传输层连接的五元组信息。该第二连接请求报文中携带的指示信息可以包括该第一传输层连接的五元组信息。在该示例中,由于每个连接请求报文可以携带另一传输层连接的五元组信息,因此服务端设备也能够确定该两个连接请求报文所请求建立的两个传输层连接绑定至同一个套接字接口。

可选地,客户端设备可以通过DNS获取到该第一传输层连接的目的地址,以及第二传输层连接的目的地址。示例的,服务端设备可以将绑定至同一个套接字接口的两个网络地址(addr1*和addr2*)与同一个域名绑定,相应的,客户端设备可以通过DNS获取到该与同一个域名绑定的两个网络地址,并可以将该两个网络地址分别作为两个传输层连接的目的地址。

或者,该客户端设备中可以预先配置有服务端设备的两个网络地址,客户端设备可以获取预先配置的两个网络地址,以作为两个传输层连接的目的地址。例如,可以由开发人员预先在客户端设备中配置服务端设备的两个网络地址。

步骤204、服务端设备调用监听函数,以接收客户端设备发送的第一连接请求报文和第二连接请求报文。

如图5所示,服务端设备将其两个网络地址与同一个套接字接口绑定后,即可调用监听函数listen(),以接收客户端设备发送的第一连接请求报文和第二连接请求报文。

步骤205、服务端设备基于第一连接请求报文向客户端设备发送第一请求响应报文,并基于第二连接请求报文向客户端设备发送第二请求响应报文。

参考图5,服务端设备接收到第一连接请求报文(sync:1→1*)后,可以向客户端设备反馈第一请求响应报文(sync ACK:1→1*)。同样的,服务端设备接收到第二连接请求报文(sync:2→2*)后,可以向客户端设备反馈第二请求响应报文(sync ACK:2→2*)。

步骤206、客户端设备基于该第一请求响应报文向服务端设备发送第一响应报文,以与服务端设备建立第一传输层连接。

继续参考图5,客户端设备接收到第一请求响应报文(sync ACK:1→1*)后,可以向服务端设备发送第一响应报文(ACK:1→1*),从而与服务端设备建立第一传输层连接。

步骤207、客户端设备基于该第二请求响应报文向服务端设备发送第二响应报文,以与服务端设备建立第二传输层连接。

继续参考图5,客户端设备接收到第二请求响应报文(sync ACK:2→2*)后,可以向服务端设备发送第二响应报文(ACK:2→2*),从而与该服务端设备建立第二传输层连接。

在本申请实施例中,该第一传输层连接的源地址与第二传输层连接的源地址不同;和/或,该第一传输层连接的目的地址与第二传输层连接的目的地址不同。例如,参考图6,该两个传输层连接的源地址不同,且目的地址也不同。或者,参考图7,该两个传输层连接的源地址相同,但目的地址不同。

可以理解的是,该服务端设备也可以仅具有一个网络地址,且该客户端设备具有多个网络地址。相应的,该客户端设备与服务端设备之间建立的两个传输层连接的目的地址可以相同,但源地址不同。

可选地,该第一传输层连接和第二传输层连接均可以是TCP连接。在上述步骤203至步骤207中,客户端设备与服务端设备之间交互连接请求报文、请求响应报文和响应报文的过程,即为TCP的三次握手过程。该三次握手过程中交互的报文中均可以包括SYN标志位和ACK标志位。并且,该连接请求报文中的SYN标志位为1,该请求响应报文中的SYN标志位和ACK标志位为1,该响应报文中的ACK标志位为1。

步骤208、客户端设备在确定第一传输层连接和第二传输层连接均建立完成后,通过第一传输层连接向服务端设备发送第一报文,并通过第二传输层连接向服务端设备发送第二报文。

在本申请实施例中,由于该第一传输层连接和第二传输层连接与客户端设备的同一个套接字接口绑定,因此客户端设备可以在确定该两个传输层连接均建立完成后,再通过该两个传输层连接向服务端设备发送第一报文和第二报文。

其中,该第一报文和第二报文的载荷相同。并且,该第一报文的源地址与第一传输层连接的源地址相同,第一报文的目的地址与第一传输层连接的目的地址相同。该第二报文的源地址与第二传输层连接的源地址相同,第二报文的目的地址与第二传输层连接的目的地址相同。也即是,该两个报文的源地址不同,和/或,目的地址不同。或者可以理解为:该两个报文的IP报文头不同。

如图5所示,假设该客户端设备和服务端设备均采用EPOLL模型,则该客户端设备的传输层在发送完成第一请求响应报文(ACK:1→1*)和第二请求响应报文(ACK:2→2*)后,可以确定第一传输层连接和第二传输层连接均建立完成,并可以触发EPOLLOUT事件。客户端设备的应用层进而可以基于该EPOLLOUT事件,调用发送函数send()。传输层进而可以通过第一传输层连接向服务端设备发送第一报文(data:1→1*),并通过第二传输层连接向服务端设备发送第二报文(data:2→2*),该两个报文的载荷相同,但源地址不同,目的地址也不同。

继续参考图5,该服务端设备的传输层在接收到第一请求响应报文和第二请求响应报文后,可以触发EPOLLIN事件。服务端设备的应用层进而可以基于该EPOLLIN事件,调用接受函数acceptx(),以与该客户端设备建立第一传输层连接和第二传输层连接。

可以理解的是,在上述步骤204中,服务端设备中的传输层若检测到第一连接请求报文和第二连接请求报文中均包括指示信息,则在上述步骤206或步骤207中,服务端设备的传输层在接收到一个响应报文后,并不会立即唤醒应用层,而是等待两个传输层连接均建立完成后再唤醒应用层(即触发EPOLLIN事件)。

还可以理解的是,若服务端设备中的传输层检测到该两个传输层连接未在接收到首个请求报文后的目标时长内建立完成,则还可以拆除该传输层连接。其中,该目标时长的数量级可以为毫秒(ms)级,例如该目标时长可以为200ms。若该传输层连接为TCP连接,则服务端设备中的传输层检测到在目标时长内未完成两个传输层连接的三次握手时,可以通过复位报文拆除TCP连接。其中,复位报文中的RST标志位为1。

步骤209、服务端设备将该第一报文和第二报文中在后接收到的一个报文丢弃。

服务端设备通过两个传输层连接分别接收到第一报文和第二报文后,可以仅保留在先接收到的一个报文,并将在后接收到的一个报文丢弃。由此,可以实现报文的双发选收。

可选地,该第一报文和第二报文中还可以均包括报文序列号,且该两个报文中的报文序列号相同。服务端设备的传输层接收到先到达的报文后,可以刷新接收缓冲区,并将该报文上送至应用层。对于后续到达的报文,传输层可以基于该报文的序列号判断该报文是否重复,若确定该报文重复,则可以直接丢弃该报文。

示例的,参考图5,服务端设备的传输层接收到先到达的第一报文(data:1→1*)后,可以触发EPOLLIN事件。服务端设备的应用层进而可以调用接收函数recv(),以接收该第一报文。之后,传输层再接收到第二报文(data:2→2*)时,即可丢弃该第二报文(data:2→2*)。

在第一种可能的场景中,若该客户端设备具有至少两个网络地址,且该第一传输层连接和第二传输层连接的源地址不同,则如图6所示,该客户端设备可以分别与网关设备GW1和网关设备GW2连接。例如,客户端设备的物理接口eth1与网关设备GW1连接,物理接口eth2与网关设备GW2连接。该两个网关设备GW1和GW2能够将第一报文和第二报文通过不同的路径传输至服务端设备。

假设服务端设备的物理接口eth1与网关设备GW3连接,物理接口eth2与网关设备GW4连接,则该网关设备GW3能够将网关设备GW1传输的第一报文发送至服务端设备,网关设备GW4能够将网关设备GW2传输的第二报文发送至服务端设备。

在第二种可能的场景中,若该客户端设备具有一个网络地址,即该第一传输层连接和第二传输层连接的源地址相同,则如图7所示,该客户端设备可以与一个网关设备GW1连接。该网关设备GW1接收到客户端设备发送的第一报文和第二报文后,由于该两个报文的目的地址不同,因此网关设备GW1可以将该两个报文通过不同的路径传输至服务端设备。

在该第二种场景中,虽然第一报文和第二报文从客户端设备的同一个物理接口eth1发出,但由于该两个报文的目的地址不同,因此网关设备GW1能够根据两个报文的目的地址的差异,选择不同的路径传输该两个报文。

可以理解的是,在上述第一种场景中,客户端设备也可以与一个网络设备连接,该一个网络设备能够将第一报文和第二报文通过不同的路径传输至服务端设备。在上述第二种场景中,客户端设备也可以与多个网络设备连接,该多个网络设备能够将第一报文和第二报文通过不同的路径传输至服务端设备。

步骤210、服务端设备基于接收到该第一报文,通过该第一传输层连接向客户端设备发送第三响应报文。

服务端设备接收到第一报文后,可以通过该第一传输层连接向客户端设备发送第三响应报文,以指示该第一报文已被接收。例如,参考图5,服务端设备接收到第一报文(data:1→1*)后,可以向客户端设备发送第三响应报文(ACK:1→1*)。

步骤211、服务端设备基于接收到该第二报文,通过第二传输层连接向所述发送端设备发送第四响应报文。

服务端设备接收到第二报文后,可以通过该第二传输层连接向客户端设备发送第四响应报文,以指示该第二报文已被接收。例如,参考图5,服务端设备接收到第二报文(data:2→2*)后,可以向客户端设备发送第四响应报文(ACK:2→2*)。

为便于区分,可以将上述第一报文和第二报文均称为数据报文或业务报文。可以理解的是,在上述步骤210和步骤211中,服务端设备额可以通过第二传输层连接发送第三响应报文,并可以通过第一传输层连接发送第四响应报文。也即是,数据报文及其响应报文可以通过相同的传输层连接发送,也可以通过不同的传输层连接发送,本申请实施例对此不做限定。

还可以理解的是,服务端设备可以在每接收到一个数据报文后,均向客户端设备反馈一个响应报文。或者,服务端设备也可以在每接收到数量阈值个数据报文后,再向客户端设备反馈一个响应报文,其中,该数量阈值为大于1的整数。

步骤212、客户端设备将第三响应报文和第四响应报文中在后接收到的一个响应报文丢弃。

客户端设备通过两个传输层连接分别接收到第三响应报文和第四响应报文后,可以仅保留在先接收到的一个响应报文,并将在后接收到的一个响应报文丢弃。由此,可以实现响应报文的双发选收。也即是,在本申请实施例中,数据报文和响应报文均可以实现双发选收。

示例的,参考图5,客户端设备的传输层接收到先到达的第三响应报文(ACK:1→1*)后,可以确认服务端设备已接收到第一报文或第二报文。客户端设备的传输层再接收到第四响应报文(ACK:2→2*)时,即可丢弃该第四响应报文(ACK:2→2*)。

上文是以客户端设备与服务端设备之间建立两个传输层连接为例进行的说明。可以理解的是,该客户端设备与服务端设备之间还可以建立更多数量个传输层连接,即客户端设备与服务端设备之间的传输层连接的数量可以大于或等于2。

例如,该客户端设备与服务端设备之间还可以建立第三传输层连接。相应的,在上述步骤208中,客户端设备还可以通过该第三传输层连接发送第三报文,该第三报文的载荷、第一报文的载荷和第二报文的载荷相同。在上述步骤209中,服务端设备接收到第一报文、第二报文和第三报文后,可以保留该三个报文中在先接收到的一个报文,并丢弃在后接收到的其他两个报文。

上述步骤208至步骤212是以客户端设备向服务端设备发送报文为例进行的说明。还可以理解的是,在客户端设备与服务端设备建立传输层连接后,服务端设备也可以作为发送端设备向客户端设备发送报文。相应的,服务端设备可以执行上述步骤208和步骤212所示的方法,客户端设备可以执行上述步骤209至步骤211所示的方法。也即是,在本申请实施例中,该客户端设备与服务端设备之间可以实现报文的双向通信。

可选地,在本申请实施例中,可以对套接字的API接口进行改进,以允许绑定函数、连接函数和接受函数能够一次操作一个或多个网络地址。其中,对绑定函数bind()进行改进得到的bindx()函数的定义如下:

int tcp_bindx(int fd,struct sockaddr*addrs,socklen_t*addrlen,intaddrcnt,int flags);

对连接函数connect()进行改进得到的connectx()函数的定义如下:

int tcp_connectx(int fd,struct sockaddr*addrs,socklen_t*addrlen,intaddrcnt);

对接受函数accept()进行改进得到的acceptx()函数的定义如下:

int tcp_acceptx(int fd,struct sockaddr*addrs,socklen_t*addrlen,intaddrcnt);

上述函数定义中,int表示整数类型;fd表示文件描述符(file descriptor),也称句柄;struct表示结构体;addrs表示函数所操作的网络地址的个数可以大于或等于1;socklen_t表示网络地址的长度;addrcnt表示与同一个套接字接口绑定的网络地址的个数;flags表示标记位。

基于上述分析可知,本申请实施例提供的方法通过对发送端设备和接收端设备的传输层协议栈(例如TCP/IP协议栈)进行改进,可以使得该发送端设备能够将一个套接字接口与多个源地址和/或多个目的地址绑定。基于此,发送端设备的传输层即可将应用层发送的数据报文依据所绑定的传输层连接的个数,复制多份,并封装不同的IP报文头,以便从不同的路径发送至接收端设备。并且,上述改进也能够使得接收端设备将多个网络地址与同一个套接字接口绑定,以及使得接收端设备的传输层在接收到来自发送端设备的多个数据报文时,能够丢弃冗余的数据报文,以保证接收端设备的应用层仅收到一份数据报文。

可以理解的是,在本申请实施例中,服务端设备可以与多个客户端设备建立传输层连接,该服务端设备也可以称为多归属(mulit-home)服务端。并且,服务端设备与不同客户端设备之间建立的传输层连接的数量可以相同,也可以不同。也即是,该服务端设备既可以兼容改进了传输层协议栈的客户端设备,也可以兼容传统的(即未改进传输层协议栈的)客户端设备。

还可以理解的是,若客户端设备在发送第一报文和第二报文后的预设时长内未收到第一响应报文和第二响应报文,则可以重新发送该第一报文和第二报文。也即是,客户端设备可以对第一报文和第二报文进行重传,该重传的过程可以参考上述步骤208的相关描述,此处不再赘述。

本申请实施例提供的方法中,对于客户端设备和服务端设备中的每个端点设备,该两个传输层连接均可以共用一个缓冲区,且共用一个状态机。并且由于是对端点设备的传输层的协议栈进行改进,因此无需网络设备进行复杂的处理,该方案便于实施,且成本较低,能够以较小的代价实现传输层的双发选收。并且,在本申请实施例提供的方案中,发送端设备与接收端设备之间建立两个完整的传输层连接,不会对沿途的防火墙造成影响,且网络地址转换(network address translation,NAT)的操作也比较容易实现。

还可以理解的是,本申请实施例提供的报文传输方法的步骤先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减。例如,上述步骤202可以在步骤201之前执行,或者,上述步骤207可以在步骤206之前执行,又或者,上述步骤211可以在步骤210之前执行,再或者,上述步骤210至步骤212可以根据情况删除。

综上所述,本申请实施例提供了一种报文传输方法,发送端设备能够与接收端设备之间建立传输层连接,并能够通过该传输层连接向接收端设备发送第一报文和第二报文,且该第一报文和第二报文能够通过不同的路径传输至接收端设备。由于该第一报文和第二报文的载荷相同,因此接收端设备能够保留其中一个报文,并丢弃另一个报文。基于此,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。例如,可以有效保障业务流的传输性能满足该业务流的服务等级协议(service level agreement,SLA)。

并且,本申请实施例提供的方法是通过发送端设备和接收端设备实现报文的双方选收,因此可以由接收端设备缓存接收到的报文。由于无需网关设备缓存业务流的报文,因此能有效降低网关设备的缓存压力和成本。

本申请实施例提供了又一种报文传输方法,该方法可以应用于诸如图1所示的报文传输系统。下文以发送端设备和接收端设备之间建立一个传输层连接为例,对该报文传输方法进行介绍。参考图8,该方法包括:

步骤301、发送端设备与接收端设备建立一个传输层连接。

在本申请实施例中,该发送端设备与接收到设备之间可以仅建立一个传输层连接。其中,该发送端设备可以是客户端设备和服务端设备中的一个,接收端设备可以是客户端设备和服务端设备中的另一个。该发送端设备与接收端设备建立一个传输层连接的过程可以参考上述步骤201至步骤207的相关描述。

例如,假设该传输层连接为TCP连接,则发送端设备与接收端设备之间可以通过三次握手建立一个传输层连接。

步骤302、发送端设备通过该传输层连接发送第一报文和第二报文。

发送端设备与接收端设备建立完传输层连接后,即可通过该传输层连接发送第一报文和第二报文。该第一报文和第二报文的载荷相同,源地址相同,且目的地址也相同。并且,该第一报文和第二报文中还可以均包括多发选收标记,该多发选收标记能够指示网关设备将该第一报文和第二报文通过不同的路径传输至接收端设备。

可选地,该第一报文和第二报文均可以为IPv6报文,该IPv6报文的扩展报文头中可以包括该多发选收标记。

步骤303、网关设备基于多发选收标记,将第一报文和第二报文通过不同的路径传输至接收端设备。

网关设备接收到发送端设备发送的第一报文和第二报文后,可以基于该第一报文和第二报文中携带的多发选收标记,将该第一报文和第二报文通过不同的路径传输至接收端设备。

示例的,参考图7,网关设备GW1接收到客户端设备发送的第一报文和第二报文后,可以基于多发选收标记,将第一报文通过网关设备GW3发送至服务端设备,并可以将第二报文通过网关设备GW4发送至服务端设备。

步骤304、接收端设备将该第一报文和第二报文中在后接收到的一个报文丢弃。

接收端设备接收到网关设备通过不同的路径传输的第一报文和第二报文后,可以仅保留该第一报文和第二报文中在先接收到的一个报文,并丢弃在后接收到的一个报文。由此,可以实现报文的双发选收。该步骤304的实现过程可以参考上述步骤209的相关描述。

可以理解的是,在上述步骤302中,发送端设备发送的报文的数量还可以大于2。并且,发送端设备发送的多个报文的载荷、源地址和目的地址均相同,且该多个报文中均包括多发选收标记。相应的,在上述步骤303中,网关设备可以基于该多发选收标记,将该多个报文通过不同的路径传输至接收端设备。在上述步骤304中,接收端设备可以仅保留在先接收到的一个报文,并丢弃在后接收到的其他报文。

还可以理解的是,在上述步骤301中,发送端设备与接收端设备之间也可以建立多个传输层连接。也即是,对于两端设备之间具有多个传输层连接的场景,发送端设备发送的数据报文中也可以包括多发选收标记,网关设备可以基于该多发选收标记,采用不同的路径传输不同的数据报文。

综上所述,本申请实施例提供了一种报文传输方法,发送端设备能够与接收端设备之间建立传输层连接,并能够通过该传输层连接向接收端设备发送载荷相同的第一报文和第二报文,且该第一报文和第二报文中均包括多发选收标记。网关设备能够通过不同的路径将该两个报文传输接收端设备,且接收端设备能够保留其中一个报文,并丢弃另一个报文。基于此,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。

图9是本申请实施例提供的一种发送端设备的结构示意图,该发送端设备可以是客户端设备,也可以是服务端设备,且可以实现上述方法实施例中由发送端设备执行的步骤。如图9所示,该发送端设备包括:

连接模块401,用于与接收端设备建立传输层连接。该连接模块401的功能实现可以参考上述方法实施例中步骤101和步骤301的相关描述。

发送模块402,用于通过该传输层连接向该接收端设备发送第一报文和第二报文,使得该第一报文和该第二报文通过不同的路径传输至该接收端设备,其中,该第一报文和该第二报文的载荷相同,且该第一报文和第二报文用于供接收端设备保留其中一个报文,并丢弃另一个报文。该发送模块402的功能实现可以参考上述方法实施例中步骤102的相关描述。

可选地,该连接模块401,可以用于与接收端设备建立第一传输层连接和第二传输层连接。该连接模块401的功能实现还可以参考上述方法实施例中步骤206和步骤207的相关描述。

该发送模块402,可以用于通过该第一传输层连接向接收端设备发送第一报文,并通过该第二传输层连接向接收端设备发送第二报文。该发送模块402的功能实现还可以参考上述方法实施例中步骤208的相关描述。

可选地,该第一传输层连接的源地址与第二传输层连接的源地址不同;和/或,该第一传输层连接的目的地址与第二传输层连接的目的地址不同。

可选地,该第一传输层连接的源地址与第二传输层连接的源地址不同,且该发送端设备与一个或多个网关设备连接;或者,该第一传输层连接的源地址与第二传输层连接的源地址相同,且该发送端设备与一个网关设备连接。

可选地,该第一传输层连接和第二传输层连接绑定至发送端设备的同一个套接字接口,且绑定至接收端设备的同一个套接字接口。

可选地,该发送端设备为客户端设备,该接收端设备为服务端设备;该连接模块401可以用于:向服务端设备发送第一连接请求报文和第二连接请求报文;接收服务端设备基于该第一连接请求报文发送的第一请求响应报文,以及基于该第二连接请求报文发送的第二请求响应报文;基于该第一请求响应报文向服务端设备发送第一响应报文,以与该服务端设备建立第一传输层连接;基于该第二请求响应报文向服务端设备发送第二响应报文,以与该服务端设备建立第二传输层连接。其中,该第一连接请求报文和第二连接请求报文中均包括指示信息,该指示信息用于指示该第一传输层连接和第二传输层连接绑定至客户端设备的同一个套接字接口。

可选地,该连接模块401可以用于:调用绑定函数,以将该第一传输层连接的源地址和第二传输层连接的源地址绑定至客户端设备的同一个套接字接口;以及调用连接函数,以向服务端设备发送第一连接请求报文和第二连接请求报文。其中,该连接函数的参数包括第一传输层连接的目的地址,以及第二传输层连接的目的地址。

该连接模块401的功能实现还可以参考上述方法实施例中步骤201、步骤203和步骤205的相关描述。

可选地,该发送端设备为服务端设备,该接收端设备为客户端设备;该连接模块401可以用于:接收客户端设备发送的第一连接请求报文和第二连接请求报文,该第一连接请求报文和第二连接请求报文中均包括指示信息,该指示信息用于指示该第一传输层连接和第二传输层连接绑定至客户端设备的同一个套接字接口;基于该第一连接请求报文向客户端设备发送第一请求响应报文,并基于该第二连接请求报文向客户端设备发送第二请求响应报文;接收客户端设备基于该第一请求响应报文发送的第一响应报文,以与客户端设备建立第一传输层连接;以及接收客户端设备基于该第二请求响应报文发送的第二响应报文,以与客户端设备建立第二传输层连接。该连接模块401的功能实现还可以参考上述方法实施例中步骤203和步骤205的相关描述。

该发送模块402可以用于:基于该指示信息,在确定该第一传输层连接和第二传输层连接均建立完成后,通过该第一传输层连接向接收端设备发送第一报文,并通过该第二传输层连接向接收端设备发送第二报文。

可选地,该连接模块401还可以用于:在接收该客户端设备发送的第一连接请求报文和第二连接请求报文之前,调用绑定函数,以将该第一传输层连接的源地址和第二传输层连接的源地址绑定至该服务端设备的同一个套接字接口,以及调用监听函数,以接收客户端设备发送的第一连接请求报文和第二连接请求报文。该连接模块401的功能实现还可以参考上述方法实施例中步骤202和步骤204的相关描述。

可选地,该指示信息包括客户端设备生成的随机数。

可选地,该第一连接请求报文中携带的指示信息包括该第二传输层连接的五元组信息;该第二连接请求报文中携带的指示信息包括该第一传输层连接的五元组信息。

可选地,该第一连接请求报文和第二连接请求报文均包括传输层报文头,该传输层报文头中的选项字段中携带有该指示信息。

可选地,该第一连接请求报文和第二连接请求报文中还均可以包括连接个数;该连接个数用于指示绑定至客户端设备的同一个套接字接口的传输层连接的个数,且该连接个数大于或等于2。

可选地,该连接模块401还可以用于与接收端设备建立第三传输层连接。

该发送模块402还可以用于过该第三传输层连接向该接收端设备发送第三报文,使得该第一报文、第二报文和第三报文通过不同的路径传输至该接收端设备。其中,该第一报文、第二报文和第三报文的载荷相同,且该第一报文、第二报文和第三报文用于供接收端设备保留其中一个报文,并丢弃其他报文。

可选地,该第一报文和第二报文中还均包括多发选收标记,该多发选收标记用于指示网关设备将该第一报文和第二报文通过不同的路径传输至接收端设备。

可选地,该第一报文和第二报文均可以为IPv6报文,该IPv6报文的扩展报文头中包括该多发选收标记。

可选地,如图9所示,该发送端设备还可以包括:

接收模块403,用于通过该传输层连接接收该接收端设备发送的第三响应报文和第四响应报文。其中,该第三响应报文是接收端设备在接收到第一报文后发送的,该第四响应报文是接收端设备在接收到第二报文后发送的。该接收模块403的功能实现可以参考上述方法实施例中步骤210和步骤211的相关描述。

丢弃模块404,用于将该第三响应报文和第四响应报文中在后接收到的响应报文丢弃。该丢弃模块404的功能实现可以参考上述方法实施例中步骤212的相关描述。

可选地,该传输层连接可以为TCP连接、UDP连接、SCTP连接、QUIC或者MPTCP连接。

综上所述,本申请实施例提供了一种发送端设备,该发送端设备能够与接收端设备之间建立传输层连接,并能够通过该传输层连接向接收端设备发送第一报文和第二报文,且该第一报文和第二报文能够通过不同的路径传输至接收端设备。由于该第一报文和第二报文的载荷相同,因此接收端设备能够保留其中一个报文,并丢弃另一个报文。基于此,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。

图10是本申请实施例提供的一种接收端设备的结构示意图,该接收端设备可以是客户端设备,也可以是服务端设备,且可以实现上述方法实施例中由接收端设备执行的步骤。如图10所示,该接收端设备包括:

连接模块501,用于与发送端设备建立传输层连接。该连接模块501的功能实现可以参考上述方法实施例中步骤101和步骤301的相关描述。

接收模块502,用于通过该传输层连接接收发送端设备发送的第一报文和第二报文,该第一报文和第二报文的载荷相同,且该第一报文和第二报文通过不同的路径传输至接收端设备。该接收模块502的功能实现可以参考上述方法实施例中步骤102和步骤303的相关描述。

丢弃模块503,用于将该第一报文和第二报文中在后接收到的一个报文丢弃。该丢弃模块503的功能实现可以参考上述方法实施例中步骤103、步骤209和步骤304的相关描述。

可选地,该连接模块501,可以用于与发送端设备建立第一传输层连接和第二传输层连接。该连接模块501的功能实现还可以参考上述方法实施例中步骤201至步骤207的相关描述。

该接收模块502,可以用于通过该第一传输层连接接收发送端设备发送的第一报文,并通过该第二传输层连接接收发送端设备发送的第二报文。该接收模块502的功能实现还可以参考上述方法实施例中步骤208的相关描述。

可选地,该第一传输层连接和第二传输层连接绑定至发送端设备的同一个套接字接口,且绑定至接收端设备的同一个套接字接口。

可选地,该第一传输层连接的源地址和第二传输层连接的源地址不同;和/或,该第一传输层连接的目的地址和第二传输层连接的目的地址不同。

可选地,如图10所示,该接收端设备还可以包括:

发送模块504,用于基于接收到第一报文,通过该传输层连接向发送端设备发送第三响应报文;以及基于接收到该二报文,通过该传输层连接向发送端设备发送第四响应报文。其中,该第三响应报文和第四响应报文用于供发送端设备保留其中一个报文,并丢弃另一个报文。该发送模块504的功能实现还可以参考上述方法实施例中步骤210和步骤211的相关描述。

可选地,该传输层连接可以为TCP连接、UDP连接、SCTP连接、QUIC或者MPTCP连接。

综上所述,本申请实施例提供了一种接收端设备,该接收端设备能够与发送端设备之间建立传输层连接,并能够通过该传输层连接接收该发送端设备发送的第一报文和第二报文,且该第一报文和第二报文能够通过不同的路径传输至接收端设备。由于该第一报文和第二报文的载荷相同,因此接收端设备能够保留其中一个报文,并丢弃另一个报文。基于此,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。

图11是本申请实施例提供的一种网关设备的结构示意图,该网关设备可以应用于报文传输系统,且能够与该报文传输系统中的发送端设备连接。其中,该发送端设备可以是客户端设备,也可以是服务端设备,且可以实现上述方法实施例中由网关设备执行的步骤。如图11所示,该网关设备包括:

接收模块601,用于接收发送端设备发送的第一报文和第二报文,该第一报文和第二报文均包括多发选收标记。该接收模块601的功能实现可以参考上述方法实施例中步骤302的相关描述。

发送模块602,用于基于该多发选收标记,将第一报文和第二报文通过不同的路径传输至接收端设备,以使该接收端设备保留该第一报文和第二报文中的一个报文,并丢弃另一个报文。其中,该发送端设备与接收端设备之间建立有传输层连接。该发送模块602的功能实现可以参考上述方法实施例中步骤303和步骤304的相关描述。

可选地,该第一报文和第二报文均可以为IPv6报文,该IPv6报文的扩展报文头中包括该多发选收标记。

综上所述,本申请实施例提供了一种网关设备,该网关设备能够接收发送端设备发送的载荷相同的第一报文和第二报文,且该第一报文和第二报文中均包括多发选收标记。网关设备能够基于该多发选收标记,通过不同的路径将该两个报文传输接收端设备,且接收端设备能够保留其中一个报文,并丢弃另一个报文。基于此,发送端设备和接收端设备能够实现报文的双发选收。相比于报文丢包后重传,该双方选收的方式不仅可以确保报文传输时的可靠性,且可以避免引入端到端的通信时延和抖动,有效确保了网络服务质量。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的发送端设备、接收端设备、网关设备以及各模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

应理解的是,本申请实施例提供的发送端设备、接收端设备和网关设备还可以用特定应用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logic device,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logical device,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。此外,也可以通过软件实现上述方法实施例提供的报文传输方法,当通过软件实现上述方法实施例提供的报文传输方法时,该发送端设备、接收端设备和网关设备中的各个功能模块也可以为软件模块。

图12是本申请实施例提供的一种报文传输设备的结构示意图。该报文传输设备可以应用于诸如图1、图6或图7所示系统,且可以为该系统中的发送端设备、接收端设备或网关设备。参考图12,该报文传输设备包括:处理器701、存储器702、网络接口703和总线704。

其中,存储器702中存储有计算机程序7021,计算机程序7021用于实现各种应用功能。处理器701用于执行该计算机程序7021以实现上述方法实施例提供的应用于发送端设备、接收端设备或网关设备的报文传输方法。

处理器701可以是中央处理器(central processing unit,CPU),该处理器701还可以是其他通用处理器、数字信号处理器(digital signal processor,DSP)、ASIC、FPGA、图形处理器(graphics processing unit,GPU)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器。

存储器702可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data date SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DRRAM)。

网络接口703可以为多个,且网络接口703用于实现与其他设备之间的通信连接(可以是有线或者无线)。其中,在本申请实施例中,网络接口703用于收发报文。其中,其他设备可以是终端、服务器、VM等设备或其它网络设备。

总线704用于连接处理器701、存储器702和网络接口703。并且,总线704除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线704。

若该报文传输设备为发送端设备,则处理器701用于通过网络接口703与接收端设备建立传输层连接,并用于通过该传输层连接向接收端设备发送第一报文和第二报文,使得该第一报文和第二报文通过不同的路径传输至接收端设备。其中,该第一报文和第二报文的载荷相同,且第一报文和第二报文用于供接收端设备保留其中一个报文,并丢弃另一个报文。该处理器701的详细处理过程请参考上述图3、图4和图8所示方法实施例中由发送端设备执行的步骤,这里不再赘述。

若该报文传输设备为接收端设备,则处理器701用于通过网络接口703与发送端设备建立传输层连接,并通过该传输层连接接收该发送端设备发送的第一报文和第二报文,以及将该第一报文和第二报文中在后接收到的一个报文丢弃。其中,该第一报文和第二报文的载荷相同,且该第一报文和第二报文通过不同的路径传输至接收端设备。该处理器701的详细处理过程请参考上述图3、图4和图8所示方法实施例中由接收端设备执行的步骤,这里不再赘述。

若该报文传输设备为网关设备,则处理器701用于通过网络接口703接收发送端设备发送的第一报文和第二报文,该第一报文和第二报文均包括多发选收标记;以及用于基于该多发选收标记,将该第一报文和第二报文通过不同的路径传输至接收端设备,以使接收端设备保留第一报文和第二报文中的一个报文,并丢弃另一个报文。其中,发送端设备与接收端设备之间建立有传输层连接。该处理器701的详细处理过程请参考上述图8所示方法实施例中由网关设备执行的步骤,这里不再赘述。

图13是本申请实施例提供的另一种报文传输设备的结构示意图。该报文传输设备可以应用于诸如图1、图6或图7所示系统,且可以为该系统中的发送端设备、接收端设备或网关设备。如图13所示,该报文传输设备可以包括:主控板801和至少一个接口板(接口板也称为线卡或业务板),例如图13中示出了接口板802和接口板803。多个接口板的情况下网络设备还可以包括交换网板804,该交换网板804用于完成各接口板之间的数据交换。

其中,主控板801也称为主处理单元(main processing unit,MPU)或路由处理卡(route processor card),主控板801用于完成系统管理、设备维护和协议处理等功能。主控板801上主要有3类功能单元:系统管理控制单元、系统时钟单元和系统维护单元。主控板801包括:中央处理器8011和存储器8012。

接口板802和803也称为线路接口单元卡(line processing unit,LPU)、线卡(line card)或业务板,接口板用于提供各种业务接口,并实现报文的转发。其中,接口板所提供的业务接口可以包括:基于SONET/SDH的数据包(packet over SONET/SDH,POS)接口、千兆以太网(gigabit Ethernet,GE)接口和异步传输模式(asynchronous transfer mode,ATM)接口等。其中,SONET是指同步光纤网络(synchronous optical network),SDH是指同步数字体系(synchronous digital hierarchy)。主控板801、接口板802以及接口板803之间通过系统总线与系统背板相连以实现互通。如图13所示,接口板802上包括一个或多个中央处理器8021。中央处理器8021用于对接口板802进行控制管理并与主控板801上的中央处理器8011进行通信。接口板802上的存储器8024用于存储转发表项,网络处理器8022可以通过查找存储器8024中存储的转发表项进行报文的转发。存储器8024还可以用于存储程序代码。

该接口板802还包括一个或多个物理接口卡8023,该一个或多个物理接口卡8023用于接收上一跳节点发送的报文,并根据中央处理器8021的指示向下一跳节点发送处理后的报文。

此外,可以理解的是,图13中的接口板802中的中央处理器8021和/或网络处理器8022可以是专用硬件或芯片,如可以采用ASIC来实现上述功能,这种实现方式即为通常所说的转发面采用专用硬件或芯片处理的方式。在另外的实施方式中,所述中央处理器8021和/或网络处理器8022也可以采用通用的处理器,如通用的CPU来实现以上描述的功能。

此外应理解的是,主控板801可能有一块或多块,有多块的时候可以包括主用主控板和备用主控板。接口板可能有一块或多块,该网络设备的数据处理能力越强,提供的接口板越多。如图13所示,网络设备包括接口板802和接口板803。当采用分布式的转发机制时,接口板803的结构与接口板802的结构基本相同,且接口板803上的操作与接口板802的操作基本相似,为了简洁,不再赘述。网络设备具有多块接口板的情况下,该多块接口板之间可以通过一块或多块交换网板804通信,且可以实现负荷分担和冗余备份,以提供大容量的数据交换和处理能力。

在集中式转发架构下,该网络设备可以不需要交换网板804,接口板承担整个系统的业务数据的处理功能。所以,分布式架构的网络设备的数据接入和处理能力要大于集中式架构的网络设备。具体采用哪种架构,取决于具体的组网部署场景,此处不做任何限定。

在本申请实施例中,存储器8012和存储器8024可以是ROM或可存储静态信息和指令的其它类型的静态存储设备,也可以是RAM或者可存储信息和指令的其它类型的动态存储设备,还可以是EEPROM、只读光盘(compact disc read-only Memory,CD-ROM)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。接口板802中的存储器8024可以是独立存在,并通过通信总线与中央处理器8021相连接;或者,存储器8024也可以和中央处理器8021集成在一起。主控板801中的存储器8012可以是独立存在,并通过通信总线与中央处理器8011相连接;或者,存储器8012也可以和中央处理器8011集成在一起。

存储器8024中存储的程序代码,由中央处理器8021来控制执行,存储器8012存储的程序代码,由中央处理器8011来控制执行。该中央处理器8021和/或中央处理器8011可以通过执行程序代码来实现上述实施例所提供的报文传输方法。存储器8024和/或存储器8012存储的程序代码中可以包括一个或多个软件单元。这一个或多个软件单元可以为图9至图11中任一附图所示的功能模块。

在本申请实施例中,该物理接口卡8023,可以是使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local area networks,WLAN)等。

可选地,图9至图12中任一附图所示的设备也可以采用图13所示的结构实现。

本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该计算机可读存储介质在计算机上运行时,使得计算机执行如上述方法实施例中由发送端设备、接收端设备或网关设备执行的步骤。

本申请实施例还提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述方法实施例中由发送端设备、接收端设备或网关设备执行的步骤。

本申请实施例还提供了一种报文传输系统,如图1所示,该报文传输系统包括发送端设备10和接收端设备20。

该发送端设备10用于实现上述方法实施例中由发送端设备10执行的方法。该接收端设备20用于实现上述方法实施例中由接收端设备执行的方法。

其中,该发送端设备10的结构可以如图9、图12或图13所示,该接收端设备20的结构可以如图10、图12或图13所示。

可选地,如图7所示,该系统还可以包括:网关设备GW1。该网关设备GW1可以用于实现上述方法实施例中由网关设备执行的方法。该网关设备GW1的结构可以如图11、图12或图13所示。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本申请实施例中,术语“第一”、“第二”和“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的构思和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

相关技术
  • 一种纠偏光电校准装置、校准系统以及校准方法
  • 用于电气开关装置的电流传感器的校准方法、校准设备和组装方法、相关联的电流传感器
  • 用于探测焦炉的探测装置及探测方法
技术分类

06120116564414