CN103368703A - 数据包重传方法、数据包接收方法及装置 - Google Patents
数据包重传方法、数据包接收方法及装置 Download PDFInfo
- Publication number
- CN103368703A CN103368703A CN2012101033408A CN201210103340A CN103368703A CN 103368703 A CN103368703 A CN 103368703A CN 2012101033408 A CN2012101033408 A CN 2012101033408A CN 201210103340 A CN201210103340 A CN 201210103340A CN 103368703 A CN103368703 A CN 103368703A
- Authority
- CN
- China
- Prior art keywords
- packet
- sequence number
- message
- type
- receiving
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000013507 mapping Methods 0.000 claims abstract description 42
- 230000005540 biological transmission Effects 0.000 claims description 63
- 230000004044 response Effects 0.000 claims description 62
- 238000012545 processing Methods 0.000 claims description 46
- 230000008878 coupling Effects 0.000 claims description 6
- 238000010168 coupling process Methods 0.000 claims description 6
- 238000005859 coupling reaction Methods 0.000 claims description 6
- 230000007246 mechanism Effects 0.000 abstract description 15
- 239000002699 waste material Substances 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 21
- 101100258025 Schizosaccharomyces pombe (strain 972 / ATCC 24843) shk1 gene Proteins 0.000 description 8
- 101100296200 Mus musculus Pak3 gene Proteins 0.000 description 6
- 239000000284 extract Substances 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 101000691459 Homo sapiens Serine/threonine-protein kinase N2 Proteins 0.000 description 5
- 102100026180 Serine/threonine-protein kinase N2 Human genes 0.000 description 5
- 230000009467 reduction Effects 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000013011 mating Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1867—Arrangements specially adapted for the transmitter end
- H04L1/1887—Scheduling and prioritising arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
本发明提供一种数据包重传方法、数据包接收方法及装置。其中,重传方法包括:接收包括请求重传的数据包对应的收包总序列号的重传请求;根据请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取请求重传的数据包所属的消息类型和在自身所属的消息类型中的发包序列号;根据获取的请求重传的数据包所属的消息类型和在自身所属的消息类型中的发包序列号,向接收端重新发送请求重传的数据包和之后发送的与请求重传的数据包属于同一消息类型的数据包。本发明技术方案可以只重传同一类型的数据包,减少了重传的数据量,降低了重传机制造成的资源浪费。
Description
技术领域
本发明涉及链路重传技术,尤其涉及一种数据包重传方法、数据包接收方法及装置。
背景技术
快速互联通道(Quick Path Interconnect,QPI)是中央处理单元(CentralProcessing Unit,CPU)与CPU之间,CPU与输入输出集线器(Input Output Hub,IOH)之间乃至CPU与远端内存之间数据交换的重要高速通道。
现有QPI的实现方案包括QPI的协议层(Upper Layer)、链路层(LinkLayer)和物理层(Physical Layer)。QPI有两条数据包通路,一条是数据发送通路,一条是数据接收通路。对于发送通路:本地的协议层将数据包发给链路层;链路层将这些包发送给物理层的同时也存入重传缓冲器中;本地物理层将这些包发给远端的物理层。对于接收通路:本地物理层接收远端物理层发来的数据包,本地物理层将这些包发给链路层,链路层对这些数据包进行译码并判断是否有误,将无误的数据包发给协议层,并将译码信息分别发送给重传控制模块和系统控制模块。本地链路层会在接收到若干个固定个数的无误包后产生确认(ack)并告知对方(即远端),对方将重传缓冲器中的尾指针(tail)指向的数据清掉。如果有误,本地的链路层会将计数的错误包的序号(pkt_num)封装在重传请求(retry_request)中发送给对方;同时本地会丢弃后续接收到的包,直到收到重传响应(retry_response)。
在上述重传过程中,发送端会将第一个错误包以及在第一个错误包之后已经发送的其他包都重传,但实际上有些包是不需要重传的,因此,现有QPI的重传机制会造成资源浪费。
发明内容
本发明提供一种数据包重传方法、数据包接收方法及装置,用以降低数据重传造成的资源浪费。
本发明一方面提供一种数据包重传方法,包括:
接收重传请求,所述重传请求由发送端发送,所述重传请求包括请求重传的数据包对应的收包总序列号;
根据所述请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,所述发包总序列号为对发送的所有消息类型的数据包进行计数得到的序列号;
根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包。
本发明一方面提供一种数据包发送装置,包括:
第一接收模块,用于接收重传请求,所述重传请求由发送端发送,所述重传请求包括请求重传的数据包对应的收包总序列号;
第一处理模块,用于根据所述请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,所述发包总序列号为对发送的所有消息类型的数据包进行计数得到的序列号;
第一发送模块,用于根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包。
本发明另一方面提供一种数据包接收方法,包括:
接收发送端发送的第一数据包,修改收包总序列号以获取所述第一数据包对应的收包总序列号;所述收包总序列号为对接收的所有消息类型的数据包进行计数得到的序列号;所述第一数据包包括所述第一数据包所属的消息类型和所述第一数据包在自身所属的消息类型中的发包序列号;
当确定出所述第一数据包未发生错误时,根据所述第一数据包所属的消息类型获取所述第一数据包所属的消息类型的最后收包序列号,所述第一数据包所属的消息类型的最后收包序列号为在所述第一数据包之前最后接收到的与所述第一数据包属于同一消息类型的数据包在自身所属的消息类型中的发包序列号;
判断所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号是否连续;
当判断结果为所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号连续时,将所述第一数据包所属的消息类型的最后收包序列号更新为所述第一数据包在自身所属的消息类型中的发包序列号。
本发明另一方面提供一种数据包接收装置,包括:
第二接收模块,用于接收发送端发送的第一数据包,所述第一数据包包括所述第一数据包所属的消息类型和所述第一数据包在自身所属的消息类型中的发包序列号;
第二处理模块,用于在所述第二接收模块接收到所述第一数据包后,修改收包总序列号以获取所述第一数据包对应的收包总序列号,在确定出所述第一数据包未发生错误时,根据所述第一数据包所属的消息类型获取所述第一数据包所属的消息类型的最后收包序列号,并判断所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号是否连续,当判断结果为连续时,将所述第一数据包所属的消息类型的最后收包序列号更新为所述第一数据包在自身所属的消息类型中的发包序列号;所述收包总序列号为对接收的所有消息类型的数据包进行计数得到的序列号;所述第一数据包所属的消息类型的最后收包序列号为在所述第一数据包之前最后接收到的与所述第一数据包属于同一消息类型的数据包在自身所属的消息类型中的发包序列号。
本发明一方面提供的数据包重传方法及数据包发送装置,在接收到接收端发送的重传请求后,根据请求重传的数据包对应的收包从序列号以及本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取请求重传的数据包所属的消息类型以及请求重传的数据包在所属的消息类型中的发包序列号,进而获取请求重传的数据包和在请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包,将获取到的请求重传的数据包以及之后发送的与请求重传的数据包属于同一消息类型的数据包重新发送给接收端,实现了只重传同一类型的数据包,而其他类型的数据包在不需要重传的时候不用重传,与现有技术中要将请求重传的数据包和请求重传的数据包之后发送的所有数据包都重新发送给接收端的方案相比,减少了重传的数据量,降低了重传机制造成的资源浪费。
本发明另一方面提供的数据包接收方法及装置,在接收到数据包后对数据包进行解析,如果能够成功解数据包,会根据数据包中该数据包所属的消息类型和该数据包所属的消息类型中的发包序列号确定是否丢弃该数据包,如果不丢弃该数据包就更新该数据包所属的消息类型的最后收包序列号,以便于继续接收后续数据包,实现数据包的接收。本发明提供的数据包接收方法及装置与本发明提供的数据包重传方法及装置相配合,为发送端根据消息类型进行数据包的重传,减少重传数据量,降低重传造成的资源消耗提供了条件。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的数据包重传方法的流程图;
图2为本发明另一实施例提供的数据包重传方法的流程图;
图3为本发明一实施例提供的数据包接收方法的流程图;
图4为本发明一实施例提供的数据包重传过程示意图;
图5为本发明一实施例提供的数据包发送装置的结构示意图;
图6A为本发明另一实施例提供的数据包发送装置的结构示意图;
图6B为本发明另一实施例提供的QPI协议的链路层的结构示意图;
图7为本发明一实施例提供的数据包接收装置的结构示意图;
图8为本发明另一实施例提供的数据包接收装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一实施例提供的数据包重传方法的流程图。如图1所示,本实施例的数据包重传方法包括:
步骤101、接收重传请求,所述重传请求由发送端发送,所述重传请求包括请求重传的数据包对应的收包总序列号。
本实施例的执行主体为发送端。发送端可以是任何具有重传机制的设备或设备中的模块,例如发送端可以是服务器、路由设备等,也可以是中央处理单元(Central Processing Unit,CPU)中的QPI或互联芯片中的QPI等。同理,接收端也可以是任何具有重传机制的设备或设备中的模块,例如接收端也可以是服务器、路由设备等,也可以是CPU中的QPI或互联芯片中的QPI等。
其中,收包总序列号是接收端对接收的所有消息类型的数据包进行计数得到的序列号。而请求重传的数据包对应的收包总序列号为接收端在接收到该请求重传的数据包后计数到的收包总序列号。举例说明,假设接收端在接收到请求重传的数据包之前收包总序列号为10,接收到该请求重传的数据包后收包总序列号会加1变为11,则该请求重传的数据包对应的收包总序列号为11。
在数据传输过程中,发送端会向接收端发送数据包,并会对发送的所有消息类型的数据包进行计数,这样就会得到一个发包总序列号。其中,每个数据包对应的发包总序列号记录了每个被发送的数据包的发送序号。例如,第一个被发送的数据包对应的发包总序列号为1,第二个被发送的数据包对应的发包总序列号为2,...,第N个被发送的数据包对应的发包总序列号为N等。在此说明,这里所说的被发送的数据包是指第一次发送的数据包不包括重传的数据包,重传的数据包对应的发包总序列号也就是该数据包在第一次发送时对应的收包总序列号。
对接收端来说,会接收发送端发送的数据包,并且会按照协议规定解析接收到的数据包,如果能够成功解析数据包,则认为该数据包未发生错误,如果未能成功解析数据包,则认为该数据包发生错误。如果数据包发生错误,接收端就会向发送端发送重传请求。对接收端来说,也会对接收到的所有消息类型的数据包进行计数,这样就会得到一个收包总序列号。其中,每个数据包对应的收包总序列号记录了每个被接收的数据包的接收序号。例如,第一个被接收的数据包对应的收包总序列号为1,第二个被接收的数据包对应的收包总序列号为2,...,第N个被接收的数据包对应的收包总序列号为N等。在此说明,这里所说的被接收的数据包是指第一次接收的数据包不包括重传的数据包,重传的数据包对应的收包总序列号也就是该数据包在第一次被接收到时对应的收包总序列号。
对于同一数据包来说,发送端计数的该数据包对应的发包总序列号与接收端计数的该数据包对应的收包总序列号是相同的。基于此,接收端在向发送端发送重传请求时,可以将请求重传的数据包对应的收包总序列号添加在重传请求中,基于此发送端可以获知请求重传的是哪个数据包。
步骤102、根据请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包总序列号之间的映射关系,获取请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号。
其中,发包总序列号是由发送端对发送的所有消息类型的数据包进行计数得到的序列号。每个数据包对应的发包总序列号是发送该数据包后计数到的发包总序列号。
其中,对每个数据包来说都有其所属的消息类型。对于不同的协议来说,会有不同的消息类型,且消息类型允许根据实际应用进行修改和定义。例如,对于传输控制协议/因特网互联协议(Transmission Control Protocol/InternetProtocol,TCP/IP)协议来说,可以根据报文的类型定义两种消息类型,分别为互联网协议版本4(Internet Protocol version 4,IPv4)类型和互联网协议版本6(Internet Protocol version 6,IPv6)类型。其中,IPv4数据包的类型属于IPv4类型,IPv6数据包的类型属于IPv6类型。又例如,对于QPI协议主要包括六类消息类型,分别为:监听报文(SNOOP,SNP),源报文(HOME,HOM)、请求及响应报文,数据响应报文(Data Response,DRS),非数据响应报文(Non Data Response,NDR),非一致性旁路报文(Non CoherenceBypass,NCB)和非一致性标准报文(Non Coherence Standard,NCS)。
在本实施例中,发送端除了会对所有消息类型的数据包进行计数得到发包总序列号之外,还会对不同消息类型的数据包单独进行计数,得到每个消息类型的发包序列号。而且,发送端还会将发包总序列号和每个消息类型的发包序列号进行映射,将他们之间的映射关系存储在本地。其中,发包总序列号与每个消息类型的发包序列号之间的映射关系主要包括:每个被发送的数据包对应的发包总序列号、每个被发送的数据包所属的消息类型以及每个被发送的数据包在所属的消息类型中的发包序列号之间的对应关系。
基于此,当发送端接收到接收端发送的重传请求后,对重传请求进行解析,从重传请求中获取请求重传的数据包对应的收包总序列号。当发送端从接收端发送的重传请求中获取到请求重传的数据包对应的收包总序列号后,可以根据请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号。
可选的,发送端可以以映射关系表的方式存储发包总序列号和每个消息类型的发包序列号之间的映射关系,但不限于此。为便于理解,表1给出一种以3个消息类型为例显示的映射关系表。
表1
基于映射关系表,当发送端从接收端发送的重传请求中获取到请求重传的数据包对应的收包总序列号后,可以将请求重传的数据包对应的收包总序列号与映射关系表中的发包总序列号进行匹配,将与请求重传的数据包对应的收包总序列号相同的发包总序列号称为匹配中的发包总序列号,并将匹配中的发包总序列号对应的消息类型以及消息类型中的发包序列号分别作为请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号。
以表1为例进行说明,假设请求重传的数据包对应的收包总序列号为2,则在表1中匹配中的发包总序列号为2,该发包总序列号2对应的消息类型为pkt0,对应的消息类型的发包序列号为1,则请求重传的数据包所属的消息类型为pkt0,请求重传的数据包在消息类型pkt0中的发包序列号为1,即请求重传的数据包是消息类型pkt0中第一个被发送的数据包。
步骤103、根据请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号,向接收端发送请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包。
具体的,当发送端获取到请求重传的数据包所属的消息类型以及请求重传的数据包在自身所属的消息类型中的发包序列号后,根据这些信息可以从重传缓冲器中获取请求重传的数据包以及在请求重传的数据包之后发送的与该请求重传的数据包属于同一消息类型的数据包,然后将获取到的请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包重新发送给接收端。
可选的,本实施例的发送端可以通过设置多个重传缓冲器,分别用来缓存不同消息类型的数据包。并且,发送端会记录每个重传缓冲器与消息类型之间的对应关系。基于此,发送端在获取到请求重传的数据包所属的消息类型后,可以根据请求重传的数据包所属的消息类型确定出请求重传的数据包对应的重传缓冲器,即确定出该请求重传的数据包缓存在哪个重传缓冲器中。然后,发送端根据获取到的请求重传的数据包在自身所属的消息类型中的发包序列号,从请求重传的数据包对应的重传缓冲器中获取请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包,即以请求重传的数据包在自身所属的消息类型中的发包序列号为起始位置,在请求重传的数据包所在的重传缓冲器中获取请求重传的数据包和后面存储的数据包。这种每个消息类型对应一个重传缓冲器的方式,对应关系简单,便于发送端进行管理,从重传缓冲器中获取数据包的效率较高。
可选的,本实施例的发送端还可以使用一个重传缓冲器,并通过不同链表分别管理不同消息类型的数据包在该重传缓冲器中的存储位置。基于此,发送端在获取到请求重传的数据包所属的消息类型后可以先确定请求重传的数据包对应的链表;然后根据请求重传的数据包在自身所属的消息类型中的发包序列号在确定出的链表中进行查找,获取请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包分别在重传缓冲器中的存储位置,然后根据获取的存储位置到重传缓冲器中分别获取请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包。这种所有消息类型对应同一重传缓冲器而通过不同链表对不同消息类型的数据包在重传缓冲器中的存储位置进行管理的方式,需要的重传缓冲器的个数较少,有利于节约发送端的资源。
其中,发送端在重新发送之前已经发送过的数据包(即重传数据包)时,将停止使用发包总序列号对重传的数据包进行计数,即发包总序列号不会随着数据包的重传而递增。
在此说明,为了标识后续发送的数据包为重传的数据包,发送端在向接收端发送重传的数据包之前,会向接收端发送重传响应,以告知接收端后面发送的数据包为重传的数据包。对于接收端来说,在接收到发送端发送的重传响应后,会接收发送端发送的重传的数据包。具体来说,发送端会先向接收端发送重传响应,然后向接收端发送请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包。
其中,发送端向接收端发送重传响应的时机只要是在接收到重传请求之后,向接收端发送请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包之前均可以。
可选的,发送端可以在接收到重传请求之后,获取请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号之前,向接收端发送重传响应。
可选的,发送端可以在获取请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号之后,根据请求重传的数据包所属的消息类型确定请求重传的数据包对应的重传缓冲器之前,向接收端发送重传响应。
可选的,发送端可以在从请求重传的数据包对应的重传缓冲器中获取请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包之后,并在发送请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包之前,向接收端发送重传响应。
在本实施例中,发送端在接收到接收端发送的重传请求之后,根据接收端请求重传的数据包对应的收包总序列号和本地存储的发包总序列号和每个消息类型的发包序列号之间的对应关系,找到请求重传的数据包所属的消息类型和请求重传的数据包所属的消息类型中的发包序列号,进而根据这些信息从重传缓冲器中获取请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包,然后将获取的这些数据包重新发送给接收端。本实施例的数据包重传方法在数据包重传过程中实现了只重传同一类型的数据包,而在请求重传的数据包之后发送的其他类型的数据包在不需要重传的时候不用重传,与现有技术中要将请求重传的数据包和请求重传的数据包之后发送的所有数据包都重新发送给接收端的方案相比,减少了重传的数据量,降低了重传机制造成的资源浪费。
图2为本发明另一实施例提供的数据包重传方法的流程图。本实施例基于图1所示实施例实现。如图2所示,本实施例的方法在步骤103之前包括:
步骤103a、判断请求重传的数据包所属的消息类型和前一个重传请求请求重传的数据包所属的消息类型是否相同;如果判断结果为否,即不相同,则执行步骤103;反之,执行步骤104。
步骤104、将重传请求丢弃。
在本实施例中,主要考虑一种特殊情况,即接收端连续接收到属于同一消息类型的两个或以上发生错误的数据包的情况。对于接收端来说,如果数据包发生错误,就无法从数据包中获知该数据包所属的消息类型,也就无法区分该数据包与其他数据包是否属于同一消息类型。由于无法区分发生错误的数据包属于哪个消息类型,所以对接收端来说只要接收到发生错误的数据包就向发送端发送重传请求。这样对于上述特殊情况,发送端会连续接收到两个重传请求,而发送端根据后一个重传请求向接收端重传的数据包就会是根据前一个重传请求向接收端重传的数据包的子集,即有部分数据包会被重复发送;而对于接收端来说,在接收到数据包后如果又接收到该数据包,就会将该数据包丢弃,由此可见这种特殊情况也会造成浪费资源。
为此,本实施例的发送端在接收到重传请求并根据其中请求重传的数据包对应的收包总序列号和本地存储的发包总序列号和每个消息类型的发包序列号之间的映射关系获取请求重传的数据包所属的消息类型后,可以将该请求重传的数据包所属的消息类型与上一个重传请求请求重传的数据包所属的消息类型进行比较,判断两者是否相同。当判断结果为不相同时,可以排除上述提到的特殊情况,则可以执行步骤103,即根据请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号,向接收端重新发送请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包。当判断结果为相同时,说明该重传请求与上一个重传请求请求重传的数据包属于同一消息类型,属于上述提到的特殊情况,由于发送端已经根据上一个重传请求将所述上一个重传请求请求重传的数据包以及在该数据包之后发送的与该数据包属于同一消息类型的数据包重新发送给了接收端,因此,为了减少资源浪费,发送端可以将该重传请求丢弃,不进行重传处理。
在本实施例中,发送端通过将当前请求重传的数据包所属的消息类型与上一个重传请求请求重传的数据包所属的消息类型进行比较,判断前后两个重传请求是否请求重传同一消息类型的连续发生错误的数据包,在判断结果为是的情况可以丢弃当前重传请求不进行重传处理,有利于减少数据重传造成的资源浪费。
在上述各实施例中,发送端在接收接收端发送的重传请求之前,还会向接收端发送第一数据包。其中,第一数据包是发送端首次向接收端发送的数据包。这里使用第一数据包的目的是为了与重传的数据包或请求重传的数据包进行区分。在上述各实施例中,发送端向接收端发送第一数据包的过程可以是:发送端向接收端发送第一数据包,将第一数据包进行缓存,并根据第一数据包所属的消息类型更新发包总序列号与每个消息类型的发包序列号之间的映射关系。其中,发送端发送的第一数据包中包括该数据包所属的消息类型和该第一数据包在自身所属的消息类型中的发包序列号。可选的,第一数据包所属的消息类型可以通过第一数据包中的一个标识或标志位实现。
其中,更新发包总序列号与每个消息类型的发包序列号之间的映射关系主要是在该映射关系中新增发包总序列号、该第一数据包在所属的消息类型中的发包序列号以及该第一数据包所属的消息类型之间的一条对应关系。在表1的基础上,在新发送一个消息类型为pkt0的数据包之后,新的映射关系表将如表2所示。
表2
由上述可见,对于发包总序列号是连续计数的,而对于每个消息类型的发包序列号也是连续计数的。
其中,如果发送端使用多个重传缓冲器分别缓存不同消息类型的数据包,则发送端发送第一数据包之后,将第一数据包进行缓存的过程可以是:根据第一数据包所属的消息类型,将第一数据包缓存到该第一数据包对应的重传缓冲器中。
如果发送端使用一个重传缓冲器同时缓存所有消息类型的数据包并通过不同链表对不同消息类型的数据包的存储位置进行管理,则发送端发送第一数据包之后,将第一数据包进行缓存的过程可以是:将第一数据包缓存到重传缓冲器中,并根据第一数据包所属的消息类型将第一数据包在重传缓冲器中的存储位置记录到该消息类型对应的链表中。
可选的,发送端可以使用计数器对每个消息类型的发包序列号和总发包序列号进行计数。当计数器计数到最大值后,可以从0开始重新进行计数,即可以循环计数。
在上述实施方式中,发送端在发送数据包时将数据包按照所属的消息类型进行区分,同时记录发包总序列号和每个消息类型的发包序列号之间的映射关系,为在接收到重传请求后,仅重传请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包而不用重传其他消息类型的数据包打下了基础,有利于减少重传的数据量,减少了重传机制造成的资源浪费,提高了系统的带宽利用率。
图3为本发明一实施例提供的数据包接收方法的流程图。如图3所示,本实施例的数据包接收方法包括:
步骤301、接收发送端发送的第一数据包,修改收包总序列号以获取第一数据包对应的收包总序列号。
在本实施例中第一数据包也是指发送端首次发送的数据包,用于区分请求重传的数据包或重传的数据包,而并不限定为某个特定的数据包。也就是说,这里的第一数据包与前面实施例中的第一数据包并不一定是同一个数据包。
本实施例的执行主体为接收端。接收端可以是任何具有重传机制的设备或设备中的模块,例如接收端可以是服务器、路由设备等,还可以是CPU中的QPI或互联芯片中的QPI等。相应的,发送端也可以是任何具有重传机制的设备或设备中的模块,例如发送端可以是服务器、路由设备等,还可以是CPU中的QPI或互联芯片中的QPI等。
其中,收包总序列号为对接收的所有消息类型的数据包进行计数得到的序列号;第一数据包对应的收包总序列号为接收到第一数据包后计数得到的收包总序列号。例如,假设接收第一数据包之前收包总序列号为5,则接收第一数据包之后收包总序列号变为6,则第一数据包对应的收包总序列号为6。其中,收包总序列号会随着数据包的接收而发生变化,而某个数据包对应的收包总序列号是固定的。
其中,接收到的第一数据包包括该数据包所属的消息类型和第一数据包在自身所属的消息类型中的发包序列号。在本实施例中,发送端除了会对所有消息类型的数据包进行计数之外,还会按照的数据包所属的消息类型分别对各消息类型的数据包进行计数。消息类型的发包序列号就是由发送端对发送的属于该消息类型的数据包进行计数得到的序列号。而数据包在自身所属的消息类型中的发包序列号是发送该数据包之后计数到的该数据包所属的消息类型的发包序列号。例如,假设发送该数据包之前,该数据包所属的消息类型的发包序列号为2,则发送该数据包之后该数据包所属的消息类型的发包序列号为3,则该数据包在自身所属的消息类型中的发包序列号为3。即第一数据包在自身所属的消息类型中的发包序列号是发送第一数据包之后计数到的第一数据包所属的消息类型的发包序列号。
在本实施例中,接收端接收发送端发送的第一数据包,并会使用收包总序列号对接收到的第一数据包进行计数。即每接收到一个第一数据包,接收端就会修改收包总序列号,更为具体的是将收包总序列号加1。在本实施例中,接收端在修改收包总序列号的同时可以获取接收到的第一数据包对应的收包总序列号。
在此说明,接收端使用收包总序列号进行计数的数据包是指第一次接收到的数据包而不包括重传的数据包,重传的数据包对应的收包总序列号也就是该数据包被第一次接收时对应的收包总序列号。
步骤302、当确定出接收到的第一数据包未发生错误时,根据第一数据包所属的消息类型获取第一数据包所属的消息类型的最后收包序列号。
在本实施例中,接收端接收到第一数据包之后,会对第一数据包进行解析。如果能够成功解析第一数据包,说明第一数据包未发生错误;如果不能成功解析第一数据包说明第一数据包发生了错误。
当确定第一数据包未发生错误时,接收端可以从第一数据包中获取到第一数据包所属的消息类型以及第一数据包在自身所属的消息类型中的发包序列号。然后,接收端会根据第一数据包所属的消息类型在本地记录的各消息类型的最后收包序列号中获取第一数据包所属的消息类型的最后收包序列号。其中,数据包所属的消息类型的最后收包序列号为在第一数据包之前最后接收到的与第一数据包属于同一消息类型的数据包在自身所属的消息类型中的发包序列号。
在本实施例中,接收端可以按照消息类型分别缓存接收到的数据包,也可以将所有消息类型的数据包进行统一缓存。但是,在本实施例中,对于每个消息类型来说,接收端会记录最后接收到的数据包在其所属的消息类型中的发包序列号,以便于判断每个消息类型的数据包是否按序接收。
步骤303、判断第一数据包所属的消息类型的最后收包序列号和第一数据包在自身所属的消息类型中的发包序列号是否连续;当判断结果为是,即连续时,执行步骤304;当判断结果为否,即不连续时,执行步骤305。
具体的,接收端将接收到的第一数据包在自身所属的消息类型中的发包序列号和第一数据包所属的消息类型的最后收包序列号进行比较,可以判断两者是否连续。
步骤304、将第一数据包所属的消息类型的最后收包序列号更新为第一数据包在自身所属的消息类型中的发包序列号。
当判断结果为第一数据包所属的消息类型的最后收包序列号和第一数据包在自身所属的消息类型中的发包序列号连续时,说明第一数据包所属的消息类型的数据包没有发生错误,则第一数据包将是当前最后接收到的数据包,故接收端将第一数据包所属的消息类型的最后收包序列号更新为第一数据包在自身所属的消息类型中的发包序列号,以便于继续接收同一消息类型的数据包。
步骤305、将第一数据包在自身所属的消息类型中的发包序列号作为重传序列号门限记录下来,将第一数据包丢弃。
当判断结果为第一数据包所属的消息类型的最后收包序列号和第一数据包在自身所属的消息类型中的发包序列号不连续时,说明第一数据包之前与第一数据包属于同一消息类型的数据包发生了错误,并且接收端已经向发送端发送过重传请求,第一数据包属于接收端请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包,因此,发送端会重传第一数据包,故接收端在判断出不连续的结果后,将第一数据包丢弃。同时,接收端会将第一数据包在自身所属的消息类型中的发包序列号记录下来,作为重传序列号门限。该重传序列号门限用于供接收端从发送端发送的数据包中区分出哪些是重传的数据包。
在本实施例中,接收端接收到数据包后对数据包进行解析,如果能够成功解数据包,会根据数据包中该数据包所属的消息类型和该数据包所属的消息类型中的发包序列号确定是否丢弃该数据包,如果不丢弃该数据包就更新该数据包所属的消息类型的最后收包序列号,以便于继续接收后续数据包,如果丢弃该数据包就相应记录该数据包在所属的消息类型中的发包序列号,以便于从发送端发送的数据包中区分出重传的数据包,实现数据包的接收。本实施例提供的数据包接收方法与前述实施例提供的发送端发送数据包的方法相配合,为发送端根据消息类型进行数据包的重传,减少重传数据量,降低重传造成的资源消耗提供了条件。
进一步,如果判断出接收到的第一数据包所属的消息类型的最后收包序列号和第一数据包在自身所属的消息类型中的发包序列号不连续,说明第一数据包之前同一消息类型的数据包发生了错误,故在接收端接收到第一数据包之前,接收端会因接收到发生错误的数据包而向发送端发送重传请求,该重传请求中包括请求重传的数据包对应的收包总序列号。为了便于区分,将这里描述的重传请求称为第一重传请求。其中,第一重传请求请求重传的数据包为在第一数据包之前接收到的与第一数据包属于同一消息类型且发生错误的数据包。
基于上述,接收端在接收到第一数据包后还会接收发送端发送的第一重传响应,并会根据发送第一重传请求之前记录的重传序列号门限接收发送端在发送第一重传响应后发送的重传数据包。对于重传数据包,接收端不会使用收包总序列号对其进行计数,即接收到重传数据包时,接收端不会更新收包总序列号。其中,第一重传响应是与第一重传请求对应的重传响应。这里描述的重传数据包包括第一重传请求请求重传的数据包、以及第一数据包和在请求重传的数据包和第一数据包之间发送的与第一数据包属于同一消息类型的数据包。
其中,接收端根据发送第一重传请求之前的重传序列号门限接收发送端在发送第一重传响应之后发送的重传数据包的过程包括:接收端接收发送端在发送第一重传响应后发送的数据包;发送端在发送第一重传响应后发送的数据包也会包括自身所属的消息类型和在自身所属的消息类型中的发包序列号。然后,接收端将发送端在发送第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号与发送第一重传请求之前的重传序列号门限进行比较。如果发送端在发送第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号小于或等于发送第一重传请求之前的重传序列号门限,说明该数据包为重传数据包,故接收端将该数据包作为重传数据包。此时,接收端接收到重传数据包后不会更新收包总序列号。
在此说明,当接收端接收到发送端在发送第一重传响应后发送的数据包后,首先会对接收到的数据包进行解析,并会根据解析结果区分该数据包是否发生错误。当判断结果为该数据包未发生错误时,才会执行后续操作。
如果发送端在发送第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号大于发送第一重传请求之前的重传序列号门限,说明该数据包已经不属于重传数据包,而是新传的数据包,故接收端在接收到该数据包后需要更新收包总序列号,更为具体的是将收包总序列号加1。与此同时,接收端会获取接收到的发送端在发送第一重传响应后发送的数据包对应的收包总序列号。即接收端可以按照步骤301-步骤304的流程开始接收该数据包。
上述过程描述了某种消息类型的数据包出错后,接收端在接收到重传响应之前又接收到该消息类型的数据包时的处理过程,通过丢弃并记录该之后接收到的数据包在所属的消息类型中的发包序列号,进而从发送端在发送重传响应之后发送的数据包中区分出哪些是重传的数据包,保证了收包总序列号能够正确进行计数,并与发送端的发包总序列号保持一致,为数据包的重传打下了基础。
进一步,当确定出接收到的第一数据包发生错误时,接收端向发送端发送第二重传请求,所述第二重传请求包括第一数据包对应的收包总序列号。基于此,接收端会接收发送端发送的第二重传响应,并会接收发送端重新发送的第一数据包,并且不会更新收包总序列号,即不会将收包总序列号加1。在该过程中,假设接收端在接收到第二重传响应之前没有再接收到与发生错误的数据包属于同一消息类型的数据包。如果接收端在接收到第二重传响应之前又接收到与发生错误的数据包属于同一消息类型的数据包,则该情况将与上述过程相同。
进一步,当接收端发现第一数据包发生错误并向发送端发送第二重传请求时,可以记录请求重传的第一数据包对应的收包总序列号。由于接收端接收到的发送端重新发送的第一数据包也可能发生错误,此时,接收端需要重新向发送端发送第二重传请求,但是在该过程中,随着其他消息类型的数据包的接收,收包总序列号可能发生了变化,故无法根据当前的收包总序列号获取第一数据包对应的收包总序列号,故通过之前记录的第一数据包对应的收包总序列号可以重新生成第二重传请求,然后发送给发送端。如果接收端接收到的发送端重新发送的第一数据包没有发生错误,则可以将记录的第一数据包对应的收包总序列号丢弃。
在本实施例中,接收端在发送重传请求时,通过记录请求重传的数据包对应的收包总序列号,便于在重传的数据包仍然错误时继续向发送端发送重传请求,有利于提高数据包的接收成功率。
下面将结合发送端和接收端进行数据传输的过程进一步说明本发明上述各实施例的原理。
如图4所示,发送端为Link_A,接收端为Link_B。假设消息类型为3种,分别为pkt0、pkt1和pkt2。在图4中以pak表示数据包,pak后面的数字标识数据包对应的发包总序列号或收包总序列号。
Link_A向Link_B发送某一消息类型的数据包时,会记录该消息类型的发包序列号,记为each_pkt_num,并且还会发送总序列号,记为total_pkt_num,并会建立一张映射关系表,该映射关系表存储有total_pkt_num、each_pkt_num以及消息类型之间的对应关系。Link_A向Link_B发送某一消息类型的数据包时,将此消息类型的数据包对应的each_pkt_num插入到该数据包内。因此,对于同一消息类型的数据包来说,其对应的eack_pkt_num是连续累加1的。如图4所示,一开始,Link_A向Link_B顺序发送数据包pak0、pak1、pak2、pak3等。
当Link_B接收到数据包时,会统计所有收到的数据包个数,即收包总序列号,记为pkt_num,并会提取每个数据包内包含的each_pkt_num。当数据包无误时,将提取出的each_pkt_num与该消息类型的最后收包序列号,记为last_each_pkt_num(即上一次接收到的该消息类型的数据包中的each_pkt_num)进行比较以判断该消息类型的数据包是否连续。其中,如果不连续,说明之前有数据包发生了错误,则不接收该数据包,但此时pkt_num继续累加。当当前收到的数据包有错误,则因为Link_B无法知道该数据包所属的消息类型,所以会直接向Link_A发送retry_request并将该错误包对应的收包总序列号(即接收到该数据包后的pkt_num的值)告知Link_A。Link_A可以根据错误包对应的收包总序列号查找映射关系表找到出错包所属的消息类型及对应的each_pkt_num,然后开始重传。
结合图4,Link_B检测到pak1(图4中以点线示出)出错后,产生一个重传请求,记为retry_req(里面含有pak1对应的pkt_num)给Link_A,告知Link_A有数据包出错,需要重新发送。
之后,Link_B会继续接收Link_A发送的数据包,例如pak2、pak3等,并会继续对pkt_num计数。此时,在确定接收到的数据包无误后,Link_B也会将数据包中的each_pkt_num跟同一消息类型的last_each_pkt_num进行比较以判断该消息类型的数据包是否是连续:如果连续,则说明此消息类型的数据包没有出错过,继续接收;如果不连续,说明该消息类型的数据包之前出错了,则丢弃接收到的数据包,同时将被丢弃的数据包中的each_pkt_num赋给重传序列号门限,记为max_each_pkt_num。如图4所示,pak3与pak1的消息类型相同,故在pak1出错后又接收到的pak3需要被丢弃,并且将pak3中的each_pkt_num赋给max_each_pkt_num。而由于pak2与pak1属于不同的消息类型,且与pak2属于同一消息类型的之前的数据包没有发生过错误,故pak2正常接收,而不用丢弃。
如图4所示,当Link_B成功接收到Link_A发送的数据包后会向Link_A发送ack。
当Link_A发送完毕pakN后,收到retry_req,停止正常包的发送,而是发送一个retry_res给Link_B。Link_A根据retry_req中的pkt_num在映射关系表中进行查找,获取需要重传的消息类型为pkt1及需要重传的起始位置为pkt1对应的重传缓冲器(retry buffer)中的pak1。然后,从重传缓冲器中读出所有需要重传的数据包发送给Link_B。如图4所示,假设所有需要重传的数据包包括pak1、pak3~pakM(在图4中以虚线所示)。
Link_A发送完pakM后,继续发送正常数据包,例如pak(N+1)等。
Link_B检测到retry_res后,停止使用pkt_num对pkt1类型数据包的计数,即在接收到消息类型pkt1的数据包后不会将pkt_num加1。Link_B接收到Link_A重传的消息类型为pkt1的数据包后,将提取出其中的each_pkt_num,并将提取出的each_pkt_num与max_each_pkt_num比较,当each_pkt_num大于max_each_pkt_num时,重新启动pkt_num对消息类型为pkt1的数据包的计数,即在检测到消息类型为pkt1的数据包中的each_pkt_num大于max_each_pkt_num时,需要将pkt_num加1,并且在此之后接收到消息类型为pkt1的新数据包时也需要将pkt_num加1。
Link_B正常的接收后续的数据包,并在成功接收后续数据包时向Link_A发送ack。
在此说明,如果某种消息类型的数据包出错后,Link_B在收到retry_res之前没有再收到该消息类型的数据包,则max_each_pkt_num是无效的,说明该期间该消息类型的数据包只错了一次或者该消息类型的数据包一直在出错,无法得到正常的max_each_pkt_num,为了保证pkt_num的正确,Link_B在收到retry_res之后不会对第一个接收到的数据包进行计数,即不会将pkt_num加1,因为该数据包是重传的数据包已经计数过了。
进一步说明,当Link_B检测到某个数据包错误,还会保存此时的pkt_num,即该错误包对应的pkt_num。在收到retry_res之后,如果第一个接收到的数据包无错误,则丢弃保存的pkt_num;如果retry_res之后第一个接收到的数据包有错误,需要再次向Link_A发送retry_req,此时retry_req中的pkt_num为之前已经保存过的pkt_num,而不是当前的pkt_num。这样Link_A收到retry_req后,可以根据retry_req中的pkt_num在映射关系表找到正确的重传包类型和重传包的起始位置。
由上述可见,本实施例发明实施例提供的数据包重传方法以及数据包接收方法相互配合,在需要重传的场景下,可以做到只重传某种类型的数据包,而不需将其后所有其他类型数据包都重传,减少了重传的数据量,节约了重传机制造成的资源浪费,提高了系统的带宽利用率。
图5为本发明一实施例提供的数据包发送装置的结构示意图。如图5所示,本实施例的数据包发送装置5包括:第一接收模块51、第一处理模块52和第一发送模块53。
其中,第一接收模块51,用于接收重传请求,该重传请求由接收端发送,该重传请求包括请求重传的数据包对应的收包总序列号。其中,收包总序列号是接收端对接收的所有消息类型的数据包进行计数得到的序列号。请求重传的数据包对应的收包总序列号是在接收端接收到请求重传的数据包后计数到的收包总序列号。
第一处理模块52,与第一接收模块51连接,用于根据第一接收模块51接收到的重传请求中的请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号。其中,发包总序列号为对发送的所有消息类型的数据包进行计数得到的序列号。
第一发送模块53,与第一处理模块52连接,用于根据第一处理模块52获取的请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号,向接收端发送请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包。
本实施例的数据包发送装置的各功能模块可用于执行图1所示数据包重传方法的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的额数据包发送装置可以是任何具有重传机制的设备或设备中的模块,例如发送端可以是服务器、路由设备等,也可以是CPU中的QPI或互联芯片中的QPI等。
本实施例的数据包发送装置,在接收到接收端发送的重传请求之后,根据接收端请求重传的数据包对应的收包总序列号和本地存储的发包总序列号和每个消息类型的发包序列号之间的对应关系,找到请求重传的数据包所属的消息类型和请求重传的数据包所属的消息类型中的发包序列号,进而根据这些信息从重传缓冲器中获取请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包,然后将获取的这些数据包重新发送给接收端。本实施例的数据包发送装置在数据包重传过程中实现了只重传同一类型的数据包,而在请求重传的数据包之后发送的其他类型的数据包在不需要重传的时候不用重传,与现有技术中要将请求重传的数据包和请求重传的数据包之后发送的所有数据包都重新发送给接收端的方案相比,减少了重传的数据量,降低了重传机制造成的资源浪费。
图6A为本发明一实施例提供的数据包发送装置的结构示意图。本实施例基于图5所示实施例实现。如图6A所示,本实施例的数据包发送装置6也包括第一接收模块51、第一处理模块52和第一发送模块53,并且各模块也具有图5所示实施例中描述的功能。
在本实施例中,第一处理模块52还用于在第一发送模块53向接收端发送请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包之前,判断请求重传的数据包所属的消息类型和前一个重传请求请求重传的数据包所属的消息类型是否相同,在判断结果为不相同时,触发第一发送模块53执行根据请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号,向接收端发送请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包的操作。
进一步,本实施例的第一处理模块52还用于在判断结果为相同时,将第一接收模块51接收到的重传请求丢弃。
进一步,本实施例的第一发送模块53还用于向接收端发送第一数据包。其中,第一数据包是首次向接收端发送的数据包,第一数据包包括第一数据包所属的消息类型和第一数据包在自身所属的消息类型中的发包序列号。
相应地,第一处理模块52还用于将第一数据包进行缓存,并根据第一数据包所属的消息类型更新发包总序列号与每个消息类型的发包序列号之间的映射关系。
进一步,本实施例的数据包发送装置包括多个重传缓冲器54。不同的重传缓冲器54用于缓存不同消息类型的数据包。则第一处理模块52具体用于根据第一数据包所属的消息类型,将第一数据包缓存到第一数据包对应的重传缓冲器54中。
更进一步,本实施例的第一发送模块53包括:重传控制单元531、发送控制单元532和发送单元533。
其中,重传控制单元531,与第一处理模块52连接,用于根据第一处理模块52获取的请求重传的数据包所属的消息类型确定请求重传的数据包对应的重传缓冲器54。
发送控制单元532,与第一处理模块52和重传缓冲器54连接,用于根据第一处理模块52获取的请求重传的数据包在自身所属的消息类型中的发包序列号,从请求重传的数据包对应的重传缓冲器54中获取请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包。
发送单元533,与发送控制单元532连接,用于向接收端发送重传响应,然后向接收端发送由发送控制单元532获取的请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包。
可选的,发送单元533具体用于在第一处理模块52获取请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号之前,向接收端发送重传响应。或者
发送单元533具体用于在重传控制单元531根据请求重传的数据包所属的消息类型确定请求重传的数据包对应的重传缓冲器之前,向接收端发送重传响应。或者
发送单元533具体用于在发送控制单元532从请求重传的数据包对应的重传缓冲器中获取请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包之后,向接收端发送重传响应。
进一步,本实施例的第一发送模块53还包括:特殊包产生单元534。该特殊包产生单元534用于生成重传响应。可选的,特殊包产生单元534与第一处理模块52和发送单元533连接,用于在第一处理模块52的控制下生成重传响应,并提供给发送单元533。
可选的,当本实施例的数据包发送装置接收数据包并且发现数据包发生错误时,特殊包产生单元534还用于生成重传请求。另外,本实施的特殊包产生单元534还用于产生ack消息等。
进一步,本实施例的第一处理模块52可以包括:接收译码单元521和系统控制单元522。
其中,接收译码单元521,与第一接收模块51连接,用于对第一接收模块51接收到的重传请求进行解析,获取请求重传的数据包对应的收包总序列号。
系统控制单元522,与接收译码单元521连接,用于将请求重传的数据包对应的收包总序列号与本地存储的映射关系表中的发包总序列号进行匹配,将匹配中的发包总序列号所对应的消息类型和消息类型的发包序列号分别作为请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号。其中,映射关系表存储有发包总序列号与每个消息类型的发包序列号之间的映射关系。
具体的,系统控制单元522还与重传控制单元531、发送控制单元532和特殊包产生单元534连接。
结合第一处理模块52和第一发送模块53的上述结构,第一发送模块53具体可由其发送单元533向接收端发送第一数据包。相应地,第一处理模块52具体可由其系统控制单元522将第一数据包进行缓存,并根据第一数据包所属的消息类型更新发包总序列号与每个消息类型的发包序列号之间的映射关系。更为具体的,第一处理模块52具体可由其系统控制单元522根据第一数据包所属的消息类型,将第一数据包缓存到第一数据包对应的重传缓冲器54中。
进一步,结合第一处理模块52的上述结构,第一处理模块52具体可由其系统控制单元522判断请求重传的数据包所属的消息类型和前一个重传请求请求重传的数据包所属的消息类型是否相同;在判断结果为不相同时,触发第一发送模块53执行根据请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号,向接收端发送请求重传的数据包以及在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包的操作;在判断结果为相同时,将第一接收模块51接收到的重传请求丢弃。
上述各功能模块或单元可用于执行图1或图2所示数据包重传方法的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的数据包发送装置,在接收到接收端发送的重传请求之后,根据接收端请求重传的数据包对应的收包总序列号和本地存储的发包总序列号和每个消息类型的发包序列号之间的对应关系,找到请求重传的数据包所属的消息类型和请求重传的数据包所属的消息类型中的发包序列号,进而根据这些信息从重传缓冲器中获取请求重传的数据包和在请求重传的数据包之后发送的与请求重传的数据包属于同一消息类型的数据包,然后将获取的这些数据包重新发送给接收端。本实施例的数据包发送装置在数据包重传过程中实现了只重传同一类型的数据包,而在请求重传的数据包之后发送的其他类型的数据包在不需要重传的时候不用重传,与现有技术中要将请求重传的数据包和请求重传的数据包之后发送的所有数据包都重新发送给接收端的方案相比,减少了重传的数据量,降低了重传机制造成的资源浪费。
图6B为本发明一实施例提供的QPI协议的链路层的结构示意图。如图6B所示,本实施例的QPI协议包括:QPI的协议层、QPI的链路层和QPI的物理层。QPI的链路层负责数据包的接收和重传。QPI的链路层主要包括:接收模块rx、接收译码模块rx_decode、系统控制模块sys_ctrl、多个重传控制模块retry_ctrl、发送控制模块tx_ctrl、特殊包生成模块gen_sp、多个重传缓冲器retry_buf和发送模块tx。
结合图6A所示数据包发送装置的结构,本实施例的接收模块rx相当于图6A所示实施例中的第一接收模块51;本实施例的接收译码模块rx_decode相当于图6A所示实施例中的接收译码单元521;本实施例的系统控制模块sys_ctrl相当于图6A所示实施例中的系统控制单元522;本实施例的重传控制模块retry_ctrl相当于图6A所示实施例中的重传控制单元531;本实施例的发送控制模块tx_ctrl相当于图6A所示实施例中的发送控制单元532;本实施例的特殊包生成模块gen_sp相当于图6A所示实施例中的特殊包生成单元534;本实施例的重传缓冲器retry_buf相当于图6A所示实施例中的重传缓冲器54;本实施例的发送模块tx相当于图6A所示实施例中的发送单元533。
在本实施例中,接收模块rx,是链路层与物理层的接口,用于接收从物理层来的数据包。接收译码模块rx_decode,用于对接收模块rx接收到的数据包进行译码,将数据包中含有的链路层用到信息提取出来发送给系统控制模块sys_ctrl,并将收到的数据包是否错误以及哪个包错误的信息发给重传控制模块retry_ctrl。系统控制模块sys_ctrl,主要用于发送控制信息给重传控制模块retry_ctrl、发送控制模块tx_ctrl以及特殊包生成模块gen_sp。重传控制模块retry_ctrl,用于控制重传缓冲器retry_buf的读写指针。发送控制模块tx_ctrl,用于从重传缓冲器retry_buf、协议层以及特殊包生成模块gen_sp选择需要发送的数据。特殊包生成模块gen_sp,用于产生链路层使用的特殊包(special packet),例如确认(ack)、重传请求(retry_request)、重传响应(retry_response)等。重传缓冲器retry_buf,用于在需要重传时,根据收到的retry_requset内的错误包的序号(pkt_num),在重传缓冲器中找到需要重传的包的起始位置。发送模块tx,用于发送数据包。
本实施例的QPI协议的链路层同时具有收发数据包的功能,上面从整体上描述了本实施例的QPI协议的链路层中各模块的功能,下面将结合数据包重传详细说明链路层中各模块在数据包重传时的功能。
如果物理层来的数据包是接收端发送的重传请求,则接收模块rx就会接收从物理层来的重传请求。接收译码模块rx_decode用于对接收模块rx接收到的重传请求进行译码,从中提取出请求重传的数据包对应的收包总序列号,并将其提供给系统控制模块sys_ctrl。系统控制模块sys_ctrl将请求重传的数据包对应的收包总序列号与本地存储的映射关系表中的发包总序列号进行匹配,将匹配中的收包总序列号对应的消息类型和消息类型的发包序列号分别作为请求重传的数据包所属的消息类型和请求重传的数据包在自身所属的消息类型中的发包序列号,并请求重传的数据包所属的消息类型作为控制信息提供给相应的重传控制模块retry_ctrl,将请求重传的数据包在自身所属的消息类型中的发包序列号作为控制信息提供给发送控制模块tx_ctrl。重传控制模块retry_ctrl根据请求重传的数据包所属的消息类型去选择相应的重传缓冲器retry_buf。发送控制模块tx_ctrl根据请求重传的数据包在自身所属的消息类型中的发包序列号从重传控制模块retry_ctrl选择的重传缓冲器retry_buf中获取请求重传的数据包以及在请求重传的数据包之后发送的数据包。发送模块tx将发送控制模块tx_ctrl获取的数据包发送给接收端。
进一步,特殊包生成模块gen_sp会在发送模块tx向接收端发送控制模块tx_ctrl获取的数据包之前,生成重传响应;发送模块tx将重传响应发送给接收端,然后再向接收端发送控制模块tx_ctrl获取的数据包。
在本实施例中,QPI协议的链路层通过设置多个重传缓冲器,使每个重传缓冲器对应一个消息类型,并存储发包总序列号和每个消息类型的发包序列号之间的对应关系,使得在接收到接收端的重传请求后,可以只重传同一类型的数据包,而在请求重传的数据包之后发送的其他类型的数据包在不需要重传的时候不用重传,与现有技术中要将请求重传的数据包以及请求重传的数据包之后发送的所有数据包都重新发送给接收端的方案相比,减少了重传的数据量,降低了重传机制造成的资源浪费。
图7为本发明一实施例提供的数据包接收装置的结构示意图。如图7所示,本实施例的数据包接收装置7包括:第二接收模块71和第二处理模块72。
其中,第二接收模块71,用于接收发送端发送的第一数据包。其中,第一数据包包括第一数据包所属的消息类型和第一数据包在自身所属的消息类型中的发包序列号。
第二处理模块72,与第二接收模块71连接,用于在第二接收模块71接收到第一数据包后,修改收包总序列号以获取第一数据包对应的收包总序列号,并在确定出第二接收模块71接收到的第一数据包未发生错误时,根据第一数据包所属的消息类型获取第一数据包所属的消息类型的最后收包序列号,并判断第一数据包所属的消息类型的最后收包序列号和第一数据包在自身所属的消息类型中的发包序列号是否连续,当判断结果为连续时,将第一数据包所属的消息类型的最后收包序列号更新为第一数据包在自身所属的消息类型中的发包序列号。其中,收包总序列号为对接收的所有消息类型的数据包进行计数得到的序列号;第一数据包所属的消息类型的最后收包序列号为在第一数据包之前最后接收到的与第一数据包属于同一消息类型的数据包在自身所属的消息类型中的发包序列号。
本实施例的数据包接收装置的各功能模块可用于执行图3所示数据包接收方法的流程图,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的数据包接收装置可以是任何具有重传机制的设备或设备中的模块,例如接收端也可以是服务器、路由设备等,也可以是CPU中的QPI或互联芯片中的QPI等。
本实施例的数据包接收装置与本发明实施例提供的数据包发送装置相配合,在接收到数据包后对数据包进行解析,如果能够成功解数据包,会根据数据包中该数据包所属的消息类型和该数据包所属的消息类型中的发包序列号确定是否丢弃该数据包,如果不丢弃该数据包就更新该数据包所属的消息类型的最后收包序列号,以便于继续接收后续数据包,如果丢弃该数据包就相应记录该数据包在所属的消息类型中的发包序列号,以便于从发送端发送的数据包中区分出重传的数据包,实现数据包的接收,为数据包发送装置根据消息类型进行数据包的重传,减少重传数据量,降低重传造成的资源消耗提供了条件。
图8为本发明另一实施例提供的数据包接收装置的结构示意图。本实施例基于图7所示实施例实现。如图8所示,本实施例的数据包接收装置8也包括:第二接收模块71和第二处理模块72,并且各模块也具有图7所示实施例描述的功能。
进一步,本实施例的第二处理模块72还用于在判断结果为第一数据包所属的消息类型的最后收包序列号和第一数据包在自身所属的消息类型中的发包序列号不连续时,将第一数据包在自身所属的消息类型中的发包序列号作为重传序列号门限记录下来,将第一数据包丢弃。
进一步,本实施例的装置还包括:第二发送模块73。
第二发送模块73,用于在第二接收模块71接收第一数据包之前,向发送端发送第一重传请求。其中,第一重传请求包括请求重传的数据包对应的收包总序列号;请求重传的数据包为在第一数据包之前接收的与第一数据包属于同一消息类型且发生错误的数据包。
基于此,第二接收模块71还用于接收发送端发送的第一重传响应。
相应地,第二处理模块72还用于根据发送第一重传请求之前的重传序列号门限接收发送端在发送第一重传响应后发送的重传数据包。其中,重传数据包包括请求重传的数据包、第一数据包和在请求重传的数据包和第一数据包之间发送的与数据包属于同一消息类型的数据包。
对于第二接收模块71来说,还会接收发送端在发送第一重传响应后发送的数据包。则第二处理模块72具体用于将发送端在发送第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号与发送第一重传请求之前的重传序列号门限进行比较,在发送端在发送第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号小于或等于发送第一重传请求之前的重传序列号门限时,将发送端在发送第一重传响应后发送的数据包作为重传数据包。
进一步,第二处理模块72还用于在发送端在发送第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号大于发送第一重传请求之前的重传序列号门限时,更新收包总序列号获取发送端在发送第一重传响应后发送的数据包对应的收包总序列号。
进一步,第二发送模块73还用于在确定出第二接收模块71接收的第一数据包发生错误时,向发送端发送第二重传请求。其中,第二重传请求包括第一数据包对应的收包总序列号。
相应地,第二接收模块71还用于在接收到发送端发送的第二重传响应后,接收发送端重新发送的第一数据包。
更进一步,第二处理模块72还用于记录第一数据包对应的收包总序列号。则第二发送模块73还用于在确定重新接收的第一数据包发生错误时,根据第二处理模块72记录的第一数据包对应的收包总序列号重新生成并向发送端发送第二重传请求。可选的,第二处理模块72和第二发送模块73连接。
上述各功能模块可用于执行前述实施例提供的数据包接收方法的流程,其具体工作原理不再赘述。
举例说明,当图6B所示QPI协议的链路层在作为接收端接收数据包时,其可以作为本实施例的数据包接收装置。下面将对图6B所示各模块和本实施例的数据包接收装置的功能进行关联。具体的,图6B所示实施例中的接收模块rx相当于本实施例中的第二接收模块71;图6B所示实施例中的接收译码模块rx_decode和系统控制模块sys_ctrl可以作为本实施例中的第二处理模块72;图6B所示实施例中的发送控制模块tx_ctrl、特殊包生成模块gen_sp和发送模块tx相当于本实施例中的第二发送模块73。图6B所示QPI协议的链路层接收数据包的流程可参见图3所示实施例或本实施例的描述,在此不再赘述。
本实施例的的数据包接收装置与本发明实施例提供的数据包发送装置相配合,在接收到数据包后对数据包进行解析,如果能够成功解数据包,会根据数据包中该数据包所属的消息类型和该数据包所属的消息类型中的发包序列号确定是否丢弃该数据包,如果不丢弃该数据包就更新该数据包所属的消息类型的最后收包序列号,以便于继续接收后续数据包,如果丢弃该数据包就相应记录该数据包在所属的消息类型中的发包序列号,以便于从发送端发送的数据包中区分出重传的数据包,实现数据包的接收,而在数据包发生错误时,通过向作为发送端的数据包发送装置发送重传请求,为数据包发送装置根据消息类型进行数据包的重传,减少重传数据量,降低重传造成的资源消耗提供了条件。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (19)
1.一种数据包重传方法,其特征在于,包括:
接收重传请求,所述重传请求由接收端发送,所述重传请求包括请求重传的数据包对应的收包总序列号;
根据所述请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,所述发包总序列号为对发送的所有消息类型的数据包进行计数得到的序列号;
根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包。
2.根据权利要求1所述的数据包重传方法,其特征在于,所述根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包之前包括:
判断所述请求重传的数据包所属的消息类型和前一个重传请求请求重传的数据包所属的消息类型是否相同;
如果不相同,则根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包。
3.根据权利要求1或2所述的数据包重传方法,其特征在于,所述根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包包括:
根据所述请求重传的数据包所属的消息类型确定所述请求重传的数据包对应的重传缓冲器;
根据所述请求重传的数据包在自身所属的消息类型中的发包序列号,从所述请求重传的数据包对应的重传缓冲器中获取所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包;
向所述接收端发送重传响应,然后向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包。
4.根据权利要求1或2所述的数据包重传方法,其特征在于,所述根据所述请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号包括:
对所述重传请求进行解析,获取所述请求重传的数据包对应的收包总序列号;
将所述请求重传的数据包对应的收包总序列号与本地存储的映射关系表中的所述发包总序列号进行匹配;所述映射关系表存储有所述发包总序列号与每个消息类型的发包序列号之间的映射关系;
将匹配中的所述发包总序列号所对应的消息类型和消息类型的发包序列号分别作为所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号。
5.根据权利要求1或2所述的数据包重传方法,其特征在于,还包括:
向所述接收端发送第一数据包,将所述第一数据包进行缓存,并根据所述第一数据包所属的消息类型更新所述发包总序列号与每个消息类型的发包序列号之间的映射关系;所述第一数据包是首次向所述接收端发送的数据包,所述第一数据包包括所述第一数据包所属的消息类型和所述第一数据包在自身所属的消息类型中的发包序列号。
6.根据权利要求5所述的数据包重传方法,其特征在于,所述将所述第一数据包进行缓存包括:
根据所述第一数据包所属的消息类型,将所述第一数据包缓存到所述第一数据包对应的重传缓冲器中。
7.一种数据包接收方法,其特征在于,包括:
接收发送端发送的第一数据包,修改收包总序列号以获取所述第一数据包对应的收包总序列号;所述收包总序列号为对接收的所有消息类型的数据包进行计数得到的序列号;所述第一数据包包括所述第一数据包所属的消息类型和所述第一数据包在自身所属的消息类型中的发包序列号;
当确定出所述第一数据包未发生错误时,根据所述第一数据包所属的消息类型获取所述第一数据包所属的消息类型的最后收包序列号,所述第一数据包所属的消息类型的最后收包序列号为在所述第一数据包之前最后接收到的与所述第一数据包属于同一消息类型的数据包在自身所属的消息类型中的发包序列号;
判断所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号是否连续;
当判断结果为所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号连续时,将所述第一数据包所属的消息类型的最后收包序列号更新为所述第一数据包在自身所属的消息类型中的发包序列号。
8.根据权利要求7所述的数据包接收方法,其特征在于,还包括:
当判断结果为所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号不连续时,将所述第一数据包在自身所属的消息类型中的发包序列号作为重传序列号门限记录下来,将所述第一数据包丢弃。
9.根据权利要求8所述的数据包接收方法,其特征在于,所述接收发送端发送的第一数据包之前包括:
向所述发送端发送第一重传请求,所述第一重传请求包括请求重传的数据包对应的收包总序列号;所述请求重传的数据包为在所述第一数据包之前接收的与所述第一数据包属于同一消息类型且发生错误的数据包;
所述方法还包括:
接收所述发送端发送的第一重传响应,并根据发送所述第一重传请求之前的重传序列号门限接收所述发送端在发送所述第一重传响应后发送的重传数据包;所述重传数据包包括所述请求重传的数据包、所述第一数据包和在所述请求重传的数据包和所述第一数据包之间发送的与所述数据包属于同一消息类型的数据包。
10.根据权利要求9所述的数据包接收方法,其特征在于,所述根据所述重传序列号门限接收所述发送端在发送所述第一重传响应后发送的重传数据包包括:
接收所述发送端在发送所述第一重传响应后发送的数据包;
将所述发送端在发送所述第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号与发送所述第一重传请求之前的重传序列号门限进行比较;
如果所述发送端在发送所述第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号小于或等于发送所述第一重传请求之前的重传序列号门限,将所述发送端在发送所述第一重传响应后发送的数据包作为所述重传数据包。
11.一种数据包发送装置,其特征在于,包括:
第一接收模块,用于接收重传请求,所述重传请求由发送端发送,所述重传请求包括请求重传的数据包对应的收包总序列号;
第一处理模块,用于根据所述请求重传的数据包对应的收包总序列号和本地存储的发包总序列号与每个消息类型的发包序列号之间的映射关系,获取所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,所述发包总序列号为对发送的所有消息类型的数据包进行计数得到的序列号;
第一发送模块,用于根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包。
12.根据权利要求11所述的数据包发送装置,其特征在于,所述第一处理模块还用于判断所述请求重传的数据包所属的消息类型和前一个重传请求请求重传的数据包所属的消息类型是否相同,在判断结果为不相同时,触发所述第一发送模块执行根据所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号,向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包的操作。
13.根据权利要求11或12所述的数据包发送装置,其特征在于,还包括:
多个重传缓冲器,用于缓存发送的数据包;
所述第一发送模块包括:
重传控制单元,用于根据所述请求重传的数据包所属的消息类型确定所述请求重传的数据包对应的重传缓冲器;
发送控制单元,用于根据所述请求重传的数据包在自身所属的消息类型中的发包序列号,从所述请求重传的数据包对应的重传缓冲器中获取所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包;
发送单元,用于向所述接收端发送重传响应,然后向所述接收端发送所述请求重传的数据包以及在所述请求重传的数据包之后发送的与所述请求重传的数据包属于同一消息类型的数据包。
14.根据权利要求11或12所述的数据包发送装置,其特征在于,所述第一处理模块包括:
接收译码单元,用于对所述重传请求进行解析,获取所述请求重传的数据包对应的收包总序列号;
系统控制单元,用于将所述请求重传的数据包对应的收包总序列号与本地存储的映射关系表中的所述发包总序列号进行匹配,将匹配中的所述发包总序列号所对应的消息类型和消息类型的发包序列号分别作为所述请求重传的数据包所属的消息类型和所述请求重传的数据包在自身所属的消息类型中的发包序列号;所述映射关系表存储有所述发包总序列号与每个消息类型的发包序列号之间的映射关系。
15.根据权利要求11或12所述的数据包发送装置,其特征在于,所述第一发送模块还用于向所述接收端发送第一数据包,所述第一数据包是首次向所述接收端发送的数据包,所述第一数据包包括所述第一数据包所属的消息类型和所述第一数据包在自身所属的消息类型中的发包序列号;
所述第一处理模块还用于将所述第一数据包进行缓存,并根据所述第一数据包所属的消息类型更新所述发包总序列号与每个消息类型的发包序列号之间的映射关系。
16.一种数据包接收装置,其特征在于,包括:
第二接收模块,用于接收发送端发送的第一数据包,所述第一数据包包括所述第一数据包所属的消息类型和所述第一数据包在自身所属的消息类型中的发包序列号;
第二处理模块,用于在所述第二接收模块接收到所述第一数据包后,修改收包总序列号以获取所述第一数据包对应的收包总序列号,在确定出所述第一数据包未发生错误时,根据所述第一数据包所属的消息类型获取所述第一数据包所属的消息类型的最后收包序列号,并判断所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号是否连续,当判断结果为连续时,将所述第一数据包所属的消息类型的最后收包序列号更新为所述第一数据包在自身所属的消息类型中的发包序列号;所述收包总序列号为对接收的所有消息类型的数据包进行计数得到的序列号;所述第一数据包所属的消息类型的最后收包序列号为在所述第一数据包之前最后接收到的与所述第一数据包属于同一消息类型的数据包在自身所属的消息类型中的发包序列号。
17.根据权利要求16所述的数据包接收装置,其特征在于,所述第二处理模块还用于在判断结果为所述第一数据包所属的消息类型的最后收包序列号和所述第一数据包在自身所属的消息类型中的发包序列号不连续时,将所述第一数据包在自身所属的消息类型中的发包序列号作为重传序列号门限记录下来,将所述第一数据包丢弃。
18.根据权利要求17所述的数据包接收装置,其特征在于,还包括:
第二发送模块,用于在所述第二接收模块接收所述第一数据包之前,向所述发送端发送第一重传请求,所述第一重传请求包括请求重传的数据包对应的收包总序列号;所述请求重传的数据包为在所述第一数据包之前接收的与所述第一数据包属于同一消息类型且发生错误的数据包;
所述第二接收模块还用于接收到所述发送端发送的第一重传响应;
所述第二处理模块还用于根据发送所述第一重传请求之前的重传序列号门限接收所述发送端在发送所述第一重传响应后发送的重传数据包;所述重传数据包包括所述请求重传的数据包、所述第一数据包和在所述请求重传的数据包和所述第一数据包之间发送的与所述数据包属于同一消息类型的数据包。
19.根据权利要求18所述的数据包接收装置,其特征在于,所述第二接收模块还用于接收所述发送端在发送所述第一重传响应后发送的数据包;
所述第二处理模块具体用于将所述发送端在发送所述第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号与发送所述第一重传请求之前的重传序列号门限进行比较,在所述发送端在发送所述第一重传响应后发送的数据包在自身所属的消息类型中的发包序列号小于或等于发送所述第一重传请求之前的重传序列号门限时,将所述发送端在发送所述第一重传响应后发送的数据包作为所述重传数据包。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210103340.8A CN103368703B (zh) | 2012-04-10 | 2012-04-10 | 数据包重传方法、数据包接收方法及装置 |
PCT/CN2012/083544 WO2013152586A1 (zh) | 2012-04-10 | 2012-10-26 | 数据包重传方法、数据包接收方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210103340.8A CN103368703B (zh) | 2012-04-10 | 2012-04-10 | 数据包重传方法、数据包接收方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103368703A true CN103368703A (zh) | 2013-10-23 |
CN103368703B CN103368703B (zh) | 2016-08-17 |
Family
ID=49327042
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210103340.8A Active CN103368703B (zh) | 2012-04-10 | 2012-04-10 | 数据包重传方法、数据包接收方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103368703B (zh) |
WO (1) | WO2013152586A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108881140A (zh) * | 2017-10-31 | 2018-11-23 | 北京视联动力国际信息技术有限公司 | 一种基于视联网的文件下载方法及装置 |
CN111106902A (zh) * | 2018-10-26 | 2020-05-05 | 杭州海康威视系统技术有限公司 | 数据报文传输方法、装置、设备及计算机可读存储介质 |
WO2020143635A1 (zh) * | 2019-01-09 | 2020-07-16 | 中兴通讯股份有限公司 | 数据的重传方法、装置、存储介质及电子装置 |
CN111953655A (zh) * | 2017-02-28 | 2020-11-17 | 华为技术有限公司 | 一种通信系统中服务器响应请求消息的方法及设备 |
CN113315664A (zh) * | 2021-06-16 | 2021-08-27 | 无锡江南计算技术研究所 | 一种消息处理芯片验证方法 |
CN114257350A (zh) * | 2021-12-31 | 2022-03-29 | 广东省教育研究院 | 传输质量优化方法、装置及传输系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082898A (zh) * | 2007-07-30 | 2007-12-05 | 威盛电子股份有限公司 | 芯片组的数据链结层及用于其处理包的方法 |
CN101222311A (zh) * | 2008-01-29 | 2008-07-16 | 杭州华三通信技术有限公司 | 实时报文丢包恢复方法、系统及接收端单元 |
CN101511013A (zh) * | 2009-03-26 | 2009-08-19 | 华为技术有限公司 | 视频报文的处理方法、设备和系统 |
CN101697504A (zh) * | 2009-09-08 | 2010-04-21 | 杭州华三通信技术有限公司 | 一种提高数据传输质量的方法及装置 |
CN102043752A (zh) * | 2010-10-06 | 2011-05-04 | 钰创科技股份有限公司 | 可减少即时传输所需的重传缓冲器的容量的方法与装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100899823B1 (ko) * | 2007-05-10 | 2009-05-27 | 포스데이타 주식회사 | 무선 통신시스템의 arq 피드백 방법 및 장치 |
CN101645766B (zh) * | 2009-09-09 | 2013-04-17 | 成都市华为赛门铁克科技有限公司 | 实现数据包重发的方法、装置及系统 |
-
2012
- 2012-04-10 CN CN201210103340.8A patent/CN103368703B/zh active Active
- 2012-10-26 WO PCT/CN2012/083544 patent/WO2013152586A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082898A (zh) * | 2007-07-30 | 2007-12-05 | 威盛电子股份有限公司 | 芯片组的数据链结层及用于其处理包的方法 |
CN101222311A (zh) * | 2008-01-29 | 2008-07-16 | 杭州华三通信技术有限公司 | 实时报文丢包恢复方法、系统及接收端单元 |
CN101511013A (zh) * | 2009-03-26 | 2009-08-19 | 华为技术有限公司 | 视频报文的处理方法、设备和系统 |
CN101697504A (zh) * | 2009-09-08 | 2010-04-21 | 杭州华三通信技术有限公司 | 一种提高数据传输质量的方法及装置 |
CN102043752A (zh) * | 2010-10-06 | 2011-05-04 | 钰创科技股份有限公司 | 可减少即时传输所需的重传缓冲器的容量的方法与装置 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111953655A (zh) * | 2017-02-28 | 2020-11-17 | 华为技术有限公司 | 一种通信系统中服务器响应请求消息的方法及设备 |
CN111953655B (zh) * | 2017-02-28 | 2023-03-10 | 华为云计算技术有限公司 | 一种通信系统中服务器响应请求消息的方法及设备 |
CN108881140A (zh) * | 2017-10-31 | 2018-11-23 | 北京视联动力国际信息技术有限公司 | 一种基于视联网的文件下载方法及装置 |
CN111106902A (zh) * | 2018-10-26 | 2020-05-05 | 杭州海康威视系统技术有限公司 | 数据报文传输方法、装置、设备及计算机可读存储介质 |
CN111106902B (zh) * | 2018-10-26 | 2022-11-15 | 杭州海康威视系统技术有限公司 | 数据报文传输方法、装置、设备及计算机可读存储介质 |
WO2020143635A1 (zh) * | 2019-01-09 | 2020-07-16 | 中兴通讯股份有限公司 | 数据的重传方法、装置、存储介质及电子装置 |
CN111431672A (zh) * | 2019-01-09 | 2020-07-17 | 中兴通讯股份有限公司 | 数据的重传方法、装置、存储介质及电子装置 |
CN113315664A (zh) * | 2021-06-16 | 2021-08-27 | 无锡江南计算技术研究所 | 一种消息处理芯片验证方法 |
CN113315664B (zh) * | 2021-06-16 | 2023-07-11 | 无锡江南计算技术研究所 | 一种消息处理芯片验证方法 |
CN114257350A (zh) * | 2021-12-31 | 2022-03-29 | 广东省教育研究院 | 传输质量优化方法、装置及传输系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103368703B (zh) | 2016-08-17 |
WO2013152586A1 (zh) | 2013-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11467975B2 (en) | Data processing method and NVMe storage device | |
JP4662273B2 (ja) | 通信装置、方法及びプログラム | |
CN103368703A (zh) | 数据包重传方法、数据包接收方法及装置 | |
CN103098428B (zh) | 一种实现pcie交换网络的报文传输方法、设备和系统 | |
US8885513B2 (en) | Systems and methods for dynamically changing network node behavior | |
US7346699B1 (en) | Reliable multicast | |
JP4723102B2 (ja) | トランザクション実行のためのプロトコル | |
US20130114598A1 (en) | Packet ordering based on delivery route changes in communication networks | |
US9866351B2 (en) | Communication method and communication apparatus | |
CN103188059A (zh) | 快速通道互联系统中数据包重传方法、装置和系统 | |
CN103905300A (zh) | 一种数据报文发送方法、设备及系统 | |
CN103141050A (zh) | 快速通道互联系统中数据包重传方法、节点 | |
CN110753003B (zh) | 一种基于字节编号的命名数据网络数据分片可靠传输方法 | |
CN104866454A (zh) | 面向板级高速总线的写报文前瞻处理方法及装置 | |
CN100471165C (zh) | 在网络中的缓冲数据的抢先重发 | |
CN111181698B (zh) | 数据处理方法、装置、设备及介质 | |
CN101026441A (zh) | 一种自动重发出错数据包的方法及重发缓冲器 | |
CN104104475A (zh) | 一种应答信号的生成方法、接收方法与装置 | |
CN105933453A (zh) | 一种传输数据的方法和系统 | |
US10609188B2 (en) | Information processing apparatus, information processing system and method of controlling information processing system | |
CN102821043A (zh) | 一种控制方法和装置 | |
KR0156856B1 (ko) | 다중 메세지 재전송 처리장치 및 방법 | |
CN105376341B (zh) | 自动跟踪设备多ip配置的方法 | |
CN116760512B (zh) | 用于Multi-Link的HARQ重传控制方法及装置 | |
KR20110074476A (ko) | 무선 통신 네트워크에서 자동 반복 요청 피드백을 통신하는 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220118 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Patentee after: xFusion Digital Technologies Co., Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |