发明内容
本发明实施例提供一种数据重传方法及装置,用以解决现有技术中重传数据会增加重传时间和能耗等问题。
第一方面提供一种数据重传方法,包括:
若确定需要进行数据重传时,获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,所述第一中间数据为所述首发数据包中除循环冗余校验CRC余数之外的其他信息;
获取所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获取待重传的CRC余数;
按照预定格式,将所述待重传的第二中间数据和所述待重传的CRC余数进行封装获得待重传数据包,并发送所述待重传数据包。
结合第一方面,在第一方面的第一种可能的实现方式中,所述获取所述差值对应的CRC余数包括:根据所述差值,查找CRC余数表获取所述差值对应的CRC余数;其中,所述CRC余数表存储有全部八位二进制序列对应的CRC余数。
结合第一方面,在第一方面的第二种可能的实现方式中,所述获取所述差值对应的CRC余数包括:将用于计算所述首发数据包中的CRC余数的生成多项式,与所述差值进行伽罗华域乘法,将所述乘法结果作为所述差值对应的CRC余数。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述确定需要进行数据重传以及之后的其他操作均由物理PHY层芯片执行;
其中,所述PHY层芯片确定需要进行数据重传包括:介质访问控制MAC层芯片向所述PHY层芯片发送第一重传指示;所述PHY层芯片根据所述第一重传指示,确定需要进行数据重传。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第一方面的第四种可能的实现方式中,所述确定需要进行数据重传以及在确定需要进行数据重传之后,且在发送所述待重传数据包之前的其他操作均由MAC层芯片执行;
所述发送所述待重传数据包包括:所述MAC层芯片向PHY层芯片发送第二重传指示和所述待重传数据包;所述PHY层芯片根据所述第二重传指示,发送所述待重传数据包。
结合第一方面的第三种可能的实现方式,在第一方面的第五种可能的实现方式中,所述介质访问控制MAC层芯片向所述PHY层芯片发送第一重传指示包括:所述MAC层芯片通过直接存储器访问DMA控制器向所述PHY层芯片发送所述第一重传指示。
结合第一方面的第四种可能的实现方式,在第一方面的第六种可能的实现方式中,所述MAC层芯片向PHY层芯片发送第二重传指示和所述待重传数据包包括:所述MAC层芯片通过DMA控制器向所述PHY层芯片发送所述第二重传指示和所述待重传数据包。
第二方面提供一种数据重传装置,包括:
确定单元,用于确定需要进行数据重传;
第一获取单元,用于在所述确定单元确定需要进行数据重传时,获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,所述第一中间数据为所述首发数据包中除循环冗余校验CRC余数之外的其他信息;
第二获取单元,用于获取所述差值的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获取待重传的CRC余数;
构造单元,用于按照预定格式,将所述待重传的第二中间数据和所述待重传的CRC余数进行封装获得待重传数据包;
第一发送单元,用于发送所述待重传数据包。
结合第二方面,在第二方面的第一种可能的实现方式中,所述第二获取单元具体用于根据所述差值,查找CRC余数表获取所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获取所述待重传的CRC余数;其中,所述CRC余数表存储有全部八位二进制序列对应的CRC余数。
结合第二方面,在第二方面的第二种可能的实现方式中,所述第二获取单元具体用于将用于计算所述首发数据包中的CRC余数的生成多项式,与所述差值进行伽罗华域乘法,将所述乘法结果作为所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获取所述待重传的CRC余数。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述确定单元、所述第一获取单元、所述第二获取单元、所述构造单元和所述第一发送单元设置于所述数据重传装置的物理PHY层芯片中实现;
其中,所述PHY层芯片上的所述确定单元具体用于接收所述数据重传装置的介质访问控制MAC层芯片发送的第一重传指示,根据所述第一重传指示,确定需要进行数据重传。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第四种可能的实现方式中,所述确定单元、所述第一获取单元、所述第二获取单元和所述构造单元设置于所述数据重传装置的MAC层芯片中实现;所述第一发送单元设置于所述数据重传装置的PHY层芯片中实现;
其中,所述MAC层芯片还包括:第二发送单元,用于向所述PHY层芯片发送第二重传指示和所述待重传数据包;
所述PHY层芯片还包括:接收单元,用于接收所述第二发送单元发送的所述第二重传指示和所述待重传数据包;
所述第一发送单元具体用于根据所述接收单元接收的所述第二重传指示,发送所述接收单元接收的所述待重传数据包。
结合第二方面的第三种可能的实现方式,在第二方面的第五种可能的实现方式中,所述MAC层芯片具体用于通过直接存储器访问DMA控制器向所述确定单元发送所述第一重传指示。
结合第二方面的第四种可能的实现方式,在第二方面的第六种可能的实现方式中,所述第二发送单元具体用于通过DMA控制器向所述接收单元发送所述第二重传指示和所述待重传数据包。
本发明实施例提供的数据重传方法及装置,在确定需要进行数据重传时,先获取首发数据包中的第一中间数据(即除CRC余数之外的其他信息)与待重传的第二中间数据之间的差值,获取该差对应值的CRC余数,再根据首发数据包中的CRC余数与差值对应的CRC余数,获得待重传的CRC余数,按照预定格式,将待重传的第二中间数据与待重传的CRC余数进行封装,获得待重传数据包并发送所述待重传数据包,实现数据重传,同时与现有技术中重新计算待重传数据包需要携带的CRC余数相比,本发明实施例只需获取差值对应的CRC余数,由于数据在首次发送与重传时形成的数据包的差异比较小,故获取差值对应的CRC余数与确定待重传数据包的CRC余数相比,其计算量要小很多,有利于减少数据重传的时间,减少能耗,解决了现有技术存在的问题。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种数据重传方法的流程图。如图1所示,所述方法包括:
101、若确定需要进行数据重传时,获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值;其中,第一中间数据是指首发数据包中除CRC余数之外的其他信息。
首先说明,本实施例提供的数据重传方法可以由软件实现,也可以由硬件实现,也就是说本实施例的执行主体,例如可以是数据重传装置,该数据重传装置可以由软件实现,也可以由硬件实现。
在本发明各实施例中,所述首发数据包是指数据在首次发送时形成的数据包,该数据包包括第一中间数据和CRC余数。
其中,确定是否需要进行数据重传,可以根据是否在指定时间内接收到接收端针对该数据返回的确认消息;如果在指定时间内接收到接收端返回的确认消息,则确定不需要进行数据重传;如果在指定时间内未接收到接收端返回的确认消息,则确定需要进行数据重传。这里涉及的确定是否需要进行数据重传的过程可由MAC层来完成,例如可以由MAC层芯片实现,但不限于此。
在一可选实施方式中,MAC层芯片可以通过重传指示,将所确定的需要进行数据重传的信息提供给PHY层芯片,从而使PHY层芯片可以确定需要进行数据重传。
在本实施例中,数据通过无线信道传输后到达接收端,为了保证接收端能方便的获知接收的数据是否正确,采用CRC校验的数据检错机制。其中,CRC校验采用多项式编码方法实现。基于此,在发送数据时,发送端需要用生成多项式G(x)去除待发送的数据t(x),将得到的余数作为CRC余数,然后把CRC余数放在数据t(x)后面作为数据包T(x)一起发送出去。对于接收端,需要与发送端使用同一个生成多项式G(x),在接收到数据包之后,对接收到的数据包进行CRC校验,以计算的结果是否为0为据,判断数据包是否出错。如果余数为0,则说明校验正确,否则校验失败,从而判断数据包是否出错。
其中,对于某一数据来说,无论是首次发送还是重传,都会按照预定格式形成携带有CRC余数的数据包,之后再将数据包发送出去。其中,需要区分数据是首次发送还是重传,现有各种协议主要是通过数据包的结构来进行区分。在本发明各实施例中,为便于描述将首次发送数据时形成的数据包称为首发数据包,将需要进行数据重传时对应的数据包称为待重传数据包。在本发明实施例中,待重传数据包包括第二中间数据与CRC余数,所述第二中间数据是在进行数据重传过程形成的,主要是指待重传数据包中除CRC余数之外的其他信息。由于首发数据包与待重传数据包存在不同,故首发数据包与待重传数据包所携带的CRC余数也会有所不同。
下面以IEEE802.11标准为例,发送数据时,所形成的数据包的格式如图2所示,主要包括:帧控制(frame control)域、持续时间/标识(Duration/ID)域、地址1(Address 1)域、地址2(Address 2)域、地址3(Address 3)域、序列控制(Sequence control)域、地址4(Address 4)域、服务质量控制(QoS control)域、帧主体(Frame body)域和帧检验序列(FCS)域。其中,FCS域用于填充该数据包的CRC余数。进一步,帧控制域包括:协议版本(Protocol version)域、类型(type)域、子类型(subtype)域、发送DS(To DS)域、来自DS(From DS)域、更多分片(More Frag)域、重传(Retry)域、功耗管理(Pwr Mgt)域、更多数据(More Data)域、受保护数据帧(Protected Frame)域和顺序(Order)域。
上述重传域主要用于区分该数据包携带的数据是首次发送还是重传,例如当该数据是重传时,数据包中的该比特需要设置为1,而该数据包在发送端会被称为待重传数据包,到接收端之后会被称为重传数据包;而当该数据是首次发送时,数据包中的该比特一般会设置为0,该数据包会被称为收发数据包。也就是说,在IEEE802.11标准下,首发数据包中除CRC余数之外其他信息(即第一中间数据),与待重传数据包中除CRC余数之外其他信息(即第二中间数据)之间的差值,实际上是重传域这一比特。
在此说明,不同协议或标准定义的数据包的格式可能会有所不同,所以不同协议或标准下首发数据包中的第一中间数据啊,与待重传的第二中间数据之间的差值可能会有所不同。
基于上述举例可知,发送端在需要进行数据重传时,可以按照所使用标准或协议中定义的数据包的格式,确定由待重传的数据构成的待重传的第二中间数据,然后获取首发数据包中的第一中间数据与所述待重传的第二中间数据之间的差值。
102、获取所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获取待重传的CRC余数。
在现有技术中,由于待重传数据包与首发数据包并不完全相同,因此,计算出的CRC余数也会有所不同,故发送端在需要进行数据重传时,通常会重新计算CRC余数。一般,发送端会采用按字节查找CRC余数表的方式,计算待重传数据包中每个字节对应的CRC余数,进而获得待重传数据包中的CRC余数;或者,发送端会采用伽罗华域乘法器实现待重传数据包中CRC余数的计算。这两种方式计算量都较大,导致重传时间较长,且耗费大量资源。
在本实施例中,当获取到所述差值之后,获取所述差值对应的CRC余数。由于所述差值与待重传数据包相比,其数据量要小很多,例如在IEEE802.11标准下,所述差值仅为1比特,故获取所述差值对应的CRC余数的工作量要小很多。
可选的,获取所述差值对应的CRC余数的过程可以是:根据所述差值,查询CRC余数表,获取所述差值对应的CRC余数。其中,CRC余数表存储有全部八位二进制序列对应的CRC余数。
可选的,获取所述差值对应的CRC余数的过程还可以是:将用于计算所述首发数据包中的CRC余数的生成多项式,与所述差值进行伽罗华域乘法,将所述乘法结果作为所述差值对应的CRC余数。
在获取所述差值对应的CRC余数后,将所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,作为待重传的CRC余数。这里所述待重传的CRC余数主要是指需要携带在待重传数据包中的CRC余数。其中,所述首发数据包中的CRC余数是在首次发送数据时计算出的,可以将其存储在本地,以便在计算待重传的CRC余数时使用,不需要重新计算,以减少数据重传时间,减少资源消耗。
其中,关于所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,是否就是需要携带在所述待重传数据包中的CRC余数(即待重传的CRC余数),下面以在IEEE802.11标准下的数据包为例给出具体的论证过程。
首先,说明以计算CRC采用的方式为查找CRC余数表法为例的论证过程。
在查找CRC余数表法中,最后一个字节(byte)的CRC余数计算方法为:倒数第二字节的CRC余数左移8位后,再加上倒数第二字节的CRC余数右移24位和最后一个字节之和所求得的CRC余数。基于此,如果将CRC校验法则设置为从数据包尾计算到数据包头,这样首发数据包中的第一中间数据与待重传的第二中间数据仅差重传域(即0x08),这样在针对字节查CRC余数表的方法中可以看出,只有最后一个字节的CRC余数计算不同,其他字节的CRC余数的计算过程完全相同,因此只需要将最后一个字节加上重传域的取值0x08即可,然后计算加上0x08后该字节的CRC余数。
在查找CRC余数表实现时,记下首发数据包中的CRC余数和首发数据包最后一个字节查CRC余数表的索引A(即倒数第二字节的CRC余数右移24位和最后一个字节之和),当重传数据时,利用多项式加法等效于异或操作,而异或操作的可逆性,可以得到待重传的CRC余数为:首发数据包中的CRC余数加上索引A所求得的CRC余数,再加上索引A与0x08的之和所求得的CRC余数。
根据多项式运算规则和CRC计算原理,索引A与0x08的之和所求得的CRC余数等于,索引A所求得的CRC余数加上0x08所求得的CRC余数。根据多项式加法等效于异或运算的规则,两个相同数的异或操作结果为零,所以待重传的CRC余数等于:首发数据包中的CRC余数加上0x08所求得CRC余数,即首发数据包中的CRC余数与所述差值对应的CRC余数之和。
其次,说明以计算CRC采用的方式为伽罗华域乘法为例的论证过程。
针对伽罗华域乘法实现的CRC算法为例,最后一个字节的CRC余数计算方法为:倒数第二字节的CRC余数和0x100的伽罗华域乘法结果再加上生成多项式和最后一个字节的伽罗华域乘法结果。即伽罗华域乘法实现的CRC算法中,某个字节的CRC余数为上一字节的CRC余数和0x100的伽罗华域乘法结果再加上生成多项式和本字节的伽罗华域乘法结果。基于此,如果将CRC校验法则设置为从数据包尾计算到数据包头,这样首发数据包中的第一中间数据和待重传的第二中间数据仅差重传域(即0x08),这样在针对伽罗华域乘法计算实现方法中可以看出,只有最后一个字节的CRC余数计算不同,其他字节的CRC余数的计算过程完全相同,因此只需要将最后一个字节加上重传域的取值0x08即可,然后计算加上0x08后该字节的CRC余数。
在CRC伽罗华域乘法器实现时,可以记下首发数据包中的CRC余数,当重传数据时,利用多项式加法等效于异或操作,而异或操作的可逆性,可以得到待重传的CRC余数为:首发数据包中的CRC余数加上生成多项式和重传时最后一个字节的伽罗华域乘法结果,再加上生成多项式和首次传输的最后一个字节的伽罗华域乘法结果。
根据伽罗华域乘法法则的原理,生成多项式和重传时最后一个字节的伽罗华域多项式可以等于生成多项式和首次传输的最后一个字节的伽罗华域乘法结果加上生成多项式和0x08的伽罗华域乘法结果。根据多项式加法等效于异或运算的规则,两个相同数的异或操作结果为零,所以待重传的CRC余数等于:首发数据包中的CRC余数加上生成多项式和0x08的伽罗华域乘法结果。其中,将生成多项式和0x08的伽罗华域乘法结果定义为所述差值对应的CRC余数,因此,待重传的CRC余数等于:首发数据包中的CRC余数与所述差值对应的CRC余数之和。
103、按照预定格式,将所述待重传的第二中间数据与所述待重传的CRC余数进行封装获得待重传数据包,并发送所述待重传数据包。
在获得待重传的第二中间数据和待重传的CRC余数后,可以按照预定格式,将这两部分内容进行封装,从而获得待重传数据包。不同标准或协议下,数据包格式会有所不同。以IEEE802.11标准为例,在获得待重传的第二中间数据和待重传的CRC余数后,可以将待重传的CRC余数添加到所述待重传的第二中间数据之后,从而获得所述待重传数据包。
在获得所述待重传数据包后,可以将所述待重传数据包发送出去,以实现数据的重传。
由上述可见,在本实施例中,在确定需要进行数据重传时,先获取首发数据包中的第一中间数据(即除CRC余数之外的其他信息)与待重传的第二中间数据之间的差值,获取该差值对应的CRC余数,再根据首发数据包中的CRC余数与差值对应的CRC余数,获得待重传的CRC余数,按照预定格式,对待重传的第二中间数据与待重传的CRC余数进行封装获得待重传数据包并发送所述待重传数据包,实现数据重传,同时与现有技术中重新计算待重传数据包需要携带的CRC余数相比,本实施例只需获取差值的CRC余数,由于数据在首次发送与重传时形成的数据包的差异比较小,故获取差值对应的CRC余数与确定待重传数据包的CRC余数相比,其计算量要小很多,有利于减少数据重传的时间,减少能耗,解决了现有技术存在的问题。
在一种应用场景中,执行图1所示方法实施例的执行主体,例如数据重传装置包括MAC层芯片和PHY层芯片,图1所示方法实施例中的各步骤,例如确定需要进行数据重传以及之后的其他操作可均由PHY层芯片执行。具体的,PHY层确定需要进行数据重传,之后获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,获取所述差值对应的CRC余数,将所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,作为待重传的CRC余数,按照预定格式,将所述待重传的第二中间数据与所述待重传的CRC余数进行封装获得待重传数据包,最后发送所述待重传数据包,以实现数据重传。
其中,PHY层芯片确定需要进行数据重传包括:MAC层芯片向PHY层芯片发送第一重传指示,所述PHY层芯片根据所述第一重传指示,确定需要进行数据重传。可选的,当MAC层芯片与PHY层芯片属于同一核时,MAC层芯片可以直接向PHY层芯片发送第一重传指示。可选的,当MAC层芯片与PHY层芯片属于不同核时,MAC层芯片与PHY层芯片之间属于核间通信,则MAC层芯片可以通过DMA控制器向PHY层芯片发送所述第一重传指示。由于本发明实施例中待重传的CRC余数的计算量相对较低,故可以由PHY层芯片来完成,从而极大的减轻MAC层芯片的负担,同时还可以减少重传数据的时间和消耗的资源。
在另一种应用场景中,执行图1所示方法实施例的执行主体,例如数据重传装置包括MAC层芯片和PHY层芯片,图1所示方法实施例中的各步骤中,确定需要进行数据重传以及在确定需要进行数据重传之后,且在发送待重传数据包之前的其他操作可由MAC层芯片执行,而发送待重传数据包的操作可由所述PHY层芯片执行。具体的,MAC层芯片确定需要进行数据重传,之后获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,获取所述差值对应的CRC余数,将所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,作为待重传的CRC余数,按照预定格式,将所述待重传的第二中间数据与所述待重传的CRC余数进行封装获得待重传数据包。所述PHY层芯片将所述MAC层芯片获得的所述待重传数据包发送出去。
其中,PHY层芯片发送所述待重传数据包包括:MAC层芯片向PHY层芯片发送第二重传指示和所述待重传数据包;PHY层芯片根据所述第二重传指示,发送所述待重传数据包。可选的,当MAC层芯片与PHY层芯片属于同一核时,MAC层芯片可以直接向PHY层芯片发送第二重传指示,并直接将所述待重传数据包提供给所述PHY层芯片。可选的,当MAC层芯片与PHY层芯片属于不同核时,MAC层芯片与PHY层芯片之间属于核间通信,则MAC层芯片可以通过DMA控制器向PHY层芯片发送所述第二重传指示,并通过DMA控制器将所述待重传数据包提供给所述PHY层芯片。
本发明以下实施例将以PHY层芯片负责计算待重传的CRC余数为例,对IEEE802.11标准下几种应用场景中的处理流程以及有益效果做进一步说明。
在一应用场景下的单核系统中,当确定需要进行数据重传时,MAC层芯片仅需向PHY层芯片发送一重传指示,告知PHY层芯片需要进行数据重传即可;PHY层芯片根据该重传指示,确定需要进行数据重传,然后执行以下操作:获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,根据所述差值查找CRC余数表,获取所述差值对应的CRC余数,将所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,作为待重传的CRC余数,按照预定格式,将待重传的CRC余数放到所述待重传的第二中间数据之后,获得待重传数据包,其中,待重传数据包中的重传域被置为1,然后将所述待重传数据包发送出去。在现有技术中,MAC层芯片针对1024字节的数据进行一次CRC计算,需要17微秒(us),而本实施例利用PHY层芯片的处理能力,不需要再像现有技术那样计算待重传的CRC余数,大约可以节约17us,并且还可以节约MAC重新计算CRC余数所消耗的资源。
在另一应用场景下的单核系统中,当确定需要进行数据重传时,MAC层芯片仅需向PHY层芯片发送一重传指示,告知PHY层芯片需要进行数据重传即可;PHY层芯片根据该重传指示,确定需要进行数据重传,然后执行以下操作:获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,将用于计算所述首发数据包中的CRC余数的生成多项式与所述差值进行伽罗华域乘法,将所述乘法结果作为所述差值对应的CRC余数,将所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,作为待重传的CRC余数,按照预定格式,将所述待重传的CRC余数放到所述待重传的第二中间数据之后,获得待重传数据包,其中,所述待重传数据包中的重传域被置为1,然后将所述待重传数据包发送出去。在现有技术中,MAC层芯片针对1024字节的数据进行一次CRC计算,需要17微秒(us),而本实施例利用PHY层芯片的处理能力,不需要再像现有技术那样计算待重传的CRC余数,大约可以节约17us,并且还可以节约MAC重新计算CRC余数所消耗的资源。
在又一应用场景下的多核系统中,当确定需要进行数据重传时,MAC层芯片仅需通过DMA控制器向PHY层芯片发送一重传指示,告知PHY层芯片需要进行数据重传即可;PHY层芯片根据该重传指示,确定需要进行数据重传,然后执行以下操作:获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,根据所述差值查找CRC余数表,获取所述差值对应的CRC余数,将所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,作为待重传的CRC余数,按照预定格式,将待重传的CRC余数放到所述待重传的第二中间数据之后,获得待重传数据包,其中,待重传数据包中的重传域被置为1,然后将所述待重传数据包发送出去。在现有技术中,MAC层芯片针对1024字节的数据进行一次CRC计算,需要17微秒(us),并且MAC层芯片需要将携带CRC余数的重传数据包通过DMA控制器传输给PHY层芯片,一般需要耗时8us;PHY层芯片还要通过DMA控制器读取携带CRC余数的待重传数据包,一般需要耗时9us,而本实施例MAC层芯片确定需要进行数据重传时,不需要通过DMA控制给PHY层芯片发送整个待重传数据包,只需发送一个简单的重传指示,PHY层芯片即可计算出待重传的CRC余数并得到待重传数据包,然后完成待重传数据包的发送,不仅节约了MAC层芯片像现有技术那样计算重传数据包中的CRC余数需要消耗的17us,而且可以减少MAC层芯片与PHY层芯片之间进行交互所消耗的时间,总体上减少了数据重传的时间,还可以节约MAC层芯片重新计算CRC余数所消耗的资源。
在又一应用场景下的多核系统中,当确定需要进行数据重传时,MAC层芯片仅需通过DMA控制器向PHY层芯片发送一重传指示,告知PHY层芯片需要进行数据重传即可;PHY层芯片根据该重传指示,确定需要进行数据重传,然后执行以下操作:获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,将用于计算所述首发数据包中的CRC余数的生成多项式与所述差值进行伽罗华域乘法,将所述乘法结果作为所述差值对应的CRC余数,将所述首发数据包中的CRC余数与所述差值对应的CRC余数之和,作为待重传的CRC余数,按照预定格式,将待重传的CRC余数放到所述待重传的第二中间数据之后,获得待重传数据包,其中,待重传数据包中的重传域被置为1,然后将所述待重传数据包发送出去。在现有技术中,MAC层芯片针对1024字节的数据进行一次CRC计算,需要17微秒(us),并且MAC层芯片需要将携带CRC余数的待重传数据包通过DMA控制器传输给PHY层芯片,一般需要耗时8us;PHY层芯片还要通过DMA控制器读取携带CRC余数的待重传数据包,一般需要耗时9us,而本实施例MAC层芯片需要进行数据重传时,不需要通过DMA控制给PHY层芯片发送整个待重传数据包,只需发送一个简单的重传指示,PHY层芯片即可计算出待重传的CRC余数并得到待重传数据包,然后完成待重传数据包的发送,不仅节约了MAC层芯片像现有技术那样计算待重传数据包中的CRC余数需要消耗的17us,而且可以减少MAC层芯片与PHY层芯片之间进行交互所消耗的时间,总体上减少了数据重传的时间,还可以节约MAC层芯片重新计算CRC余数所消耗的资源。
图3为本发明实施例提供的一种数据重传装置的结构示意图。如图3所示,所述装置包括:确定单元31、第一获取单元32、第二获取单元33、构造单元34和第一发送单元35。
确定单元31,用于确定是否需要进行数据重传。第一获取单元32,与确定单元31连接,用于在确定单元31确定需要进行数据重传时,获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,所述第一中间数据为所述首发数据包中除CRC余数之外的其他信息;其中,所述首发数据包是指数据在首次发送时形成的数据包。所述第二中间数据主要是指待重传数据包中除CRC余数之外的其他信息。
第二获取单元33,与第一获取单元32连接,用于获取第一获取单元32获取的所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获得待重传的CRC余数。
构造单元34,与第二获取单元33连接,用于按照预设格式,将所述待重传的第二中间数据和所述待重传的CRC余数进行封装获得待重传数据包。
第一发送单元35,与构造单元34连接,用于发送构造单元34获得的所述重传数据包。
在一可选实施方式中,第二获取单元33具体可用于根据所述差值,查找CRC余数表获取所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获取所述待重传的CRC余数;其中,所述CRC余数表存储有全部八位二进制序列对应的CRC余数。
在一可选实施方式中,第二获取单元33具体可用于将用于计算所述首发数据包中的CRC余数的生成多项式,与所述差值进行伽罗华域乘法,将所述乘法结果作为所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获取所述待重传的CRC余数。
在一可选实施方式中,如图4所示,所述数据重传装置包括MAC层芯片41和PHY层芯片42。其中,确定单元31、第一获取单元32、第二获取单元33、构造单元34和第一发送单元35可设置于所述数据重传装置的PHY层芯片42中实现。所述PHY层芯片42上的确定单元31具体可用于接收所述数据重传装置的MAC层芯片41发送的第一重传指示,根据所述第一重传指示,确定需要进行数据重传。
在另一可选实施方式中,如图5所示,所述数据重传装置包括MAC层芯片51、PHY层芯片52和DMA控制器53。DMA控制器53连接于MAC层芯51片和PHY层芯片52之间。其中,确定单元31、第一获取单元32、第二获取单元33、构造单元34和第一发送单元35可设置于所述数据重传装置的PHY层芯片52中实现。MAC层芯片51具体可用于通过DMA控制器53向确定单元31发送所述第一重传指示。而确定单元31具体可用于接收MAC层芯片51通过DMA控制器53发送的第一重传指示,根据所述第一重传指示,确定需要进行数据重传。
在又一可选实施方式中,如图6所示,所述数据重传装置包括MAC层芯片61和PHY层芯片62。其中,确定单元31、第一获取单元32、第二获取单元33和构造单元34可设置于所述数据重传装置的MAC层芯片61中实现;而第一发送单元35可设置于所述数据重传装置的PHY层芯片62中实现。其中,MAC层芯片61还包括:第二发送单元36。第二发送单元36,用于向PHY层芯片62发送第二重传指示和所述待重传数据包。相应的,PHY层芯片62还包括:接收单元37。接收单元37可用于接收第二发送单元36发送的所述第二重传指示和所述待重传数据包。基于此,PHY层芯片62上的第一发送单元35具体可用于根据接收单元37接收的所述第二重传指示,发送接收单元37接收的所述待重传数据包。
在又一可选实施方式中,如图7所示,所述数据重传装置包括MAC层芯片71、PHY层芯片72和DMA控制器73。其中,确定单元31、第一获取单元32、第二获取单元33和构造单元34可设置于所述数据重传装置的MAC层芯片71中实现;而第一发送单元35可设置于所述数据重传装置的PHY层芯片72中实现。其中,MAC层芯片71还包括:第二发送单元36。相应的,PHY层芯片72还包括:接收单元37。第二发送单元36,用于通过DMA控制器73向PHY层芯片72中的接收单元37发送第二重传指示和所述待重传数据包。接收单元37可用于通过DMA控制器73接收第二发送单元37发送的所述第二重传指示和所述待重传数据包。基于此,PHY层芯片72上的第一发送单元35具体可用于根据接收单元37接收的所述第二重传指示,发送接收单元37接收的所述待重传数据包。
上述各实施例提供的数据重传装置,其各功能单元可用于执行图1所示数据重传方法实施例的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例提供的数据重传装置,在确定需要进行数据重传时,先获取首发数据包中的第一中间数据(即除CRC余数之外的其他信息)与待重传的第二中间数据之间的差值,获取该差值对应的CRC余数,再根据首发数据包中的CRC余数与差值对应的CRC余数,获得待重传的CRC余数,按照预定格式,将待重传的第二中间数据与待重传的CRC余数进行封装,获得待重传数据包并发送所述待重传数据包,实现数据重传,同时与现有技术中重新计算待重传数据包需要携带的CRC余数相比,只需获取差值对应的CRC余数,由于数据在首次发送与重传时形成的数据包的差异比较小,故获取差值对应的CRC余数与确定待重传数据包的CRC余数相比,其计算量要小很多,有利于减少数据重传的时间,减少能耗,解决了现有技术存在的问题。
图8为本发明又一实施例提供的数据重传装置的结构示意图。如图8所示,所述装置包括:存储器81、处理器82和发射器83。
存储器81,用于存储程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。
存储器81可以包含高速RAM存储器,也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
处理器82,用于执行存储器81存储的程序,以用于:在确定据需要进行数据重传时,获取首发数据包中的第一中间数据与待重传的第二中间数据之间的差值,所述第一中间数据为所述首发数据包中除CRC余数之外的其他信息;以及获取所述差值对应的CRC余数,并根据所述首发数据包中的CRC余数与所述差值对应的CRC余数,获得待重传的CRC余数,并按照预设格式,将所述待重传的第二中间数据和所述待重传的CRC余数进行封装获得待重传数据包。
处理器82可以是一个中央处理器(Central Processing Unit,简称为CPU),或者是特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路,或者可以是MAC层芯片或PHY层芯片。
发射器83,用于发送处理器82获得的所述待重传数据包。
在一可选实施方式中,处理器82用于获取所述差值对应的CRC余数包括:处理器82具体可用于根据所述差值,查找CRC余数表获取所述差值对应的CRC余数;其中,所述CRC余数表存储有全部八位二进制序列对应的CRC余数。
在一可选实施方式中,处理器82用于获取所述差值对应的CRC余数包括:处理器82具体可用于将用于计算所述首发数据包中的CRC余数的生成多项式,与所述差值进行伽罗华域乘法,将所述乘法结果作为所述差值对应的CRC余数。
进一步可选的,如图8所示,所述数据重传装置还包括:接收器84。接收器84,用于接收其他设备发送的数据,与发射器83相配合,完成所述数据重传装置与其他设备之间的通信。
可选的,在具体实现上,如果存储器81、处理器82、发射器83和接收器84独立实现,则存储器81、处理器82、发射器83和接收器84可以通过总线相互连接并完成相互间的通信。所述总线可以是工业标准体系结构(Industry Standard Architecture,简称为ISA)总线、外部设备互连(Peripheral Component,简称为PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,简称为EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器81、处理器82、发射器83和接收器84集成在一块芯片上实现,则存储器81、处理器82、发射器83和接收器84可以通过内部接口完成相同间的通信。
本实施例提供的数据重传装置可用于执行图1所示数据重传方法实施例的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例提供的数据重传装置,在确定需要进行数据重传时,先获取首发数据包中的第一中间数据(即除CRC余数之外的其他信息)与待重传的第二中间数据之间的差值,获取该差值对应的CRC余数,再根据首发数据包中的CRC余数与差值对应的CRC余数,获得待重传的CRC余数,按照预定格式,将待重传的第二中间数据与待重传的CRC余数进行封装,获得待重传数据包并发送所述待重传数据包,实现数据重传,同时与现有技术中重新计算待重传数据包需要携带的CRC余数相比,只需获取差值对应的CRC余数,由于数据在首次发送与重传时形成的数据包的差异比较小,故获取差值对应的CRC余数与确定待重传数据包的CRC余数相比,其计算量要小很多,有利于减少数据重传的时间,减少能耗,解决了现有技术存在的问题。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。