CN108123990B - 一种数据存储方法、数据存储系统及数据处理设备 - Google Patents
一种数据存储方法、数据存储系统及数据处理设备 Download PDFInfo
- Publication number
- CN108123990B CN108123990B CN201611094809.0A CN201611094809A CN108123990B CN 108123990 B CN108123990 B CN 108123990B CN 201611094809 A CN201611094809 A CN 201611094809A CN 108123990 B CN108123990 B CN 108123990B
- Authority
- CN
- China
- Prior art keywords
- data packet
- data
- sequence number
- host
- data packets
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9057—Arrangements for supporting packet reassembly or resequencing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种数据存储方法、数据存储系统及数据处理设备,用于解决现有技术中数据乱序存储的技术问题。所述方法包括:网络设备从待发送的均属于第一数据流的M个数据包中确定待依次发送的第一数据包和第二数据包为不连续的数据包,在第一数据包的第一标识字段中写入第二数据包的序列号信息以获得处理后的第一数据包,向主机顺序发送处理后的第一数据包和第二数据包;主机接收并解析处理后的第一数据包,以根据序列号信息获得主机在接收处理后的第一数据包后下一个待接收的数据包的序列号为第二序列号,将处理后的第一数据包存储于第一存储区域;接收第二数据包,并将第二数据包存储与第一存储区域不连续的第二存储区域。
Description
技术领域
本发明涉及存储技术领域,尤其涉及一种数据存储方法、数据存储系统及数据处理设备。
背景技术
目前主机在存储数据时一般是按照数据包接收时间的先后依次存储,即在默认情况下主机认为所接收到的数据包都是按照逻辑顺序先后到达的,所以按照接收时间的先后依次存储可以尽量保证数据的有序存储。具体地,主机可以预先分配多个有序内存,每个有序内存可以用于存储一个数据流的所有数据,预先分配的内存是连续的,这样可以使得依次所接收到的数据包能够按照按序分配的内存依次存储,以实现数据的有序存储。
然而在数据包的实际传输过程中,由于一些原因可能导致数据包乱序传输,那么当数据包乱序到达时,主机还是只能根据数据包到达的时间先后按照分配好的连续内存对乱序的数据包依序存储,然而由于数据包是乱序到达的,所以这将使得数据包与其预先分配的地址不对应,进而导致数据包乱序存储,不利于实际使用。并且,目前数据包的乱序传输还是普遍存在的问题,所以目前数据乱序存储的问题也比较普遍。
发明内容
本发明实施例提供一种数据存储方法、数据存储系统及数据处理设备,用于解决现有技术中数据乱序存储的技术问题。
第一方面,提供一种数据存储方法,该方法包括:网络设备从待发送的M个数据包中确定待依次发送的第一数据包和第二数据包为不连续的数据包,再在第一数据包的第一标识字段中写入第二数据包的序列号信息以获得处理后的第一数据包,进而再向主机顺序发送处理后的第一数据包和第二数据包。进一步地,主机在接收网络设备发送的处理后的第一数据包后解析处理后的第一数据包,以根据第二数据包的序列号信息获得主机在接收处理后的第一数据包后下一个待接收的数据包的序列号为第二序列号,然后将处理后的第一数据包存储于第一存储区域。主机接收第二数据包,并将第二数据包存储于与第一存储区域不连续的第二存储区域。其中,第二数据包的第二序列号与第一数据包的第一序列号不连续。
本发明实施例中,第二数据包的序列号信息用于指示第二数据包的第二序列号,序列号信息可以直接为第二序列号,或者序列号信息也可以为第二序列号与第一序列号之间的差值,也就是说,序列号信息可以直接表明第二序列号,或者也可以通过第一序列号间接表明第二序列号。
本发明实施例中,通过对第一数据包在第一标识字段中写入序列号信息以便将网络设备下一个将要向主机发送的不连续的数据包的序列号提前告知主机,这样可以便于主机在接收到与上一个所接收到的数据包不连续的数据包之前能够提前获知,进而可以无需如现有技术中那样只能以默认的连续的存储区域对不连续的数据包进行存储,并且可以根据每个数据包的序列号确定对应的存储区域,以便按照预先分配的存储方式对即使乱序接收的数据包也可以实现有序存储。
对于网络设备来说,在向主机发送数据包之前,可以将乱序的数据包进行保序传输,即按照序列号由小到大的顺序向主机依次发送,以确保主机能够按序接收数据包以尽量实现数据包的有序存储。同时,对于不连续的数据包,网络设备还可以对缺失之前的数据包进行处理(例如包头扩展),以便在传输的数据包中存在缺失的情况下,主机能够根据处理过的数据包提前知晓下一个将要接收的数据包到底的是哪一个数据包,以进一步地确保同一数据流中的数据包的有序存储。
结合第一方面,在第一方面的第一种可能的实现方式中,网络设备还可以从M个数据包中确定第一发送队列,并将第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机。其中,M个数据包不连续,第一发送队列为M个数据包中除N个数据包之外的数据包集合,即第一发送队列所包括的数据包为M个数据包中除N个数据包之外的其它数据包。并且,第一发送队列中包括第一数据包和第二数据包,以及N个数据包中包括第三数据包和第四数据包,而第三数据包为与第一发送队列中序列号最大的数据包连续的数据包,第四数据包为M个数据包中序列号最大的数据包,N为大于等于2且小于M的整数。
本发明实施例中,通过第一发送队列的方式向主机发送数据包,可以将网络设备所缓存的数据包尽快地转发给主机,以提高数据的传输效率,保证数据传输的及时性、连续性和有效性。
在本发明实施例中,将与第一发送队列中的最大序列号连续的序列号所对应的数据包留下,是为了便于在缺失的数据包到来时通过对该数据包进行包头扩展以将所缺失的数据包尽快转发给主机,因为已经所转发的数据包中的最大序列号的数据包在转发之前并未进行包头扩展,所以在下次接收数据包时,主机自然认为是与上次所接收的最后一个数据包(即上次所接收的数据包中序列号最大的数据包)连续的数据包,所以需要将与已经转发的数据包中序列号最大的数据包连续的数据包留下。
以及,将M个数据包中序列号最大的数据包留下,是为了便于在后续所接收到的数据包再次出现乱序时通过对该数据包进行包头扩展以便对后续乱序的数据包再次进行保序转发以实现数据包的有序存储,具体原理可以与前述将与所发送的数据包中的最大序列号连续的序列号所对应的数据包留下的原理进行类比。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,在将第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给机之后,网络设备还可以接收均属于第一数据流的K个数据包,并根据N个数据包中的P个数据包和K个数据包中的Q个数据包获得第二发送队列,再将第二发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机。
在本发明实施例中,通过预留下的数据包可以再将后续所接收的数据包进行转发,这样无论后续到达的数据包是否存在缺失,都可以通过所预留下的数据包对后续到达的数据包向主机转发,以尽量确保数据存储的有序性。同时,通过第二发送队列的方式向主机转发数据包,可以将数据包尽量多地尽快转发,以确保数据传输的及时性和有效性。
结合第一方面,在第一方面的第三种可能的实现方式中,网络设备可以将待发送的R个数据包中除序列号最大的数据包之外的数据包按照序列号由小到大的顺序依次发送给主机。其中,R个数据包为第二数据流中连续的数据包,R为不小于2的整数。第二数据流与第一数据流可以是同一数据流,或者也可以是不同的数据流。
本发明实施例中,将连续的R个数据包中的序列号最大的数据包留下而将其它的顺序转发,一方面是为了与已经转发的最后一个数据包连续,另一方面也可以在后续所接收到的数据包中存在缺失的数据包时通过对该序列号最大的数据包进行扩展以将不连续的其它数据包尽量顺序转发给主机,进而可以提前告知主机在该扩展后的数据包之后接收到的数据包到底的是哪一个数据包,以尽量使得主机能够对数据包进行对应、有序存储。
第二方面,提供一种数据存储方法,该方法包括:主机接收网络设备发送的第一数据包,并解析第一数据包以根据第一数据包中的第一标识字段获得主机在接收第一数据包后下一个待接收的第二数据包中的第二序列号,进而将第一数据包存储于第一存储区域,主机接收第二数据包,并将第二数据包存储于与第一存储区域不连续的第二存储区域。其中,第一数据包中包括第一序列号,第一序列号用于指示第一数据包在第一数据流中的逻辑顺序,第二数据包也属于第一数据流,第一标识字段中包括用于指示主机在接收第一数据包后下一个待接收的数据包的序列号信息,第一序列号与第二序列号不连续。
本发明实施例中,通过对第一数据包的包头进行扩展以便将网络设备下一个将要向主机发送的不连续的数据包的序列号提前告知主机,这样可以便于主机在接收到与上一个所接收到的数据包不连续的数据包之前能够提前获知,进而可以无需如现有技术中那样只能以默认的连续的存储区域对不连续的数据包进行存储,并且可以根据每个数据包的序列号确定对应的存储区域,以便按照预先分配的存储方式对即使乱序接收的数据包也能实现有序存储。
结合第二方面,在第二方面的第一种可能的实现方式中,主机在将第二数据包存储于第二存储区域之前,主机可以将第一存储地址列表中与第二序列号对应的存储地址所指示的存储区域作为第二存储区域。其中,第一存储地址列表中包含有主机为第一数据流分配的至少两个存储地址,属于第一数据流的每个数据包均与第一存储地址列表中的一个存储地址对应。
第三方面,提供一种数据存储系统,该数据存储系统包括网络设备和主机。其中,网络设备可以用于执行第一方面中的网络设备所执行的方法,以及主机可以用于执行第一方面中的主机所执行的方法。
第四方面,提供一种数据处理设备,该数据处理设备包括接收模块、解析模块和存储模块,数据处理设备所包括的模块可以用于执行第一方面中任一所述的数据存储方法。
第五方面,提供一种数据处理设备,在一个可能的设计中,该数据处理设备的结构中包括存储器和与存储器耦合的处理器,所述处理器被配置为支持数据处理设备执行第一方面中的数据存储方法中相应的功能,所述存储器被配置为用于存储数据处理设备所需存储的程序指令和数据。
本发明实施例中,主机对于待发送的不连续的数据包可以通过在前一个数据包的第一标识字段写入下一个待发送的数据包的序列号信息,以便于主机在接收上一个数据包时就能够提前知晓下一个待接收的数据包的序列号,以实现数据包与存储区域的对应数据,达到数据有序存储的目的。
本发明的这些方面或其它方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例中的数据存储方法的一种可能的应用场景的示意图;
图2为本发明实施例中的数据存储方法的流程图;
图3A-图3C为本发明实施例中数据包的存储顺序与存储区域的示意图;
图4为本发明实施例中的数据存储方法的另一流程图;
图5为本发明实施例中的数据存储系统的结构示意图;
图6为本发明实施例中的数据处理设备的结构示意图;
图7为本发明实施例中的数据处理设备的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
下面将结合说明书附图以及具体的实施方式对本发明实施例中的技术方案进行详细的说明。
首先对本文中的一些名词进行解释。
1、数据处理设备,可以是指具有数据处理功能的电子设备,同时该数据处理设备还具有数据存储功能,在该数据处理设备中还可以包括存储介质用于存储指令和数据。数据处理设备可以包括计算机设备、服务器、主机等等。
2、网络设备,可以是指处于网络侧中的中的电子设备,例如可以包括交换机、路由器等设备。本发明实施例中的网络设备具有缓存、处理和转发数据包的能力,为了便于本领域技术人员理解,在后续的描述中以网络设备为交换机为例进行介绍。
以下对本发明实施例的应用场景作简要介绍。
请参见图1,图1为本发明实施例中的数据存储方法的一种可能的应用场景的示意图,图1为数据中心中的数据包的传输流程示意图,可见,数据包可由客户端经过交换机缓存序列最终传输给主机。
在本发明实施例中,交换机可以具有可编程能力,即本发明实施例中的交换机可以是可编程交换机。随着SDN(Software Defined Network,可编程网络)的发展,可编程交换机在当前的数据中心已经普遍应用,而支持Open Flow协议的可编程交换机是一种主要的实现方式。其中,Open Flow协议规范定义了可编程交换机写入Flow Table(流表)的规则:交换机可对数据包进行字段解析,并且可以根据解析结果执行流表定义的Action(操作),典型的Action包括Forward(转发)和Drop(丢弃)等等,也可与执行扩展操作,例如对数据包的包头进行扩展后再转发等等。
由于缓存数据包的需要,数据包在进入数据中心以后,需要保证属于同一个数据流的数据包具有同一个连接,例如具有同一个TCP(Transmission Control Protocol,传输控制协议)连接或同一个UDP(User Datagram Protocol,用户数据报协议)连接,即需要确保属于同一数据流的所有数据包全部都通过同一交换机路径进行转发,这样在数据中心内部,同一个连接的所有数据包全部经过确定的交换机序列,不存在另一个到达主机的路径,如图1中所示的箭头序列所构成的传输路径表示一个交换机序列路径,即图1中所示的交换机1→交换机2→交换机3→主机1。在实际中,一个数据流可以包括多个数据包,例如包括9000个或10万个数据包,假设第一数据流包括1000个数据包,那么这1000个数据包均可以按照从交换机1→交换机2→交换机3→主机1的交换机序列路径进行传输。
总的来说,本发明实施例中的交换机可以具有以下功能:
1、具备缓存能力。即可以同时缓存一定数据量的数据包或一定数量的数据包。例如可以通过最大缓存数据量或缓存数据包的最大数量这两个参数来表征交换机的缓存能力。以最大缓存数据量来说,例如交换机最多只能缓存500M的数据量,在已经缓存满500M的数据时时,如果再接收到其它数据包则可以认为超出了交换机的缓存能力,又例如交换机最多只能缓存8个数据包,在已经缓存了8个数据包时,如果再接收到其它数据包则可以认为超出了交换机的缓存能力。
2、能够识别每个数据包所属的数据流。对于经过交换机的每一个数据包,交换机可以识别其所属的数据流,进而可以对经过交换机的所有数据包按数据流进行分类。
3、对属于同一数据流的多个数据包可以按照逻辑顺序进行排序。数据包在传输的过程中,可能乱序到达交换机,例如交换机按照时间先后依次接收序列号为m、m+4、m+2、m+1、m+3的这5个数据包,而通过交换机的排序处理,可以获得排序后的m、m+1、m+2、m+3、m+4,进一步地,交换机可以将排序后的数据包顺序发送给主机以便主机能够对数据包进行有序存储。其中,数据包的序列号可以用于表示数据包在其所属数据流中的逻辑顺序,而逻辑顺序例如可以是指生成数据包的顺序。
在本发明实施例中,为了便于描述,通常以数据包的序列号表示数据包本身,例如数据包A的序列号为m+3,那么也可以用m+3表示数据包A。也就是说,在本发明实施例中,序列号不仅具有表示数据包的逻辑顺序的作用,还可以直接通过序列号表示数据包本身。
4、能够判断属于同一数据流的多个数据包是否连续,即能够判断所缓存的属于同一数据流的多个数据包之间是否存在有缺失的数据包。例如,所缓存的5个数据包是m、m+1、m+2、m+3、m+4,由于这5个序列号是连续的,则可以认为这5个数据包之间不存在缺失的数据包,又例如,所缓存的5个数据包是m、m+1、m+3、m+4、m+5,由于在序列号m+1与m+3之间存在间断,那么则可以确定m、m+1、m+3、m+4、m+5这5个数据包之间存在缺失的数据包,即可以认为这5个数据包之间不是完全连续。
5、在多个数据包不连续时可以确定所缺失的数据包。继续以第4中的例子进行说明,在确定m、m+1、m+3、m+4、m+5这5个数据包不连续之后,进一步地可以确定是在m+1和m+3之间存在间断,那么则可以确定所缺失的数据包是m+2。
另外,在数据包进入数据中心之后,当确定某一连接的数据包发生乱序之后,交换机可以进行逐级缓存,并且越靠近主机的交换机的缓存能力可以越强,例如图1中所示的越靠近主机1的交换机的缓存能力可以越强,即交换机3的缓存能力可以大于交换机2的缓存能力。
以下对现有技术中的交换机对数据包进行缓存以及主机对数据包进行存储的流程进行简单说明。
以图1所示的箭头所指示的交换机序列路径为例,假设属于第一数据流的数据包均通过该交换机序列路径进行传输到主机1,并且为了便于本领域技术人员理解,以下以图1中的交换机3为例进行说明。
在正常情况下,数据包都是进行有序传输的,例如交换机3依次获得均属于同一个数据流中的m、m+1、m+2、m+3、m+4这5个数据包,并且顺序依次将这5个数据包先后发送给主机1,而主机1预先为该同一个数据流分配了对应的存储区域,并且由于默认是有序顺序接收的,所以也就按照连续的存储区域对所接收到的数据包顺序进行存储,例如主机1为m、m+1、m+2、m+3、m+4分配的连续的存储区域为A0、A1、A2、A3、A4对应的存储区域,如表1所示,在默认的有序接收的情况下,即可以按照表1所示的数据包与存储区域的对应关系依次顺序存储m、m+1、m+2、m+3、m+4这5个数据包。
表1
接收顺序 | 第1 | 第2 | 第3 | 第4 | 第5 | …… |
数据包 | m | m+1 | m+2 | m+3 | m+4 | …… |
存储区域 | A0 | A1 | A2 | A3 | A4 | …… |
然而在实际中,数据包可能乱序传输,例如交换机3按照时间先后依次接收m、m+1、m+3、m+4、m+2这5个数据包,并且在每接收一个数据包之后就发送给主机1,即主机1按照m、m+1、m+3、m+4、m+2的顺序依次先后接收到这5个数据包,由于在现有技术中,主机1默认是按序接收的数据包,所以还是会默认以连续的存储区域对所接收到的数据包按序存储,也就是说,即使是乱序接收但是存储还是依照之前分配好的连续的存储区域对数据包进行存储,即以表2所示的对应关系进行存储。
表2
接收顺序 | 第1 | 第2 | 第3 | 第4 | 第5 | …… |
数据包 | m | m+1 | m+3 | m+4 | m+2 | …… |
存储区域 | A0 | A1 | A2 | A3 | A4 | …… |
按照表2所示,可见m+3、m+4、m+2这几个数据包所存储的存储区域并非是预先为其分配的存储区域,m+3占据了原本为m+2所分配的存储区域A2,m+4占据了原本为m+3所分配的存储区域A3,而m+2占据了原本为m+4所分配的存储区域A4,这就导致了数据包与为其分配的存储区域不对应的情况发生,没有达到数据有序存储的目的。而由于在读取数据时,一般是按照已经分配好的存储区域读取数据,假设,需要按照依序读取m、m+1、m+2、m+3、m+4这个5个数据包,按照表2所示的对应关系,便会从存储区域A2内读取m+3,而原本为m+3分配的存储区域本来应该是A3,将导致从存储区域中读取的是m+3而并非是m+2,则将会导致数据读取出错。另外,在实际中,虽然主机在读取数据的过程可以先引入转换层以完成数据的物理地址到逻辑地址的映射以实现数据的有序读取,但是却也需要花费更大的开销,数据读取的效率较低。
根据前述介绍,可见在现有技术中,在对数据进行存储时可能存在数据包实际所存储的存储区域与预先分配的存储区域不对应的情形,这将导致数据包无法实现有序存储,进而导致数据读取出错。并且数据包在传输中发生乱序是比较常见的数据传输问题,所以有必要提出一种方式以解决前述问题。
鉴于此,本发明实施例提供一种数据存储方法,若确定所缓存的属于同一数据流的多个数据包中存在缺失的数据包,网络设备可以采用扩展包头的方式对当前向主机所发送的数据包进行扩展,以在该数据包的包头中写入下一个将要发送的数据包的序列号信息,那么当主机所接收到的数据包不连续时,可以使得主机根据网络设备所扩展的包头信息以确定下一将要接收的数据包到底是哪一个数据包,而并非是如现有技术中那样只能默认的按照有序接收并顺序存储,进而可以根据预先分配的数据包与存储区域的对应关系对数据包进行准确的对应存储,以实现数据包的有序存储。
以下以图2所示的各设备之间的交互示意图对本发明实施例中的数据存储方法进行说明。
如图2中所示,其中直接与主机进行交互的网络设备可以是如图1中所示的交换机3,即可以认为是一个交换机序列路径中将数据包传输给主机的过程中的最后一个交换机,例如可以理解为是逻辑上距离主机最近的交换机,通过该交换机可以将传输的数据包直接发送给主机而无需再发送给其它交换机,而图2中的前一网络设备可以是如图1中所示的交换机2。
图2所示的数据存储方法的流程如下。
S11、网络设备从前一网络设备接收M个数据包。
其中,M个数据包均属于同一个数据流,例如均属于第一数据流,且M为不小于2的整数,例如为3、5或7,等等,在具体实施过程中,M的最大取值可以根据交换机的缓存能力而定,例如交换机最大只能缓存8个数据包,那么M的最大取值不能超过8。
S12、网络设备从待发送的M个数据包中确定待依次发送的第一数据包和第二数据包不连续,即从M个数据包中确定不连续的第一数据包与第二数据包。
在具体实施过程中,网络设备可以根据数据包的序列号来判断数据包是否连续,而数据包的序列号可以用于表征数据包在所属数据流中的逻辑顺序,也就是说,M个数据包是否连续可以是指M个数据包的M个序列号是否按照逻辑顺序连续。
网络设备可以先判断M个数据包是否连续,如果M个数据包是连续的,那么自然也就不会存在不连续的数据包,在M个数据包不连续时,可以进一步地从M个数据包中确定不连续的第一数据包和第二数据包。
例如4个数据包的序列号分别是1、2、3、4,那么可以认为这4个数据包是连续的,其中不存在缺失的数据包。
又例如4个数据包的序列号分别是1、2、4、5,那么可以认为这4个数据包是不连续的,并且根据逻辑顺序,2、4之间缺少3,也就是说缺失的数据包的序列号是3,并且只有一个缺失的数据包。
再例如4个数据包的序列号分别是1、3、5、6,那么可以认为这4个数据包是不连续的,并且根据逻辑顺序,1、3之间缺少2以及3、5之间缺少4,也就是说这4个数据包中缺失了两个数据包,并且缺失的两个数据包的序列号分别为2和4。
也就是说,第一数据包与第二数据包不连续是指第一数据包的第一序列号与第二数据包的第二序列号在逻辑上不连续,例如第一数据包的第一序列号为m,而第二数据包的第二序列号为m+2,可见m与m+2之间存在缺失的序列号m+1,所以第一数据包与第二数据包不连续。而若第二数据包的第二序列号为m+1时,则认为第一数据包与第二数据包是逻辑上连续的数据包。
S13、网络设备在第一数据包的第一标识字段中写入第二数据包的序列号信息,以获得处理后的第一数据包。其中,序列号信息用于指示第二数据包的第二序列号,第二数据包的第二序列号与第一数据包的第一序列号不连续。
在本发明实施例中,在确定第一数据包与第二数据包不连续且需要顺序依次将第一数据包和第二数据包发送给主机时,网络设备可以先对第一数据包进行处理以获得处理后的第一数据包,具体来说是指对第一数据包进行重新封装,例如对第一数据包的包头进行扩展处理,即通过修改数据包的包头所包括的信息的方式以对数据包的包头进行重新封装。
在具体实施过程中,可以在第一数据包的第一标识字段中写入第二数据包的序列号信息。例如可以从第一数据包的包头所包括的字段中选择一个字段作为标识字段以存储第二数据包的序列号信息,或者也可以在第一数据包中的包头中新扩展出一个字段以用于存储第二数据包的序列号信息。
以第一数据包属于TCP连接为例,可以使用第一数据包的包头中的SequenceNumber字段用于存储第二数据包的序列号信息,再以第一数据包属于UDP连接来说,可以使用IP Header中的Fragment Offset字段来表示第二数据包的序列号信息。当然,根据传输协议的不同,还可以根据数据包的包头格式以选择对应的字段作为第一数据包的第一标识字段以存储第二数据包的序列号信息,此处就不再一一进行举例说明了。
当然,第一数据包中还可以同时包括用于表征第一数据包的逻辑顺序的第一序列号。由于第一数据包与第二数据包本就是不连续的两个数据包,那么自然第一序列号与第二序列号也不是连续的,继续前述的例子,例如第一序列号为m,以及第二序列号为m+2。
在具体实施过程中,用于表征第二数据包的第二序列号的序列号信息可以直接为第二序列号,例如为m+2,或者也可以是指第二序列号与第一序列号之间的差值,即m+2与m之间的差值,即为2。也就是说,序列号信息可以直接为第二序列号,或者也可以通过与第一序列号之间的差值或其它关系来间接表明第二序列号的值。
在具体实施过程中,对于连续的数据包可以不进行重新封装,只有当下一个数据包与上一个发送的数据包是不连续的数据包时才对下一个待发送的数据包重新封装。因为如果是连续的话而主机默认本来就是按照有序的进行存储,所以在这种情况下即使重新封装了也是浪费,并且还会增加交换机和主机的负担,花费较多的时间,所以本发明实施例中只在不连续的情况下进行包头扩展,这样可以在保证有序存储的前提下尽量提高数据包的传输效率,降低交换机和主机的处理负荷。
在大多数情况下,数据包一般都是连续、有序传输的,即出现缺失的情况一般较少,而在本发明实施例中,可以只在存在缺失的数据包时才对数据包进行重新封装以告知主机下一个将要接收的不连续的数据包的序列号,以避免主机在默认状态下而将不连续的数据包认为是连续的。所以,在本发明实施例中,可以是并非对每个数据包都进行包头扩展,而是在存在缺失的数据包的情形下才选择对一些数据包进行重新封装,而对于未重新封装的数据包来说,则默认为是连续的,那么,对于主机来说,在接收到一个数据包时怎么确定其是按照默认情况下按序存储呢,还是先要对其进行解析以明确其与上一个所接收的数据包并非是连续的呢?
基于前述考虑,在本发明实施例中,对于重新封装过的数据包可以设置特定的封装标识,该封装标识可以指示该数据包是被交换机重新封装过的,那么当主机在接收到一个数据包时若检测该数据包具有封装标识,则会对其进行解析以进一步地获得下一个将要接收的数据包的序列号,而对于不具有封装标识的数据包则默认按照有序存储的方式进行存储。
举例来说,对于m、m+1、m+3、m+4这4个数据包来说,由于m+1和m+3之间缺失有数据包m+2,交换机在将这4个数据包发送给主机之前,可以对m+1进行重新封装,以在m+1的包头中写入m+3的序列号,并且为m+1这个数据包设置封装标识,而对于其它的数据包则不进行处理,最后将m、m+1(重新封装过且设置有封装标识)、m+3、m+4依次发送给主机。
进一步地,为了便于本领域技术人员理解,以下对主机分别接收到前述的4个数据包之后的处理方式再进行介绍说明。
1、在接收到m之后,默认按照m对应的存储区域(例如表1中的A0)存储m。并且,由于m没有设置封装标识,即m没有进行扩展,所以默认下一个接收的数据包是与m连续的,即默认是m+1。
2、进一步地,在m之后再接收m+1。在接收m+1之后,可以检测m+1设置有封装标识,即说明m+1被重新封装过,那么则可以明确下一个将要接收的数据包并非是与m+1连续的数据包,即下一个将要接收的数据包并非是m+2。进一步地,为了明确在m+1之后下一个将接收的数据包的序列号,主机则可以对m+1进行解析,而在解析之后可以确定下一个将接收的数据包的序列号是m+3。
3、进一步地,在m+1之后再接收m+3。在接收m+3之后,根据上一个数数据包(即m+1)的提前提示,主机知晓此时接收到的数据包并非是默认连续的m+2,而是m+3,此时主机则可以以与m+3对应的存储区域(例如表1中的A3)来存储m+3,而不是如默认情况下的以m+2的存储区域(例如表1中的A2)对m+3进行存储,以保证数据包与存储区域的对应存储而达到数据包的存储有序的目的。
并且,由于m+3并未设置封装标识,所以主机可以知晓在m+3之后下一个将接收的数据包是与m+3连续的数据包,即m+4。
4、进一步地,在m+3之后再接收m+4。在接收m+4之后,可以直接将m+4存储在与m+4对应的存储区域(例如表1中的A4)。
通过对重新封装后的数据包设置封装标识的方式,类似为重新封装后的数据包添加了一个身份标识,主机通过该身份标识可以知晓对哪些数据包可以直接按序存储,以及对哪些数据包需要先进行解析以便获知下一个将接收的不连续的数据包的序列号,这样可以便于主机对数据包进行快速识别,以提高主机对数据包的存储效率。
当然,在具体实施过程中,还可以采用其它方式对重新封装过的数据包进行标识,以便于主机能够从所接收的众多数据包中分辨出哪些可以直接存储,哪些需要解析后再存储,而对于其它的方式本发明实施例不做限制。
S14、网络设备将处理后的第一数据包发送给主机。
S15、主机解析处理后第一数据包,以根据第一标识字段获得主机在接收处理后的第一数据包后下一个待接收的数据包的序列号为第二序列号。
S16、主机将处理后的第一数据包存储于第一存储区域。
S17、网络设备将第二数据包发送给主机。
S18、主机将第二数据包存储于第二存储区域。其中,第一存储区域可以是主机的内存空间的一部分,第二存储空间也可以是主机的内存空间的一部分,并且由于第一序列号与第二序列号是不连续的,所以第一存储区域与第二存储区域也是不连续的。
通过步骤S14-S18可以看出,主机是在对在接收到处理后的第一数据包之后就就先对处理后的第一数据包进行解析再将第一数据包进行存储,然后再接收第二数据包,进一步地再对第二数据包进行存储,在另一种可能的实施方式中,主机还可以先对处理后的第一数据包进行解析以获得第一序列号和第二序列号,然后再根据第一序列号和第二序列号分别确定用于存储第一数据包和第二数据包对应的存储区域,进一步地再对这两个数据包分别进行存储,而对于这两个数据包进行存储的时间先后可以不限制,例如先存储第一数据包再存储第二数据包,或者也可以先存储第二数据包再存储第一数据包。
在具体实施过程中,主机可以针对每个数据流分配一个存储地址列表,例如为第一数据流分配第一存储地址列表,例如表1所示。第一存储地址列表中可以包括多个存储地址,而每个存储地址与属于第一数据流的每个数据包一一对应,例如可以通过数据包的序列号与存储地址一一对应。
主机在将第二数据包进行存储之前,可以先从第一存储地址列表中查找与第二数据包的第二序列号对应的存储地址,进而可以将所确定的与第二序列号对应的存储地址所指示的存储区域确定为用于存储第二数据包的存储区域,例如将用于存储第二数据包的存储区域称作第二存储区域。
同理,对于第一数据包的存储,也可以按照存储第二数据包的方式确定预先分配的用于存储第一数据包的第一存储区域。以及,对于其它的数据包,均可以采用类似的处理方式,此处就不再赘述了。
在接收到属于第一数据流的数据包之后,就可以将属于第一数据流的数据包均存储到与第一存储地址列表分别对应的存储区域内。
参照表1所示的序列号与存储区域的对应关系,如果按照时间先后m、m+1、m+2、m+3、m+4顺序到达主机,那么则按照如图3A所示的先后顺序及存储区域将前述5个数据包进行存储,即先将m第1存储于A0中,再将m+1第2存储于A1中,再将m+2第3存储于A2中,再将m+3第4存储于A3中,最后将m+4第5存储于A4中。
但是如果是按照m、m+1、m+3、m+4、m+2的顺序到达主机,如果采用现有技术中的方案,那么则按照图3B所示的先后顺序及存储区域将前述的5个数据包进行存储,即先将即将m第1存储于A0中,再将m+1第2存储于A1中,再将m+3第3存储于A2中,再将m+4第4存储于A3中,最后将m+2第5存储于A4中。可见,其中m+3占用了原本属于m+2的存储区域A2,m+4占用了原本属于m+3的存储区域A3,而m+2占用了原本属于m+4的存储区域A4,进而出现数据包的实际存储区域与预先分配的连续的存储区域不对应的情形。
而当采用本发明实施例中的数据存储方法之后,可以如图3C所示,即先将m第1存储于A0中,再将m+1第2存储于A1中,再将m+3第3存储于A3中,再将m+4第4存储于A4中,最后将m+2第5存储于A2中。也就是说,不管数据包到达的顺序如何,均可以将数据包存储到预先分配的对应的存储区域中,以实现数据包按照预先分配的存储方式准确存储。
在上述例子中,是以接收一个数据包便将其存储后再对下一个数据包进行处理的情形而言,当然在实际中,主机可以在接收到多个数据包之后,只要能先分别确定每个数据包对应的存储区域即可,而对于每个数据包存储的时间先后可以不做特别限定,例如在接收到m+1和m+3这两个数据包之后,在分别明确了用于存储m+1的存储区域是A1以及用于存储m+3的存储区域是A3之后,也可以先存储m+3,再存储m+1,只要确保这两个数据包的存储区域是正确的,对于存储的时间先后可以不做具体限制。
在本发明实施例中,通过对第一数据包在第一标识字段中写入序列号信息以便将网络设备下一个将要向主机发送的不连续的数据包的序列号提前告知主机,这样可以便于主机在接收到与上一个所接收到的数据包不连续的数据包之前能够提前获知,进而可以无需如现有技术中那样只能以默认的连续的存储区域对不连续的数据包进行存储,并且可以根据每个数据包的序列号确定对应的存储区域,以便按照预先分配的存储方式对即使乱序接收的数据包也可以实现有序存储。
对于网络设备来说,在向主机发送数据包之前,可以将乱序的数据包进行保序传输,即按照序列号由小到大的顺序向主机依次发送,以确保主机能够按序接收数据包以尽量实现数据包的有序存储。同时,对于不连续的数据包,网络设备还可以对缺失之前的数据包进行处理(例如包头扩展),以便在传输的数据包中存在缺失的情况下,主机能够根据处理过的数据包提前知晓下一个将要接收的数据包到底的是哪一个数据包,以进一步地确保同一数据流中的数据包的有序存储。
在实际中,对于网络设备所缓存的属于同一数据流的多个数据包来说,是否存在缺失的数据包,以及缺失的数据包的数量或者序列号不同,网络设备可以采用对应的方式以确定对这些数据包如何发送,以及具体是将哪些数据包进行重新封装。为了便于本领域技术人员理解,以下对交换机对于数据包的缓存、转发和重新封装等过程进行说明。
大致上来说,可以根据待发送的多个数据包是否连续两种不同的判断结果来分别进行说明,也就是说,网络设备可以根据待发送的多个数据包是否连续两种不同的情形对应采用不同的转发策略以将数据包向主机进行转发。为了便于本领域技术人员理解,以下对待发送的多个数据包是否连续两种不同的判断结果分别进行说明。
第一种判断结果:待发送的多个数据包不连续。
在确定属于第一数据流的M个数据包不连续时,网络设备可以从M个数据包中确定第一发送队列,再将第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机。
在本发明实施例中,第一发送队列为M个数据包中除N个数据包之外的数据包集合,第一发送队列至少包括第一数据包和第二数据包,当然在确定出了第一发送队列之后,最终向主机发送时可以是先将第一数据包采用S13中的方式进行处理后所获得的处理后的第一数据包。
而N个数据包至少第三数据包和第四数据包,所述第三数据包为与所述第一发送队列中序列号最大的数据包连续的数据包,所述第四数据包为所述M个数据包中序列号最大的数据包,也就是说,除需要发送的第一发送队列所包括的数据包外,留下的数据包为至少两个数据包,除了前述说明的第三数据包和第四数据包之外,还可以再包括其它数据包,或者也可以不再包括其它数据包,具体情形可以根据M个数据包中所缺失的数据包的数量、所缺失的数据包的序列号和M个数据包的具体数量等因素确定。
通过设置第一发送队列的方式向主机发送数据包,可以将网络设备所缓存的数据包尽快地转发给主机,以提高数据的传输效率,保证数据的连续性和有效性。
在本发明实施例中,将第三数据包留下,是为了便于在缺失的数据包到来时通过对该数据包进行包头扩展以将所缺失的数据包尽快转发给主机,因为已经所转发的数据包中的最大序列号的数据包在转发之前并未进行包头扩展,所以在下次接收数据包时,主机自然认为是与上次所接收的最后一个数据包(即上次所接收的数据包中序列号最大的数据包)连续的数据包,所以需要将与已经转发的数据包中序列号最大的数据包连续的数据包留下。
以及,将第四数据包留下,是为了便于在后续所接收到的数据包再次出现乱序时通过对该数据包进行包头扩展以便对后续乱序的数据包再次进行保序转发以实现数据包的有序存储,具体原理可以与前述将与所发送的数据包中的最大序列号连续的序列号所对应的数据包留下的原理进行类比。
进一步地,在将第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机之后,网络设备还可以再接收均属于所述第一数据流的K个数据包,并根据N个数据包中的P个数据包和K个数据包中的Q个数据包获得第二发送队列,最后再将第二发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机。其中,P为小于等于N的正整数,Q为小于等于K的正整数。
在本发明实施例中,通过预留下的数据包可以再将后续所接收的数据包进行转发,这样无论后续到达的数据包是否存在缺失,都可以通过所预留下的数据包对后续到达的数据包向主机转发,以尽量确保数据存储的有序性。同时,通过第二发送队列的方式向主机转发数据包,可以将数据包尽量多地尽快转发,以确保数据传输的及时性和有效性。
为了便于本领域技术以下列举几种可能的情形进行举例说明。
第一种情形:M个数据包为m、m+1、m+3、m+4、m+5。
在第一种情形中,M个数据包中缺失了一个数据包,可见所缺失的是序列号为m+2的数据包,在具体实施过程中,例如可以按照表3所示的①②两种方式选择第一发送队列和需要预留的数据包。
表3
在第一种情形下的第①种方式中,发送的是m、m+1(扩展包头)、m+3,预留的数据包是m+4、m+5。其中,由于m+1与m+3之间存在缺失的数据包m+2,所以需要对m+1进行包头扩展以告知主机在m+1之后下一个将要接收的数据包是m+3。其中,留下m+4是为了下次发送时能够与上次已经发送的m+3形成默认上的连续,而留下m+5是为了后续再次存在缺失的数据包时对不连续的数据包进行尽量的有序转发,以确保主机对数据包的有序存储,其作用可以与已经发送的m+1的作用进行类比。
例如,下次是m+2到来,为了将所缺失的数据包尽快转发,则可以顺序发送m+4(扩展包头)、m+3而留下m+5。如果下次是m+7、m+8、m+9到来,则可以顺序发送m+4、m+5(扩展包头)、m+7而留下m+8、m+9。
在第一种情形下的第②种方式中,发送的是m,预留的数据包是m+1、m+3、m+4、m+5,这样如果在下次是m+2到来,则可以直接顺序发送m+1、m+2、m+3、m+4而留下m+5而无需对数据包进行包头扩展,如果下次到到来的是m+6、m+7、m+8,且此时超出了交换机的缓存能力,那么则可以再次发送m+1(扩展包头)、m+3、m+4、m+5、m+6而留下m+7、m+8。
可见,无论是第一种情形下的哪一种方式,在本次所预留的数据包中均包括m+5,即M个数据包中序列号最大的数据包。并且,在第①种方式中,第一发送队列中的最大序列号是m+3,而与m+3连续的序列号则是m+4,所以需要将m+4留下,而在第②种方式中,第一发送队列中的最大序列号是m,而与m连续的序列号则是m+1,所以需要将m+1留下。
第二种情形:M个数据包为m、m+1、m+3、m+4、m+6。
在第二种情形中,M个数据包中缺失了两个数据包,可见所缺失的两个数据包分别是序列号为m+2和m+5的数据包,在具体实施过程中,例如可以按照表4所示的①②两种方式选择第一发送队列和需要预留的数据包。
表4
以第二种情形下的第①种方式来说,首先顺序发送m、m+1(扩展包头)、m+3而留下m+4、m+6。
例如,当顺序到来m+7、m+2时,为了将所缺失的数据包尽快转发,则可以再次顺序发送m+4(扩展包头)、m+2(扩展包头)、m+6而留下m+7。
再例如,当下一个是m+5到来时,为了将所缺失的数据包尽快转发,则可以再次顺序发送m+4、m+5而留下m+6。
又例如,当顺序到来m+7、m+8、m+9且此时超过交换机的缓存能力时,此时可以再次顺序发送m+4(扩展包头)、m+6、m+7而将m+8、m+9留下。
可见,无论是对于第二种情形下的第①种方式还是第②种方式,都会将序列号最大的m+6留下,以及在第①种方式中需要将与已经发送的m+3连续的m+4留下,在第②种方式中需要将已经发送的m连续的m+1留下。
也就是说,在从M个数据包中确定第一发送队列时可以先确定M个数据包中的至少一个缺失的数据包,进一步再根据至少一个缺失的数据包从M个数据包中确定第一发送队列。
在一种可能的实施方式中,可以将所述M个数据包中序列号小于等于最小缺失序列号减2的数据包确定为需要发送的数据包,即如上述的第一种情形下的第②种方式和第二种情形下的第②种方式。而其中的最小缺失序列号是指至少一个缺失的数据包中序列号最小的数据包的序列号,例如第二种情形下的第②种方式中,最小缺失序列号是指m+2而并非是m+4。
另外,还可以根据所缺失的数据包的数量不同而采用其它不同的方式以从M个数据包中确定需要发送的第一发送队列。
1、若M个数据包中只有一个缺失的数据包,例如前述的第一种情形。进一步地,若M个数据包中序列号最大和序列号第二大的两个数据包的序列号连续,可以先从M个数据包中选出序列号最大和序列号第二大的M-2个数据包,再从M-2个数据包中将序列号比所缺失的数据包的序列号小1的第一数据包重新进行封装以获得封装后的第一数据包,最后再将封装后的第一数据包和M-2个数据包除去第一数据包的数据包确定为第一发送队列所包括的数据包。
其中,在对第一数据包进行封装后,可以使得封装后的第一数据包包括第一序列号和第二序列号信息,第一序列号用于表征第一数据包在第一数据包所属的第一数据流中的逻辑顺序,而第二序列号信息用于指示主机在接收封装后的第一数据包后下一个将接收的第一数据流中的第二数据包的第二序列号,而第二序列号与第一序列号不连续。
结合到前述的第一种情形中的第①种方式来说,即可以先从M个数据包中选出除m+5和m+4的m、m+1、m+3。进一步地,再从m、m+1、m+3中选出序列号比所缺失的数据包(即m+2)的序列号小1的第一数据包(即m+1)进行重新封装以获得封装后的m+1,最后再将m、封装后的m+1、m+3确定为第一发送队列所包括的数据包。其中,在对m+1进行重新封装后,可以使得封装后的m+1不仅包括m+1的序列号,还可以包括m+3的序列号,那么主机在接收到封装后的m+1之后,可以明确下一个即将接收的是序列号为m+3的数据包,而并非是默认中的m+2,进而可以将m+1存储于与m+1对应的存储空间,并将m+3存储于m+3对应的存储空间,由于m+1与m+3不连续,那么与其分别对应的存储空间也可以不连续。
2、若M个数据包中包括两个缺失的数据包,例如前述的第二种情形。进一步地,若这两个缺失的数据包中的最大序列号比M个数据包中的最大序列号小1且比M个数据包中的第二大的序列号大1,则可以将M个数据包中除去序列号最大和第二大的两个数据包之外的数据包确定为第一发送队列所包括的数据包。结合到前述的第二种情形中的第①种方式来说,即可以将M个数据包中除去m+4、m+6之外的m、m+1、m+3确定为需要发送的数据包。
当然,还可以采用其它的方式从M个数据包中确定需要发送的第一发送队列,此处就不再一一进行举例说明了,在具体实施过程中,可以根据实际情况选择对应的发送策略。
第二种判断结果:待发送的多个数据包连续
网络设备将待发送的R个数据包中除序列号最大的数据包之外的数据包按照序列号由小到大的顺序依次发送给主机。其中,R个数据包为第二数据流中连续的数据包,R为不小于2的整数。
在确定R个数据包连续之后,直接将R个数据包中除去序列号最大的数据包之外的其它数据包顺序发送给主机。R个数据包属于第二数据流并且R个数据包为连续的数据包,而第二数据流与第一数据流可以是同一数据流,或者也可以是不同的数据流。
例如R个数据包是m、m+1、m+2、m+3、m+4这五个连续的数据包,则可以直接将m、m+1、m+2、m+3按照序列号由小到大的顺序依次发送给主机而将m+4留下。在本发明实施例中,为什么要将序列号最大的数据包(即m+4)留下呢,原因如下;
假设后续再接收m+6、m+7、m+8、m+9这四个数据包而m+5并未到来,那么此时交换机中所缓存的数据包是m+4、m+6、m+7、m+8、m+9,假设此时超出了交换机的缓存能力或者为了将数据包尽快转发以保证数据传输的效率,此时交换机可能需要对已经缓存的数据包进行转发,然而由于缺失了m+5,当将m+4发送后按序应该发送m+6而并非是m+5,所以此时需要对m+4的包头进行扩展以便于主机在接收到m+4后能够对m+4进行解析以明确下一个将要接收的数据包是m+6而并非是顺序的m+5。然而,由于之前在转发m、m+1、m+2、m+3这4个数据包时最后一个转发的是m+3,但是并未对m+3进行包头扩展就将m+3直接进行了转发,那么主机在接收到m+3之后由于检测到m+3并未重新封装,所以默认在m+3之后下一个所接收的数据包应该是m+4,这也就是为什么要将m+4留下的原因。
为了便于本领域技术人员理解,以下对留下m+4之后再持续接收的其它数据包的一些可能情形进行举例说明。
M个数据包为m、m+1、m+2、m+3、m+4。第一次发送m、m+1、m+2、m+3而留下m+4。
1、再接收到m+6、m+7、m+8、m+9,则转发m+4(扩展包头)、m+6、m+7、m+8,留下m+9。
2、再接收到m+5、m+10、m+11,则依序转发m+9(扩展包头)、m+5、m+10,而留下m+11。
其中,m+4(扩展包头)表示m+4这个数据包在转发之前是被扩展了包头的,即是重新封装过的,通过对m+4进行包头扩展,可以在m+4的包头信息中写入能够用于表明m+6的序列号的信息,以便于主机能够知晓在m+4后下一个将接收的数据包是m+6,而并非是默认有序状态下的m+5。当然,m+9(扩展包头)可以按照与m+4(扩展包头)相同的方式理解,以及,在本发明实施例中的后续描述中,如出现类似的描述均可以按照理解m+4(扩展包头)的方式进行理解,后续就不再一一进行重复说明了。
也就是说,在本发明实施例中,将连续的R个数据包中的序列号最大的数据包留下而将其它的顺序转发,一方面是为了与已经转发的最后一个数据包连续,另一方面也可以为在后续所接收到的数据包中存在缺失的数据包时通过对该序列号最大的数据包进行扩展以将不连续的其它数据包尽量顺序转发给主机,进而可以提前告知主机在该扩展后的数据包之后接收到的数据包到底的是哪一个数据包,以尽量使得主机能够对数据包进行对应、有序存储。
请参见图4,基于同一发明构思,本发明实施例提供另一种数据存储方法,图4所示的数据存储方法的流程描述如下:
S21、主机接收网络设备发送的第一数据包,其中,第一数据包中包括第一序列号,第一序列号用于指示第一数据包在第一数据流中的逻辑顺序;
S22、主机解析第一数据包,以根据第一数据包中的第一标识字段获得主机在接收第一数据包后下一个待接收的第二数据包的第二序列号;其中,第二数据包属于第一数据流,第一标识字段中包括用于指示主机在接收第一数据包后下一个待接收的数据包的序列号信息,第一序列号与第二序列号不连续;
S23、主机将第一数据包存储于第一存储区域;
S24、主机接收第二数据包;
S25、主机将第二数据包存储于与第二存储区域;其中,第二存储区域与第一存储区域不连续。
本发明实施例中的数据存储方法的实施原理在前述介绍图2所示的数据存储方法已经进行过介绍,所以本发明实施例中数据存储方法的实施可以参见前述图2所示的数据存储方法的实施,此处就不再赘述。
请参见图5,基于同一发明构思,本发明实施例提供一种数据存储系统,该数据存储系统包括网络设备501和主机502,其中:
网络设备501用于:
从待发送的M个数据包中确定待依次发送的第一数据包和第二数据包为不连续的数据包,其中,M个数据包均属于第一数据流,M为不小于2的整数;
在第一数据包的第一标识字段中写入第二数据包的序列号信息,以获得处理后的第一数据包,其中,序列号信息用于指示第二数据包的第二序列号,第二序列号与第一数据包的第一序列号不连续;以及
向主机502顺序发送处理后的第一数据包和第二数据包;其中,第一数据包和第二数据包均属于第一数据流;
主机502用于:
接收处理后的第一数据包;
解析处理后的第一数据包,以根据序列号信息获得主机502在接收处理后的第一数据包后下一个待接收的数据包的序列号为第二序列号;
将处理后第一数据包存储于第一存储区域;
接收第二数据包;
将第二数据包存储于第二存储区域,其中,第二存储区域与第一存储区域不连续。
在一种可能的实施方式中,网络设备501还可以用于:
从M个数据包中确定第一发送队列,其中,M个数据包不连续,第一发送队列为M个数据包中除N个数据包之外的数据包集合,第一发送队列中包括第一数据包和第二数据包,N个数据包中包括第三数据包和第四数据包,第三数据包为与第一发送队列中序列号最大的数据包连续的数据包,第四数据包为M个数据包中序列号最大的数据包,N为大于等于2且小于M的整数;
将第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机502。
在一种可能的实施方式中,网络设备501还可以用于:
在将第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机502之后,接收均属于第一数据流的K个数据包,K为正整数;
根据N个数据包中的P个数据包和K个数据包中的Q个数据包获得第二发送队列;其中,P为小于等于N的正整数,Q为小于等于K的正整数;
将第二发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给主机502。
在一种可能的实施方式中,网络设备501还可以用于:
将待发送的R个数据包中除序列号最大的数据包之外的数据包按照序列号由小到大的顺序依次发送给主机502;其中,R个数据包为第二数据流中连续的数据包,R为不小于2的整数。
本发明实施例中的数据存储系统可以用于执行前述任一所述的数据存储方法,因此,对于该数据存储系统中网络设备501和主机502的实施,可参考如前述的数据存储方法部分的描述,在此不多赘述。
请参见图6,基于同一发明构思,本发明实施例提供一种数据存储设备,该数据存储设备包括存储器601和处理器602,存储器601和处理器602可以电性连接,例如图6中所示的存储器601与处理器602通过总线600连接,或者也可以通过其它专门的连接线连接。
其中,处理器602可以是CPU(中央处理器)或ASIC(Application SpecificIntegrated Circuit,特定应用集成电路),可以是一个或多个用于控制程序执行的集成电路,可以是基带芯片,等等。
储存器601可以存储指令和/或数据,存储器601的数量可以是一个或多个,存储器601可以是ROM(Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)或磁盘存储器,等等。
本发明实施例中,处理器602可以用于:
接收网络设备发送的第一数据包,其中,第一数据包中包括第一序列号,第一序列号用于指示第一数据包在第一数据流中的逻辑顺序;
解析第一数据包,以根据第一数据包中的第一标识字段获得主机在接收第一数据包后下一个待接收的第二数据包的第二序列号,其中,第二数据包属于第一数据流,第一标识字段中包括用于指示主机下一个待接收的数据包的序列号信息,第一序列号与第二序列号不连续;
将第一数据包存储于存储器601中的第一存储区域;
接收第二数据包;以及
将第二数据包存储于存储器601中的第二存储区域,其中,第二存储区域与第一存储区域不连续。
在一种可能的实施方式中,处理器602还可以用于将第一存储地址列表中与第二序列号对应的存储地址所指示的存储区域作为第二存储区域,其中,第一存储地址列表中包含有主机为第一数据流分配的至少两个存储地址。
通过对处理器602进行设计编程,将前述任一的数据存储方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行前述前述任一的数据存储方法,如何对处理器602进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
请参见图7,基于同一发明构思,本发明实施例还提供另一种数据存储设备,该存储设备包括接收模块701、解析模块702和存储模块703。其中:
接收模块701,用于接收网络设备发送的第一数据包,其中,第一数据包中包括第一序列号,第一序列号用于指示第一数据包在第一数据流中的逻辑顺序;
解析模块702,用于解析第一数据包,以根据第一数据包中的第一标识字段获得主机在接收第一数据包后下一个待接收的第二数据包的第二序列号;其中,第二数据包属于第一数据流,第一标识字段中包括用于指示主机在接收第一数据包后下一个待接收的数据包的序列号信息,第一序列号与第二序列号不连续;
存储模块703,用于将第一数据包存储于第一存储区域;
接收模块701,还用于接收第二数据包;
存储模块703,还用于将第二数据包存储于与第二存储区域;其中,第二存储区域与第一存储区域不连续。
本发明实施例中的数据处理设备可以用于执行前述任一的数据存储方法,对于该数据存储设备中的各模块所实现的功能等,可参考如前方法部分的描述,在此不多赘述。
以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (12)
1.一种数据存储方法,其特征在于,包括:
网络设备从待发送的M个数据包中确定待依次发送的第一数据包和第二数据包为不连续的数据包,其中,所述M个数据包均属于第一数据流,M为不小于2的整数;
所述网络设备在所述第一数据包的第一标识字段中写入所述第二数据包的序列号信息,以获得处理后的第一数据包,其中,所述序列号信息用于指示所述第二数据包的第二序列号,所述第二序列号与所述第一数据包的第一序列号不连续;
所述网络设备向主机顺序发送所述处理后的第一数据包和所述第二数据包;
所述主机接收所述处理后的第一数据包;
所述主机解析所述处理后的第一数据包,以根据所述序列号信息获得所述主机在接收所述处理后的第一数据包后下一个待接收的数据包的序列号为所述第二序列号;
所述主机将所述处理后的第一数据包存储于第一存储区域;
所述主机接收所述第二数据包;
所述主机将所述第二数据包存储于第二存储区域,其中,所述第二存储区域是与所述第二序列号所对应的存储区域,所述第二存储区域与所述第一存储区域不连续。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述网络设备从所述M个数据包中确定第一发送队列;其中,所述M个数据包不连续,所述第一发送队列为所述M个数据包中除N个数据包之外的数据包集合,所述第一发送队列中包括所述第一数据包和所述第二数据包,所述N个数据包中包括第三数据包和第四数据包,所述第三数据包为与所述第一发送队列中序列号最大的数据包连续的数据包,所述第四数据包为所述M个数据包中序列号最大的数据包,N为大于等于2且小于M的整数;
所述网络设备向主机顺序发送所述处理后的第一数据包和所述第二数据包,包括:
所述网络设备将所述第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给所述主机。
3.如权利要求2所述的方法,其特征在于,在所述网络设备将所述第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给所述主机之后,所述方法还包括:
所述网络设备接收均属于所述第一数据流的K个数据包,K为正整数;
所述网络设备根据所述N个数据包中的P个数据包和所述K个数据包中的Q个数据包获得第二发送队列,其中,P为小于等于N的正整数,Q为小于等于K的正整数;
所述网络设备将所述第二发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给所述主机。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述网络设备将待发送的R个数据包中除序列号最大的数据包之外的数据包按照序列号由小到大的顺序依次发送给所述主机,其中,所述R个数据包为第二数据流中连续的数据包,R为不小于2的整数。
5.一种数据存储方法,其特征在于,包括:
主机接收网络设备发送的第一数据包,其中,所述第一数据包中包括第一序列号,所述第一序列号用于指示所述第一数据包在第一数据流中的逻辑顺序;
所述主机解析所述第一数据包,以根据所述第一数据包中的第一标识字段获得所述主机在接收所述第一数据包后下一个待接收的第二数据包的第二序列号;其中,所述第二数据包属于所述第一数据流,所述第一标识字段中包括用于指示所述主机在接收所述第一数据包后下一个待接收的数据包的序列号信息,所述第一序列号与所述第二序列号不连续;
所述主机将所述第一数据包存储于第一存储区域;
所述主机接收所述第二数据包;
所述主机将所述第二数据包存储于第二存储区域;其中,所述第二存储区域是与所述第二序列号所对应的存储区域,所述第二存储区域与所述第一存储区域不连续。
6.如权利要求5所述的方法,其特征在于,在所述主机将所述第二数据包存储于第二存储区域之前,所述方法还包括:
所述主机将第一存储地址列表中与所述第二序列号对应的存储地址所指示的存储区域作为所述第二存储区域,其中,所述第一存储地址列表中包含有所述主机为所述第一数据流分配的至少两个存储地址。
7.一种数据存储系统,其特征在于,所述系统包括网络设备和主机,其中:
所述网络设备用于:
从待发送的M个数据包中确定待依次发送的第一数据包和第二数据包为不连续的数据包,其中,所述M个数据包均属于第一数据流,M为不小于2的整数;
在所述第一数据包的第一标识字段中写入所述第二数据包的序列号信息,以获得处理后的第一数据包,其中,所述序列号信息用于指示所述第二数据包的第二序列号,所述第二序列号与所述第一数据包的第一序列号不连续;以及
向所述主机顺序发送所述处理后的第一数据包和所述第二数据包;其中,所述第一数据包和所述第二数据包均属于第一数据流;
所述主机用于:
接收所述处理后的第一数据包;
解析所述处理后的第一数据包,以根据所述序列号信息获得所述主机在接收所述处理后的第一数据包后下一个待接收的数据包的序列号为所述第二序列号;
将所述处理后第一数据包存储于第一存储区域;
接收所述第二数据包;以及
将所述第二数据包存储于第二存储区域,其中,所述第二存储区域是与所述第二序列号所对应的存储区域,所述第二存储区域与所述第一存储区域不连续。
8.如权利要求7 所述的系统,其特征在于,所述网络设备还用于:
从所述M个数据包中确定第一发送队列;其中,所述M个数据包不连续,所述第一发送队列为所述M个数据包中除N个数据包之外的数据包集合,所述第一发送队列中包括所述第一数据包和所述第二数据包,所述N个数据包中包括第三数据包和第四数据包,所述第三数据包为与所述第一发送队列中序列号最大的数据包连续的数据包,所述第四数据包为所述M个数据包中序列号最大的数据包,N为大于等于2且小于M的整数;
将所述第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给所述主机。
9.如权利要求8所述的系统,其特征在于,所述网络设备还用于:
在将所述第一发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给所述主机之后,接收均属于所述第一数据流的K个数据包,K为正整数;
根据所述N个数据包中的P个数据包和所述K个数据包中的Q个数据包获得第二发送队列;其中,P为小于等于N的正整数,Q为小于等于K的正整数;
将所述第二发送队列中所包括的数据包按照序列号由小到大的顺序依次发送给所述主机。
10.如权利要求7所述的系统,其特征在于,所述网络设备还用于:
将待发送的R个数据包中除序列号最大的数据包之外的数据包按照序列号由小到大的顺序依次发送给所述主机;其中,所述R个数据包为第二数据流中连续的数据包,R为不小于2的整数。
11.一种数据处理设备,其特征在于,所述数据处理设备包括存储器与连接所述存储器的处理器;其中,所述处理器用于:
接收网络设备发送的第一数据包,其中,所述第一数据包中包括第一序列号,所述第一序列号用于指示所述第一数据包在第一数据流中的逻辑顺序;
解析所述第一数据包,以根据所述第一数据包中的第一标识字段获得在接收所述第一数据包后下一个待接收的第二数据包的第二序列号;其中,所述第二数据包属于所述第一数据流,所述第一标识字段中包括用于指示下一个待接收的数据包的序列号信息,所述第一序列号与所述第二序列号不连续;
将所述第一数据包存储于所述存储器中的第一存储区域;
接收所述第二数据包;以及
将所述第二数据包存储于所述存储器中的第二存储区域,其中,所述第二存储区域是与所述第二序列号所对应的存储区域,所述第二存储区域与所述第一存储区域不连续。
12.如权利要求11所述的数据处理设备,其特征在于,所述处理器还用于:
在将所述第二数据包存储于所述第二存储区域之前,将第一存储地址列表中与所述第二序列号对应的存储地址所指示的存储区域作为所述第二存储区域,其中,所述第一存储地址列表中包含有为所述第一数据流分配的至少两个存储地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611094809.0A CN108123990B (zh) | 2016-11-30 | 2016-11-30 | 一种数据存储方法、数据存储系统及数据处理设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611094809.0A CN108123990B (zh) | 2016-11-30 | 2016-11-30 | 一种数据存储方法、数据存储系统及数据处理设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108123990A CN108123990A (zh) | 2018-06-05 |
CN108123990B true CN108123990B (zh) | 2020-06-16 |
Family
ID=62226403
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611094809.0A Active CN108123990B (zh) | 2016-11-30 | 2016-11-30 | 一种数据存储方法、数据存储系统及数据处理设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108123990B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032500B (zh) * | 2018-06-11 | 2021-12-14 | 广州视源电子科技股份有限公司 | 单片机的数据存储方法及装置、单片机、存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005020590A (ja) * | 2003-06-27 | 2005-01-20 | Sony Corp | 通信装置、その方法およびそのシステム |
CN101662347A (zh) * | 2009-09-27 | 2010-03-03 | 华为技术有限公司 | 数据包处理方法、装置和系统 |
CN101771599A (zh) * | 2008-12-26 | 2010-07-07 | 中国移动通信集团公司 | 一种rtp数据包接收处理方法及装置 |
CN103501259A (zh) * | 2013-10-21 | 2014-01-08 | 腾讯科技(深圳)有限公司 | 一种丢包检测的方法及检测装置 |
CN105591843A (zh) * | 2016-02-06 | 2016-05-18 | 中国科学院计算技术研究所 | Tcp传输流中基于接收端的网络性能检测方法及系统 |
CN105871521A (zh) * | 2016-06-03 | 2016-08-17 | 浙江宇视科技有限公司 | 一种数据传输方法、装置及视频监控系统 |
CN106055504A (zh) * | 2016-05-17 | 2016-10-26 | 华为技术有限公司 | 控制数据传输的方法、装置及计算机设备 |
-
2016
- 2016-11-30 CN CN201611094809.0A patent/CN108123990B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005020590A (ja) * | 2003-06-27 | 2005-01-20 | Sony Corp | 通信装置、その方法およびそのシステム |
CN101771599A (zh) * | 2008-12-26 | 2010-07-07 | 中国移动通信集团公司 | 一种rtp数据包接收处理方法及装置 |
CN101662347A (zh) * | 2009-09-27 | 2010-03-03 | 华为技术有限公司 | 数据包处理方法、装置和系统 |
CN103501259A (zh) * | 2013-10-21 | 2014-01-08 | 腾讯科技(深圳)有限公司 | 一种丢包检测的方法及检测装置 |
CN105591843A (zh) * | 2016-02-06 | 2016-05-18 | 中国科学院计算技术研究所 | Tcp传输流中基于接收端的网络性能检测方法及系统 |
CN106055504A (zh) * | 2016-05-17 | 2016-10-26 | 华为技术有限公司 | 控制数据传输的方法、装置及计算机设备 |
CN105871521A (zh) * | 2016-06-03 | 2016-08-17 | 浙江宇视科技有限公司 | 一种数据传输方法、装置及视频监控系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108123990A (zh) | 2018-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11258710B2 (en) | Network traffic load balancing | |
CN111147564B (zh) | 数据文件传输方法、系统及通信终端 | |
US7813342B2 (en) | Method and apparatus for writing network packets into computer memory | |
CN102549988B (zh) | 路由器和由路由器执行的方法 | |
CN107426113B (zh) | 报文接收方法及网络设备 | |
US9846657B2 (en) | Electronic device for packing multiple commands in one compound command frame and electronic device for decoding and executing multiple commands packed in one compound command frame | |
CN110661725A (zh) | 用于对出口上的网络分组进行重排序的技术 | |
KR102126592B1 (ko) | 멀티코어 프로세서들에 대한 내부 및 외부 액세스를 갖는 룩-어사이드 프로세서 유닛 | |
CN113179216B (zh) | 一种寄存器的远程配置方法、计算机设备及存储介质 | |
JP2016149698A (ja) | パケット通信装置およびパケット受信処理方法 | |
JP5094482B2 (ja) | 処理装置及びその処理方法 | |
US8990422B1 (en) | TCP segmentation offload (TSO) using a hybrid approach of manipulating memory pointers and actual packet data | |
CN110768976B (zh) | 一种报文处理方法、装置及网络设备 | |
CN108123990B (zh) | 一种数据存储方法、数据存储系统及数据处理设备 | |
CN112511438B (zh) | 一种利用流表转发报文的方法、装置及计算机设备 | |
CN109474525B (zh) | 报文的处理方法、装置、设备及可读存储介质 | |
CN113973091A (zh) | 一种报文处理方法、网络设备以及相关设备 | |
US9559857B2 (en) | Preprocessing unit for network data | |
US20090285207A1 (en) | System and method for routing packets using tags | |
CN116260887A (zh) | 数据传输方法、数据发送装置、数据接收装置和存储介质 | |
JP2008136081A (ja) | データ転送装置およびデータ転送方法 | |
CN112422457B (zh) | 报文处理方法、装置和计算机存储介质 | |
CN108965169B (zh) | 一种报文传输方法、网卡控制器、网卡及电子设备 | |
CN114979028A (zh) | 一种数据包处理方法、装置以及存储介质 | |
CN113132273A (zh) | 一种数据转发方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |