一种降低TOE中发送通道传输延迟量的方法与流程

文档序号:23270140发布日期:2020-12-11 19:01阅读:141来源:国知局
一种降低TOE中发送通道传输延迟量的方法与流程

本发明涉及一种降低toe中发送通道传输延迟量的方法,属于数据传输技术领域。



背景技术:

tcp/ip协议是互联网系统的主流通信协议,在众多应用场景中得到采用。实现tcp/ip协议是很多联网运行的设备必须做的工作。实现tcp/ip协议的传统做法是用cpu运行软件,但是运行软件需要占用大量的系统资源,而实现tcp/ip协议的软件通常与处理协议承载的应用数据的软件并行运行,所以,很多情况下,特别是在近年来网络速度越来越高、数据处理任务日渐繁重的情况下,两者之间的资源竞争导致了系统性能受限。

与此同时,cpu运行软件具有串行执行指令、时分复用硬件资源、受中断等系统机制制约的特征,这就导致基于软件的tcp/ip协议实现的实时性较差,具体表现为端到端的延迟量较大、延迟量的可预测性低。与此相对应,通信系统的高实时性,却是很多高性能应用场景的关键需求之一。

toe把tcp/ip协议“卸载”到硬件中,即实现所谓tcp/ipoffloadengine(简称toe,即“tcp/ip卸载引擎”),以腾出更多系统资源给应用层软件,同时提高tcp/ip协议实现的实时性,成为业界关注的重要研究方向。toe对tcp/ip协议栈进行扩展,使部分tcp/ip协议从cpu转移到toe硬件(通常包括位于链路层的以太网协议功能模块、位于网络层的ip协议功能模块和位于运输层的tcp协议功能模块,以及arp协议、icmp协议等功能模块),以减轻cpu的负担。

toe发送通道的常规实现方案如图1所示(其中未示出arp协议、icmp协议等功能模块),tcp协议功能模块接收应用算法功能模块下传的一段数据,将其存储在缓冲存储区中,在接收应用层数据字段的同时,计算其中可在首个tcp报文段中发送的部分字段的校验和,然后引用这个检验和、依据tcp报文段格式组装tcp报文段首部,连同从缓冲存储区中读出来的应用层数据字段一起,形成完整的tcp报文段、以字节流的形式发往ip协议功能模块,同时将tcp报文段的长度发往ip协议功能模块;ip协议功能模块结合tcp报文段的长度值计算ip数据报首部校验和、依据ip数据报报文格式组装形成完整的ip数据报首部,连同tcp报文段一起,发往以太网协议功能模块。以太网协议功能模块按照以太网帧格式组装包含了完整的ip数据报的以太网帧,计算crc校验值,以字节流的形式发往以太网协议功能模块的数据输出端口。

tcp连接建立成功之后,携带有ip数据报、tcp报文段以及应用层数据的以太网帧在toe发送通道中存在传输延迟。业界一般将这个传输延迟量定义为:对于某段待发送应用层数据字段,从它的末尾字节进入toe模块下行通道数据输入接口的时刻到包含此段应用层数据以及相关tcp报文段、ip数据报的以太网帧的首字节(不包括前导字段)离开toe模块下行通道数据输出接口的时刻之间的时间间隔。如何减少应用层数据字段在toe发送通道中的传输延迟量,成为亟待解决的问题。



技术实现要素:

本发明要解决的技术问题是:提供一种可以大幅度降低应用层数据字段在toe发送通道中的传输延迟量的方法。

为了解决上述技术问题,本发明提出的技术方案是:一种降低toe中发送通道传输延迟量的方法,所述toe包括位于链路层的以太网协议功能模块、位于网络层的ip协议功能模块和位于运输层的tcp协议功能模块,所述toe在发送以太网帧流的过程中,所述tcp协议功能模块、ip协议功能模块、以太网协议功能模块获知tcp连接两侧设备的端口号、ip地址和mac地址,分别写入待发送的tcp报文段、ip数据报和以太网帧;在toe发送通道将来自应用层的应用层数据字段下传至链路层输出接口的过程中,所述ip协议功能模块、tcp协议功能模块无需等待应用层数据字段传输完毕及tcp报文段校验和计算完成,就执行ip数据报、tcp报文段的组装和下传,在下传数据流中的tcp报文段校验和所处的位置赋以任意值;所述以太网协议功能模块在完成组装以太网帧之前就启动以太网帧的发送,在一边组装一边发送的过程中,在组装到tcp报文段校验和的时刻之前,能够从tcp协议功能模块收到tcp报文段校验和,从而确保了不会因为在完成各级协议报文段的组装工作完成之前启动了以太网帧的发送而导致组装、发送过程中出现等待数据、进而导致报文不连续的情况。

现有技术中,toe下行通道的各层报文段的组装工作要在下行应用层数据字段传输完成的时刻之后才能启动,致使链路层启动以太网帧发送的时刻晚于用层数据字段传输完成的时刻。本发明通过先传输数据(同时计算校验和),后传输校验和的方法,最大限度地实现了链路层、网络层和运输层各功能模块的并行执行,使得在应用层数据字段传输尚末完成时,链路层便启动以太网帧的发送工作,从而降低了toe发送通道的传输延迟量。

需要说明的是:严格来说,物理层与链路层之间交换的是比特流。然而,在具体的实现中,包含物理层功能的专用硬件功能模块通常已经实现了8*n比特与n字节(n是自然数)之间的双向变换功能,它与链路层之间交换的是n字节。所以,本发明为简化表述,将各层之间交换的数据流称为n字节流,即宽度为n字节的数据流,其中,n可以是任何一个自然数,并且本发明中各处出现的“n字节流”中的n值未必是同一个值。

附图说明

下面结合附图对本发明作进一步说明。

图1是toe发送通道的常规实现方案。

具体实施方式

实施例

fpga具备高速、并行、定时精确、功能灵活的特性,特别适合用于实现toe。本实施例的方法能够充分发挥fpga技术的这些特性,将链路层视为toe的组成部分予以统一考虑,以降低发送通道应用层数据的传输延迟量。因此,本实施例优选采用fpga实现toe。

本实施例中,如图1所示,toe包括位于链路层的以太网协议功能模块、位于网络层的ip协议功能模块和位于运输层的tcp协议功能模块(toe中还包括arp协议、icmp协议等辅助功能模块,但因辅助功能模块不影响本发明的创新点,故在图1中并未示出)。

所述toe在发送以太网帧流的过程中,tcp连接建立成功之后,所述tcp协议功能模块、ip协议功能模块、以太网协议功能模块获知tcp连接两侧设备的端口号、ip地址和mac地址,分别写入待发送的tcp报文段、ip数据报和以太网帧,此为现有技术,可参考相关文献,不再赘述。

本实施例中,在toe发送通道将来自应用层的应用层数据字段下传至链路层输出接口的过程中,所述ip协议功能模块、tcp协议功能模块无需等待应用层数据字段传输完毕及tcp报文段校验和计算完成,就执行ip数据报、tcp报文段的组装和下传,在下传数据流中的tcp报文段校验和所处的位置赋以任意值;所述以太网协议功能模块在完成组装以太网帧之前就启动以太网帧的发送,在一边组装一边发送的过程中,在组装到tcp报文段校验和的位置之前,能够从tcp协议功能模块收到tcp报文段校验和,从而确保了不会因为在完成各级协议报文段的组装工作完成之前启动了以太网帧的发送而导致组装、发送过程中出现等待数据、进而导致报文不连续的情况。

本实施例结合图1对toe发送通道的数据传输过程进行详细阐述:

tcp连接建立成功之后,本地toe发送通道上的tcp协议功能模块、ip协议功能模块、以太网协议功能模块可以获知tcp连接两侧设备的端口号、ip地址和mac地址,然后将其与已经可知的其他信息一起,分别写入待发送的tcp报文段结构、ip数据报结构、以太网帧结构。

应用算法功能模块在下传一段待发送的应用层数据字段之前,已经知道其长度为l0,并且在不晚于开始下传应用层数据字段时刻的时段内将这个长度值l0发送给tcp协议功能模块。

tcp协议功能模块收到应用层数据字段长度值之后,首先需要确认tcp连接对侧设备用于暂存接收到的应用层数据字段的缓冲区的可用空间的大小(这个值此前已经借助tcp协议规定的信息交换机制得到了)大于此长度值(此处命名为“确认a”),若否则不能启动后续与发送相关的动作,仅能将收到的应用层数据字段存入本地缓冲存储区。

在确认a之后,tcp协议功能模块将l0与已知的本侧单个tcp报文段携带的应用层数据字段长度值的上限lmax进行比较,以确定首个用于携带这段应用层数据字段的tcp报文段中可以携带的应用层数据字段长度l1(若l0≤lmax,则l1=l0,l0>lmax,则l1=lmax),进而结合本模块当前的工作状态,确定用于携带这段应用层数据字段的tcp报文段的长度l2(l2=l1+h1,h1=tcp报文段首部长度)、将l2的值发给ip协议功能模块,并且将其用于计算这个tcp报文段的校验和。

ip协议功能模块收到l2的值之后,结合本模块当前的工作状态,确定用于携带这个tcp报文段的ip数据报的长度l3(l3=l2+h2,h2=ip报文段首部长度),然后将l3的值发给以太网协议功能模块,并且将其用于计算这个ip数据报的首部校验和。

以太网协议功能模块收到l3的值之后,结合本模块当前的工作状态,确定用于携带这个ip数据报的以太网帧(不包括前导字段及crc校验字段)的长度l4(l4=l3+h3,h3=自不包括前导字段的以太网帧起始字节至ip数据报之前最末字节的数据长度)。

由以太网帧格式、ip数据报格式、tcp报文段格式,参数d1可以由各模块实时确定(d1=自以太网帧起始字节至tcp报文段中校验和字段之前最末字节的数据长度)。

令s=正常情况下toe各层之间传输n字节流的数据速率,则:自即将发送以太网帧首字节(不包括前导字段)至即将发送tcp报文段“校验和”字段的时间间隔t1=d1/s。

令t2=自tcp协议功能模块自应用层算法功能模块接收完长度为l1的应用层数据字段的时刻(命名为t0)起至完成tcp报文段校验和计算所需的时间间隔,则,以t0时刻为基准时刻,启动发送以太网帧首字节(不包括前导字段)的时刻就可以确定为ts=t0-t1+t2,即,ts+t1=t0+t2,启动发送之后,经过t1时段,需要发送tcp报文段校验和,此时,也正是t0+t2时刻,即完成tcp报文段校验和计算的时刻,在这个时刻以太网协议功能模块就可以将tcp报文段校验和的值直接写入发送序列中它应该处在的位置。

事实上,只要设计合理,t1就会大于t2,即,ts时刻将提前于t0时刻,提前量为t1–t2。

由于时间线的单向性,实际运行中不可能由t0反推确定ts的时刻,所以,本实施例以tcp协议功能模块开始接收应用层数据字段的时刻td为基准,正推得到ts,方法是:

令sd=自应用算法功能模块向tcp协议功能模块传输应用层数据字段的数据速率,则,由于t0-td=l1/sd,所以ts=t0-t1+t2=td+l1/sd-t1+t2=td+l1/sd-d1/s+t2,其中,时刻td的到达可以在tcp协议功能模块开始接收应用层数据字段的时刻予以确定,l1最晚可以在td之后确定,sd、s、d1、t1、t2都可以根据tcp/ip协议规定的报文格式、toe的设计参数、当前状态予以确定。

tcp协议功能模块在接收前述长度为l1的应用层数据字段的过程中,将其存储在缓冲存储区中,随同计算其校验和。如果已经确认tcp连接对侧设备用于暂存接收到的应用层数据字段的缓冲区的可用空间的大小(这个值此前已经借助tcp协议规定的信息交换机制得到了)大于toe发送通道本次收到的应用层数据字段的长度(即前述的“确认a”,时间上略晚于td),就可以令以太网协议功能模块启动(命名为“启动a”)包含前述长度为l1的应用层数据字段的以太网帧的发送准备过程-即使这个应用层数据字段尚在向tcp协议功能模块传输的过程中。

自启动a被发出之时起:tcp协议功能模块在接收应用层数据字段、计算校验和的同时及以后,依据tcp报文段格式组装tcp报文段首部,连同从缓冲存储区中读出来的应用层数据字段一起,组成完整的tcp报文段、以n字节流的形式发往ip协议功能模块,其中的tcp报文段校验和所处位置的字段赋以任意值;

ip协议功能模块引用l3的值、依据ip数据报报文格式计算得到ip数据报首部校验和、组装ip数据报首部,连同tcp报文段一起,发往以太网协议功能模块;

以太网协议功能模块按照以太网帧格式组装包含了完整的ip数据报的以太网帧,随同计算其crc校验值,自ts时刻起,以n字节流的形式发往位于链路层输出接口处的专用硬件接口;

由于ts时刻是由前述推导过程获得的,所以,只要涉及的实现过程不出问题,当以太网协议功能模块组装、下传以太网帧的过程进行到tcp报文段校验和所处位置时,就能“恰好”从tcp协议功能模块接收到tcp报文段校验和、将其组装到以太网帧之中,从而确保了不会因为在完成各级协议报文段的组装工作完成之前启动了以太网帧的发送而导致组装、发送过程中出现等待数据、进而导致报文不连续的情况。

本发明不局限于上述实施例所述的具体技术方案,除上述实施例外,本发明还可以有其他实施方式。对于本领域的技术人员来说,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等形成的技术方案,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1