CN115834730A - 支持优先级乱序的tcp数据包收发方法及系统 - Google Patents
支持优先级乱序的tcp数据包收发方法及系统 Download PDFInfo
- Publication number
- CN115834730A CN115834730A CN202211297057.3A CN202211297057A CN115834730A CN 115834730 A CN115834730 A CN 115834730A CN 202211297057 A CN202211297057 A CN 202211297057A CN 115834730 A CN115834730 A CN 115834730A
- Authority
- CN
- China
- Prior art keywords
- priority
- data
- receiving
- data packet
- tcp
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 72
- 238000012545 processing Methods 0.000 claims abstract description 75
- 239000000872 buffer Substances 0.000 claims abstract description 66
- 230000008569 process Effects 0.000 claims abstract description 40
- 230000005540 biological transmission Effects 0.000 claims abstract description 22
- 230000000903 blocking effect Effects 0.000 claims description 19
- 230000004044 response Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 238000011084 recovery Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 4
- 238000012913 prioritisation Methods 0.000 description 3
- 230000001934 delay Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Abstract
本发明提出一种支持优先级乱序的TCP数据包收发方法,包括:接收到数据包后,将高优先级接收数据包放入第一处理队列,将低优先级接收数据包放入第二处理队列;由TCP协议栈将该高优先级接收数据包放入第一接缓冲区区,通知上层应用立即进行接收处理,并将该低优先级接收数据包低放入第二接收缓冲区,等待该上层应用处理;拟对外发送数据时,将高优先级发送数据包放入第一发送缓冲区,将低优先级发送数据包放入第二发送缓冲区,由TCP协议栈生成该高优先级发送数据包在先、该低优先级发送数据包在后的发送顺序进行数据发送。本发明还提出一种支持优先级乱序的TCP数据包收发系统,以及一种用于实现TCP数据包收发的数据处理装置。
Description
技术领域
本发明涉及互联网技术领域,具体涉及一种TCP协议实现方法和系统。
背景技术
TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP保证传输的完整性,顺序性,可靠性。为了保证TCP传递给上层应用的数据的顺序性和完整性,传输层向上层应用传递数据时采用字节流的方式,保证所有字节的接收顺序与在发送端的发送顺序保持一致。在网络协议栈的实现中,在传输层因为丢包等原因收到乱序数据时,会先将其保存在乱序队列中,直到收到缺失的数据包将乱序数据前缺失的数据补齐,才会将这部分数据整理成顺序的数据流传递给上层应用。
在网络技术与网络应用迅速发展的今天,数据中心中服务器的网络带宽,单位时间内需要处理的请求和发送的响应数量也急剧上升。在数据中心中,服务器每秒可以收到数百万个请求,导致这些请求在协议栈处理阶段及上层应用处理阶段排队等待依次处理,产生排队延迟。
在实际常见的网络应用中,如Memcached、HTTP流水线、微信、物联网服务等,它们在客户端与服务器间保持长连接(Long–lived connection),并在这个长连接中承载多个具有不同类型的请求。在这些请求中有一些是用户希望尽快得到响应的,如购物过程中的下单付款环节;而对于其他一些请求,如访问其他产品的页面,用户对这些请求的响应延迟的敏感性就低一些。因此,在网络服务系统在对用户请求提供服务时,通常存在把用户的请求分为高优先级请求和低优先级请求的需求,希望能够对于高优先级请求开通高优先级通路并优先处理,避免它们和低优先级请求一起排队产生不必要的延迟。
然而,当传输层使用TCP时,如果同一连接内的低优先级请求后跟着高优先级请求,因为TCP对顺序性的保证,协议栈需要按照字节顺序先处理低优先级数据包,并将低优先级请求传递给上层应用处理后才能接收后续的高优先级请求。当同一TCP连接内在发送低优先级数据后有突发需要优先发送的数据时,因为TCP对顺序性的保证,同样需要协议栈将低优先级数据发送完毕之后才能发送后续的高优先级数据。
在大部分标准的TCP协议栈处理中(例如,操作系统内核协议栈等),只能对同一条TCP连接内的数据包按顺序进行接收与发送,无法对不同优先级的请求与响应进行区分服务。
Minion为了避免TCP顺序性保障带来的队头阻塞问题,设计了以消息为单位的TCP乱序传输支持,发送端能够将高优先级消息跳过低优先级消息进行乱序发送,接收端收到乱序提前到达的高优先级消息也能直接提交给上层应用,而无需等待序号更小的低优先级消息。但是Minion只能将数据以收取到的顺序向上层应用进行提交,当发送端先发送低优先级消息、后发送高优先级消息时,接收端的协议栈及上层应用还是只能先处理低优先级消息。此外,Minion需要对发送端和接收端同时进行修改,无法推广到个人用户作为客户端的场景中。LNS在数据包中以标签形式记录优先级,通过网卡识别后在服务端的协议栈处理及上层应用处理过程中使用优先队列对高优先级请求进行优先服务。LNS指出在TCP层需要对高优先级的请求进行乱序处理,但并未给出如何对乱序的TCP数据包进行优先处理支持的具体方案或设计。
发明内容
针对上述问题,本发明提出了一种方法,具体包括:接收到数据包后,将高优先级接收数据包放入第一处理队列,将低优先级接收数据包放入第二处理队列;由TCP协议栈将该高优先级接收数据包放入第一接收缓冲区,通知上层应用立即进行接收处理,并将该低优先级接收数据包低放入第二接收缓冲区,等待该上层应用处理;拟对外发送数据时,将高优先级发送数据包放入第一发送缓冲区,将低优先级发送数据包放入第二发送缓冲区,由TCP协议栈生成该高优先级发送数据包在先、该低优先级发送数据包在后的发送顺序进行数据发送。
本发明所述的TCP数据包收发方法,上层应用处理该高优先级接收数据包时:如该上层应用的程序采用基于事件框架的非阻塞IO编程逻辑,则立即接收该高优先级接收数据包进行处理;如该程序采用阻塞的IO编程逻辑,且当前连接阻塞在高优先级数据接收状态,则立即接收该高优先级接收数据包进行处理,如当前连接阻塞在低优先级数据接收状态,则从阻塞状态返回并进入高优先级数据接收状态;如该程序采用基于select的非阻塞IO编程逻辑,则构建高优先级收包文件描述符集,当有该高优先级接收数据包待接收时,将对应的高优先级收包文件描述符集中的对应描述符置位,通知该上层应用接收该高优先级接收数据包进行处理;如该程序采用基于poll()的非阻塞IO编程逻辑,增加用于返回有高优先级数据待接收的套接字文件描述符的参数fds_pri,以通知该上层应用接收该高优先级接收数据包进行处理。
本发明所述的TCP数据包收发方法,接收该高优先级接收数据包时,如还有未接收的接收序号靠前的低优先级数据片段,则在TCP流信息中记录该数据片段已被高优先级乱序接收,且不向发送端返回该数据片段的确认包。
本发明所述的TCP数据包收发方法,该上层应用调用高优先级乱序接收接口read_pri(int fd,char*buff,int len,int*offset,int*rcvnxt)接收乱序的高优先级接收数据包,其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,offset表示返回该高优先级接收数据包的数据片段在TCP流内的序号,rcvnxt表示于返回当前TCP流按顺序接收的下一个数据片段在TCP流内的序号。
本发明所述的TCP数据包收发方法,该上层应用调用高优先级乱序接收接口read_pri(int fd,char*buff,int len,int*jump_len)接收乱序的高优先级接收数据包,其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,jump_len表示返回在当前TCP流按顺序待接收的下一个数据片段距离该次调用收取到的高优先级乱序数据片段之间跳过的字节部分,该字节部分为未接收的低优先级数据片段和已接收的高优先级数据片段。
本发明所述的TCP数据包收发方法,其中该上层应用调用高优先级乱序发送接口时,在socket接口send()的flags参数中加入高优先级标志位以将拟发送的数据标记为高优先级。
本发明所述的TCP数据包收发方法,其特征在于,对于乱序的高优先级发送数据包,将当前数据片段记录在已发送序号中,并放入乱序高优先级发送队列进行发送;对于接收方返回的已发送序号在前的低优先级发送数据确认包获选择确认包不做快速重传,直到该低优先级发送数据对应的的低优先级数据包被确认后进行释放,或在TCP发生超时后进行重传。
本发明还提出一种支持优先级乱序的TCP数据包收发系统,包括:TCP数据包接收模块,用于接收数据包,并根据该数据包的优先级将数据包分别放入对应优先级的缓冲区;优先级收包通知模块,用于根据该数据包的优先级通知上层应用接收该数据包;上层应用数据收发模块;用于通过支持乱序收发高优先级数据的数据接口对该数据包进行接收与发送;TCP数据包发送模块,用于在发包通路上对上层应用存放到TCP发送缓冲区的数据包进行发送处理。
本发明还提出一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,当该计算机可执行指令被执行时,实现如前所述的支持优先级乱序的TCP数据包收发方法。
本发明还提出一种数据处理装置,包括如前所述的计算机可读存储介质,当该数据处理装置的处理器调取并执行该计算机可读存储介质中的计算机可执行指令时,该数据处理装置作为网络节点执行支持优先级乱序的TCP数据包收发。
附图说明
图1是本发明的支持优先级乱序的TCP数据包收发方法流程图。
图2是本发明的支持优先级乱序的TCP数据包收发系统结构示意图。
图3A是本发明的协议栈收包处理方法流程图。
图3B是本发明的TCP乱序优先级接收实例示意图。
图4A是本发明的协议栈发包处理方法流程图。
图4B是本发明的TCP乱序优先级发送实例示意图。
图5是本发明的数据处理装置示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。应当理解,此处所描述的具体实施方法仅仅用以解释本发明,并不用于限定本发明。
发明人在进行TCP顺序性引起的流内队头阻塞问题时,发现现有技术中该项缺陷是由TCP收发缓冲区中高低优先级数据混合存放,且面向上层应用的socket(套接字)接口不支持乱序收发所导致的。在现有的TCP协议处理中,高低优先级的接收数据及待发送数据都在一个队列或缓冲区中存放,导致协议栈在进行TCP协议处理时无法将高优先级数据进行优先处理,也无法在协议处理过程中将不同优先级的数据进行标记并区分处理。现有协议栈面向上层应用的数据结构统一采用BSD(Berkeley Software Distribution,伯克利软件套件)的socket接口,该接口在数据收发时不考虑数据的优先级,并且只能以字节流的形式对数据进行按序处理,无法优先处理高优先级的数据。
为此,本发明设计了支持优先级乱序收发数据的TCP协议处理实现。在协议栈处理过程中,本发明将协议栈待处理的数据包区分优先级,优先处理高优先级的数据收发,在协议处理过程中支持乱序高优先级数据的收发,并将不同优先级的数据分别存放在不同优先级的TCP缓冲区中以进行区分。在面向上层应用的数据收发接口上,本发明设计了支持乱序对高优先级数据进行收发的类socket接口,使得上层应用能够跳过TCP缓冲区中的低优先级数据,对高优先级数据直接进行收发。
本发明旨在解决同一TCP流内的高优先级数据会被低优先级数据阻塞,在协议栈处理、上层应用收发过程中受到排队阻塞影响,导致客户感受到的响应延迟上升的问题。
首先,本发明的TCP协议栈接收已经进行优先级识别到数据包,并进行支持高优先级乱序的TCP处理,避免高优先级数据包在协议栈处理阶段受到排队延迟影响,将高优先级数据包放入高优先级TCP接收缓冲区并在乱序时记录其序号,接收低优先级数据包时对已接收的乱序高优先级数据进行TCP序号顺序性恢复。
其次,设置了优先级TCP缓冲区,为高优先级TCP数据和低优先级TCP数据分别准备对应优先级的TCP接收缓冲区,以便在上层应用收发及协议栈处理时对数据的优先级进行区分,并在各优先级TCP缓冲区内对各段数据的TCP序号顺序性进行维护。
第三,支持乱序收发高优先级数据的应用接口,使得上层应用可以对高优先级数据直接向网络协议栈进行收取和发送,并跳过TCP收发缓冲区中的低优先级数据,。
第四,协议栈优先发送高优先级数据包,网络协议栈将高优先级TCP发送缓冲区中的数据优先发送,避免在TCP发送缓冲区中有低优先级数据时后发送的高优先级数据因为TCP顺序性保障收到排队阻塞延迟影响,并与使用标准TCP协议栈处理的接收端兼容。
最后,本发明的TCP数据包收发方法支持多优先级扩展,可以将TCP数据的优先级从“高-低”两级扩展到更多级的优先级,并在应用收发及网络协议栈处理过程中按照优先级高低对数据进行优先处理。
本发明的支持优先级乱序的TCP数据包收发方法,当同一条TCP连接内同时有不同优先级的请求及响应时,高优先级的请求及响应能被协议栈与上层应用优先进行收发处理,而无需等待TCP缓冲区中的低优先级数据,避免了高优先级数据收发过程中的排队延迟。
图1是本发明的支持优先级乱序的TCP数据包收发方法流程图。如图1所示,本发明的TCP数据包收发方法包括:
步骤S1,进行优先级乱序的TCP数据包接收;
在数据包接收处理通路上,通过TCP协议栈对高优先级数据包优先进行处理并放入单独的高优先级缓冲区,支持对高优先级数据包的乱序处理并保证整体传输的完整性与正确性;其中:
数据包到达服务器后,在TCP协议栈处理前由网卡或驱动进行简单优先级识别,将高低优先级的数据包放在不同的待处理队列中;
TCP协议栈优先处理高优先级处理队列的数据包,并将高优先级数据包中的请求数据存放到高优先级TCP接收缓冲区中;处理完高优先级数据包后,再处理低优先级处理队列的低优先级数据包,并将低优先级数据包中的请求数据存放到低优先级TCP接收缓冲区中。
步骤S2,生成带有优先级的收包事件通知上层应用;
TCP协议栈收取到高优先级数据后,通过带有优先级的收包事件通知上层应用有高优先级数据待接收,需要立刻进行处理;在上层应用的程序采用不同的IO编程逻辑时:
如果程序采用基于事件框架(例如,epoll或kqueue)的非阻塞IO编程逻辑,则将事件分为不同的优先级,在协议栈收取到高优先级数据后添加高优先级收包事件,上层应用收到收包事件后对对应的TCP连接进行对应优先级的数据包接收;
如果程序采用阻塞的IO编程逻辑,如果当前连接阻塞在接收高优先级数据,则在TCP协议栈收到高优先级数据后立刻将对应高优先级数据返回;如果当前连接阻塞在接收低优先级数据,则在TCP协议栈收到高优先级数据后从阻塞状态返回,并通过返回值通知上层应用有高优先级数据等待接收处理;
如果程序采用基于select的非阻塞IO编程逻辑,可以增加一个高优先级收包文件描述符集,当该套接字有高优先级数据待接收时将高优先级收包文件描述符集中的对应描述符置位,通知上层应用进行高优先级收包操作;
如果程序采用基于poll()的非阻塞IO编程逻辑,可以扩展实现只返回有高优先级数据包需要收取的接口poll_pri(),或是在poll的接口参数中用于返回套接字文件描述符的参数fds以外,额外增加专门用于返回有高优先级数据待接收的套接字文件描述符的参数fds_pri;
此外,对于低优先级数据对应的通知,保持与传统协议栈处理一致。
步骤S3,上层应用调用数据接口进行支持乱序优先级的数据收发;
其中,对数据包进行接收时,上层应用通过调用高优先级乱序接收接口,接收存放在TCP高优先级接收缓冲区的高优先级数据;高优先级乱序接收接口只接收高优先级TCP数据包,支持对TCP流中高优先级数据的乱序接收,并通过向上层应用返回该段乱序数据在流内的偏移、当前TCP流顺序接收序号等变量,或者返回其他可以实现相同目的的变量组合,并支持上层应用对乱序数据进行顺序恢复;
高优先级乱序接收接口的一种实现形式为read_pri(int fd,char*buff,intlen,int*offset,int*rcvnxt)。其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,offset用于返回该段数据在TCP流内的序号,rcvnxt用于返回当前TCP流按顺序接收的下一个字节在流内的序号。根据offset和rcvnxt,上层应用可以在有需要时在应用层对乱序接收的高优先级数据进行乱序恢复;
高优先级乱序接收接口的另一种实现形式为read_pri(int fd,char*buff,intlen,int*jump_len),其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,jump_len表示返回在当前TCP流按顺序待接收的下一个数据片段距离该次调用收取到的高优先级乱序数据片段之间跳过了多少字节,跳过的部分为未接收的低优先级数据片段以及已接收的高优先级数据片段;
高优先级乱序接收接口的实现形式还有其他方式,使用其他功能类似但形式不同的接口实现乱序高优先级接收功能,本发明并不以此为限;
本发明中对标准socket接口的send()函数进行了修改,在flags参数选取一个未启用(闲置)的标记位作为高优先级标志位,上层应用需要乱序发送高优先级数据时,以将待发送数据标记为高优先级数据进行高优先级乱序发送。在send()发送数据过程中根据当前TCP连接以发送总字节数,计算该段数据在TCP流内的序号并写入数据包,然后将数据包放入高优先级接收缓冲区。
当上层应用对低优先级数据进行收发时,仍调用标准的socket接口,例如read()、recv()、write()、send()等;在数据发送接口调用过程中,将数据存放入TCP低优先级发送缓冲区,并在该过程中根据当前TCP流已发送总字节数计算TCP序号,并记录在数据包中;
步骤S4,进行优先级乱序的TCP数据包发送处理;
TCP协议栈优先处理高优先级TCP发送缓冲区的数据包,将其包头部分按照网络协议完成填写后,发送到驱动高优先级发送队列。如果该数据包乱序高优先级数据包,则将该段数据记录在已发送序号中,并放入乱序高优先级已发送队列,对于对方返回的要求发送序号更小低优先级数据的确认包(ACK包)或选择确认包(SACK包)时不做快速重传,直到已被的发送的低优先级数据包被确认后统一进行释放,或在TCP发生超时后进行重传;
TCP协议栈随后处理TCP低优先级发送缓冲区的低优先级待发送数据包,将其包头部分按照网络协议完成填写后,发送到驱动低优先级发送队列,并将该段数据记录在已发送序号中,放入已发送待确认队列。当收到对端发回的确认包(ACK包)后,如果有已发送待确认的紧跟在其后的乱序高优先级数据,则确认包会将这两段数据一起进行确认,将被确认的已发送低优先级数据包与高优先级数据包一起进行释放;
驱动层在对驱动发送队列的数据包进行处理时,优先将高优先级发送队列中的数据包发送到网卡,然后再发送低优先级队列中的数据包,或是采用其它优先队列调度算法。
图2是本发明的支持优先级乱序的TCP数据包收发系统结构示意图。如图2所示,本发明的TCP数据包收发系统包括:
TCP数据包接收模块(100):在数据包接收处理通路上,本发明的TCP协议栈对高优先级数据包优先进行处理并放入单独的高优先级缓冲区,支持对高优先级数据包的乱序处理并保证整体传输的完整性与正确性。
数据包优先级区分模块(101):数据包到达服务器后,在TCP协议栈处理前由网卡或驱动进行简单优先级识别,将高低优先级的数据包放在不同的待处理队列中。
高优先级数据包接收模块(102):TCP协议栈优先处理数据包优先级区分模块101中高优先级处理队列的数据包,并将高优先级数据包中的请求数据存放到高优先级TCP接收缓冲区中。在高优先级TCP接收缓冲区中,数据包按照TCP序号进行排序存放。如果发现高优先级数据包前还有未接收的数据,在TCP流信息中记录该段序号的数据已被高优先级乱序接收,且不返回ACK(Acknowledge character)包避免触发发送端不必要的重传。在一些实施例的传输层数据包接收处理的过程中,同时可以对数据包优先级类型进行识别,如果对数据包重新识别为低优先级,则将其按照低优先级数据包接收模块103进行处理。
低优先级数据包接收模块(103):处理完高优先级数据包后,再处理数据包优先级区分模块101中的低优先级数据包,并将低优先级数据包中的请求数据存放到低优先级TCP接收缓冲区中。在低优先级TCP接收缓冲区中,数据包按照TCP序号进行排序存放。在处理低优先级数据包的过程中,如果发现某段乱序高优先级数据前的低优先级数据已经全部完成接收,则将TCP流信息更新为该段高优先级数据末尾前的所有数据都已经完成正常接收,并且统一返回ACK包,从而完成乱序恢复。在一些实施例的传输层数据包接收处理的过程中,同时可以对数据包优先级类型进行识别,如果对数据包重新识别为高优先级,则将其按照高优先级数据包接收模块102进行处理。
当然,对于数据包请求优先级的划分还可以有其他方式,例如将TCP数据包划分为高优先级数据包、中优先级数据包和低优先级数据包,如此一来,在本发明的其他一些实施例中,TCP数据包收发系统的TCP数据包接收模块,还可以设置中优先级数据包接收模块,或其他优先级数据包接收模块,本发明并不以此为限。
收包通知模块(200):TCP协议栈在高优先级数据包接收模块102收取到高优先级数据后,需要通知上层应用有高优先级数据待接收,需要立刻进行处理。如果程序采用基于事件框架(例如,epoll或kqueue)的非阻塞IO编程逻辑,则将事件分为不同的优先级,在协议栈收取到高优先级数据后添加高优先级收包事件,上层应用收到收包事件后对对应的TCP连接进行对应优先级的数据包接收。如果程序采用阻塞的IO编程逻辑,如果当前连接阻塞在接收高优先级数据,则在TCP协议栈收到高优先级数据后立刻将对应高优先级数据返回;如果当前连接阻塞在接收低优先级数据,则在TCP协议栈收到高优先级数据后从阻塞状态返回,并通过返回值通知上层应用有高优先级数据等待接收处理。如果程序采用基于select的非阻塞IO编程逻辑,可以增加一个高优先级收包文件描述符集,当该套接字有高优先级数据待接收时将高优先级收包文件描述符集中的对应描述符置位,通知上层应用进行高优先级收包操作。如果程序采用基于poll()的非阻塞IO编程逻辑,可以扩展实现只返回有高优先级数据包需要收取的接口poll_pri(),或是在poll的接口参数中用于返回套接字文件描述符的参数fds以外,额外增加专门用于返回有高优先级数据待接收的套接字文件描述符的参数fds_pri。对于低优先级数据对应的通知,则保持与传统协议栈处理一致。
上层应用数据收发接口模块(300):上层应用通过支持乱序收发高优先级数据的数据接口对TCP流数据进行收发。
高优先级应用接收接口模块(301):上层应用通过优先级收包通知模块200的通知,需要接收高优先级数据包接收模块102存放到TCP高优先级接收缓冲区的高优先级数据时,调用高优先级乱序接收接口。高优先级乱序接收接口只接收高优先级TCP数据包,支持对TCP流中高优先级数据的乱序接收,并通过向上层应用返回该段乱序数据在流内的偏移、当前TCP流顺序接收序号等变量,或者返回其他可以实现相同目的的变量组合,并支持上层应用对乱序数据进行顺序恢复。高优先级乱序接收接口的一种实现形式为read_pri(intfd,char*buff,int len,int*offset,int*rcvnxt)。其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,offset用于返回该段数据在TCP流内的序号,rcvnxt用于返回当前TCP流按顺序接收的下一个字节在流内的序号。根据offset和rcvnxt,上层应用可以在有需要时在应用层对乱序接收的高优先级数据进行乱序恢复。高优先级乱序接收接口的另一种实现形式为read_pri(int fd,char*buff,intlen,int*jump_len),其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,jump_len表示返回在当前TCP流按顺序待接收的下一个数据片段距离该次调用收取到的高优先级乱序数据片段之间跳过了多少字节,跳过的部分为未接收的低优先级数据片段以及已接收的高优先级数据片段。高优先级乱序接收接口的实现形式还有其他方式,使用其他功能类似但形式不同的接口实现乱序高优先级接收功能,本发明并不以此为限。
高优先级应用发送接口模块(302):上层应用需要乱序发送高优先级数据时,本发明中对标准socket接口的send()函数进行了修改,在flags参数选取一个未启用(闲置)的标记位作为高优先级标志位,以将待发送数据标记为高优先级数据进行高优先级乱序发送,本发明的实施例中,将该高优先级标志位成为MSG_HIGHPRI标志位。在send()发送数据过程中根据当前TCP连接以发送总字节数,计算该段数据在TCP流内的序号并写入数据包,然后将数据包放入高优先级接收缓冲区。
低优先级应用收发接口模块(303):当上层应用对低优先级数据进行收发时,仍调用标准的socket接口,例如read()、recv()、write()、send()等。在数据发送接口调用过程中,将数据存放入TCP低优先级发送缓冲区,并在该过程中根据当前TCP流已发送总字节数计算TCP序号,并记录在数据包中。
TCP数据包发送模块(400):网络协议栈在发包通路上对高优先级应用发送接口模块302存放到TCP发送缓冲区的数据包进行发送处理。
高优先级数据包发送模块(401):网络协议栈优先处理高优先级应用接收接口模块301放入高优先级TCP发送缓冲区的数据包,将其包头部分按照网络协议完成填写后,发送到驱动高优先级发送队列。如果该数据包乱序高优先级数据包,则将该段数据记录在已发送序号中,并放入乱序高优先级已发送队列,对于对方返回的要求发送序号更小低优先级数据的确认包(ACK包)或选择确认包(SACK包)时不做快速重传,直到低优先级数据包发送模块402发送的低优先级数据包被确认后统一进行释放,或在TCP发生超时后进行重传。
低优先级数据包发送模块(402):网络协议栈随后处理低优先级应用收发接口模块303放入TCP低优先级发送缓冲区的低优先级待发送数据包,将其包头部分按照网络协议完成填写后,发送到驱动低优先级发送队列,并将该段数据记录在已发送序号中,放入已发送待确认队列。当收到对端发回的确认包(ACK包)后,如果有TCP数据包发送模块401已发送待确认的紧跟在其后的乱序高优先级数据,则确认包会将这两段数据一起进行确认,将被确认的已发送低优先级数据包与高优先级数据包一起进行释放。
驱动层数据包优先级发送模块(403):驱动层在将TCP数据包发送模块401、低优先级数据包发送模块402放入驱动发送队列的数据包进行处理时,优先将高优先级发送队列中的数据包发送到网卡,然后再发送低优先级队列中的数据包,或是采用其它优先队列调度算法。
下面是本发明实施样例
图3A是本发明的协议栈收包处理方法流程图。图3B是本发明的TCP乱序优先级接收实例示意图。如图3A、3B所示:
客户端需要发送一个长度为100的高优先级请求,上层应用把数据传给协议栈,协议栈将其封装在一个序号为3001的数据包A中,且标记其为高优先级数据包,并发送给服务器。本专利在服务端对该这些请求进行处理并返回响应。
服务器接收到数据包A后网卡解析协议头发现为高优先级数据,将其放到高优先级队列。协议栈检查高优先级接收队列,发现有高优先级数据包A,将其进行处理。数据包A对应的TCP连接目前待接收字节序号为2000,序号2001-3000的低优先级数据包还在低优先级接收队列中。协议栈在TCP连接中记录数据3001-3100已被乱序接收的高优先级数据,将该数据包存放到高优先级接收缓冲区中,并生成高优先级epoll收包事件;随后,协议栈接收低优先级数据包,收到该条流内序号为2001,数据长度为1000的数据包,将待接收字节序号更新为3001,检查TCP内高优先级数据处理信息,发现3001-3100已被乱序接收,则将该TCP连接的待接收字节序号更新为3101,向客户端返回ACK确认数据包,确认序号为3101,并生成低优先级epoll数据到达事件。上层应用收到高优先级收包事件后,调用read_pri()接口乱序接收高优先级请求数据,收到100字节的高优先级数据后对请求进行应用逻辑处理,然后再调用标准socket接口read()对低优先级请求进行接收。
图4A是本发明的协议栈发包处理方法流程图。图4B是本发明的TCP乱序优先级发送实例示意图。如图4A、4B所示:
上层应用处理完请求后开发发送响应。当前应用需要发送一段长度为100字节的高优先级响应数据,通过send(fd,buf,len,MSG_HIGHPRI),将其序号标记为6001-6100,并存放到TCP高优先级发送缓冲区。当TCP协议栈进行发包时,连接的低优先级缓冲区中还有序号为4000-6000的低优先级数据未发送,优先发送TCP序号为6001-6100的高优先级数据包到网卡驱动高优先级发送队列,将其序号记录在已发送数据内,并存放到乱序高优先级已发送队列,再发送序号为4000-6000的低优先级数据到网卡驱动低优先级发送队列,将其序号记录在已发送数据内,并存放到已发送队列。网卡驱动优先将高优先级发送队列中的高优先级数据包通过网卡发送到网络,再将低优先级发送队列中的低优先级数据包通过网卡发送到网络。
对方客户端通过网络收到服务端返回的响应后,如果支持乱序优先级TCP,则将序号6001-6100的高优先级数据直接处理后提交给上层应用;如果客户端是标准TCP协议栈,则在收取序号6001-6100的数据包后将其放入乱序队列,并在收取序号4000-6000的数据包后将序号4000-6100的数据一起提交给上层应用。客户端收取完所有数据后,返回确认包(ACK包),确认该TCP流内字节序号4000-6100的数据均以接收,接收端在收到确认包后将已发送队列中的低优先级数据包和高优先级数据包一起进行释放。
图5是本发明的数据处理装置示意图。如图5所示,本发明实施例还提供一种计算机可读存储介质,以及一种数据处理装置。本发明的计算机可读存储介质存储有计算机可执行指令,计算机可执行指令被数据处理装置的处理器执行时,作为网络节点实现上述支持优先级乱序的TCP数据包收发方法。本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件(例如处理器、FPGA、ASIC等)完成,所述程序可以存储于可读存储介质中,如只读存储器、磁盘或光盘等。上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块可以采用硬件的形式实现,例如通过集成电路来实现其相应功能,也可以采用软件功能模块的形式实现,例如通过处理器执行存储于存储器中的程序/指令来实现其相应功能。本发明实施例不限制于任何特定形式的硬件和软件的结合。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变形,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (10)
1.一种支持优先级乱序的TCP数据包收发方法,其特征在于,包括:
接收到数据包后,将高优先级接收数据包放入第一处理队列,将低优先级接收数据包放入第二处理队列;由TCP协议栈将该高优先级接收数据包放入第一接收缓冲区,通知上层应用立即进行接收处理,并将该低优先级接收数据包低放入第二接收缓冲区,等待该上层应用处理;
拟对外发送数据时,将高优先级发送数据包放入第一发送缓冲区,将低优先级发送数据包放入第二发送缓冲区,由TCP协议栈生成该高优先级发送数据包在先、该低优先级发送数据包在后的发送顺序进行数据发送。
2.如权利要求1所述的TCP数据包收发方法,其特征在于,上层应用处理该高优先级接收数据包时:
如该上层应用的程序采用基于事件框架的非阻塞IO编程逻辑,则立即接收该高优先级接收数据包进行处理;
如该程序采用阻塞的IO编程逻辑,且当前连接阻塞在高优先级数据接收状态,则立即接收该高优先级接收数据包进行处理,如当前连接阻塞在低优先级数据接收状态,则从阻塞状态返回并进入高优先级数据接收状态;
如该程序采用基于select的非阻塞IO编程逻辑,则构建高优先级收包文件描述符集,当有该高优先级接收数据包待接收时,将对应的高优先级收包文件描述符集中的对应描述符置位,通知该上层应用接收该高优先级接收数据包进行处理;
如该程序采用基于poll()的非阻塞IO编程逻辑,增加用于返回有高优先级数据待接收的套接字文件描述符的参数fds_pri,以通知该上层应用接收该高优先级接收数据包进行处理。
3.如权利要求1所述的TCP数据包收发方法,其特征在于,接收该高优先级接收数据包时,如还有未接收的接收序号靠前的低优先级数据片段,则在TCP流信息中记录该数据片段已被高优先级乱序接收,且不向发送端返回该数据片段的确认包。
4.如权利要求1所述的TCP数据包收发方法,其特征在于,该上层应用调用高优先级乱序接收接口read_pri(int fd,char*buff,int len,int*offset,int*rcvnxt)接收乱序的高优先级接收数据包,其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,offset表示返回该高优先级接收数据包的数据片段在TCP流内的序号,rcvnxt表示于返回当前TCP流按顺序接收的下一个数据片段在TCP流内的序号。
5.如权利要求1所述的TCP数据包收发方法,其特征在于,该上层应用调用高优先级乱序接收接口read_pri(int fd,char*buff,int len,int*jump_len)接收乱序的高优先级接收数据包,其中,fd表示需要收取数据的socket,buff表示用于接收数据的缓冲区,len表示接收缓冲区buff的长度,jump_len表示返回在当前TCP流按顺序待接收的下一个数据片段距离该次调用收取到的高优先级乱序数据片段之间跳过的字节部分,该字节部分为未接收的低优先级数据片段和已接收的高优先级数据片段。
6.如权利要求1所述的TCP数据包收发方法,其特征在于,该上层应用调用高优先级乱序发送接口时,在socket接口send()的flags参数中启用闲置标记位作为高优先级标志位,以将拟发送的数据标记为高优先级。
7.如权利要求6所述的TCP数据包收发方法,其特征在于,对于乱序的高优先级发送数据包,将当前数据片段记录在已发送序号中,并放入乱序高优先级发送队列进行发送;对于接收方返回的已发送序号在前的低优先级发送数据确认包或选择确认包不做快速重传,直到该低优先级发送数据对应的的低优先级数据包被确认后进行释放,或在TCP发生超时后进行重传。
8.一种支持优先级乱序的TCP数据包收发系统,其特征在于,包括:
TCP数据包接收模块,用于接收数据包,并根据该数据包的优先级将数据包分别放入对应优先级的缓冲区;
收包通知模块,用于根据该数据包的优先级通知上层应用接收该数据包;
上层应用数据收发模块;用于通过支持乱序收发高优先级数据的数据接口对该数据包进行接收与发送;
TCP数据包发送模块,用于在发包通路上对上层应用存放到TCP发送缓冲区的数据包进行发送处理。
9.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,当该计算机可执行指令被执行时,实现如权利要求1~7任一项所述的支持优先级乱序的TCP数据包收发方法。
10.一种数据处理装置,包括如权利要求9所述的计算机可读存储介质,当该数据处理装置的处理器调取并执行该计算机可读存储介质中的计算机可执行指令时,该数据处理装置作为网络节点执行支持优先级乱序的TCP数据包收发。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211297057.3A CN115834730A (zh) | 2022-10-21 | 2022-10-21 | 支持优先级乱序的tcp数据包收发方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211297057.3A CN115834730A (zh) | 2022-10-21 | 2022-10-21 | 支持优先级乱序的tcp数据包收发方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115834730A true CN115834730A (zh) | 2023-03-21 |
Family
ID=85525249
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211297057.3A Pending CN115834730A (zh) | 2022-10-21 | 2022-10-21 | 支持优先级乱序的tcp数据包收发方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115834730A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1511273A1 (en) * | 2003-08-30 | 2005-03-02 | LG Electronics Inc. | Packet receiving method for use in a mobile terminal |
CN109768939A (zh) * | 2018-11-27 | 2019-05-17 | 中国科学院计算技术研究所 | 一种支持优先级的标签化网络栈方法和系统 |
CN114363260A (zh) * | 2021-11-09 | 2022-04-15 | 天津大学 | 一种针对数据中心网络的数据流调度方法 |
-
2022
- 2022-10-21 CN CN202211297057.3A patent/CN115834730A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1511273A1 (en) * | 2003-08-30 | 2005-03-02 | LG Electronics Inc. | Packet receiving method for use in a mobile terminal |
CN109768939A (zh) * | 2018-11-27 | 2019-05-17 | 中国科学院计算技术研究所 | 一种支持优先级的标签化网络栈方法和系统 |
CN114363260A (zh) * | 2021-11-09 | 2022-04-15 | 天津大学 | 一种针对数据中心网络的数据流调度方法 |
Non-Patent Citations (2)
Title |
---|
MAHDI RAHIMI; VAHAB POURNAGHSHBAND: "An improvement mechanism for low priority traffic TCP performance in Strict Priority Queueing", 2016 INTERNATIONAL CONFERENCE ON COMPUTER COMMUNICATION AND INFORMATICS (ICCCI), 30 May 2016 (2016-05-30) * |
沈逸凡,张文力,刘珂,陈明宇: "面向应用定义优先级调度的用户态协议栈研究", 高技术通讯, 25 August 2023 (2023-08-25) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220311544A1 (en) | System and method for facilitating efficient packet forwarding in a network interface controller (nic) | |
US9622257B2 (en) | Prioritization of retransmission of protocol data units to assist radio link control retransmission | |
US7876677B2 (en) | Transmission control protocol queue sorting | |
CN111512603A (zh) | 一种数据传输方法及第一设备 | |
US7421501B2 (en) | Queued sessions for communicating correlated messages over a network | |
US8131881B2 (en) | Completion coalescing by TCP receiver | |
CN115941616A (zh) | 多路径rdma传输 | |
EP2661029B1 (en) | Avoiding Delayed Data | |
JP2002016637A (ja) | パケットスケジューリング装置 | |
US20100217889A1 (en) | Accelerated block option for trivial file transfer protocol (tftp) | |
US20040174877A1 (en) | Load-balancing utilizing one or more threads of execution for implementing a protocol stack | |
JP2003258932A (ja) | 相互に通信する電子装置間の順序化され、パイプライン化されたトランザクションのフローを制御するための方法およびシステム | |
US8054847B2 (en) | Buffer management in a network device | |
US8769137B2 (en) | Systems and methods for negotiated accelerated block option for trivial file transfer protocol (TFTP) | |
CN115834730A (zh) | 支持优先级乱序的tcp数据包收发方法及系统 | |
CN113973091A (zh) | 一种报文处理方法、网络设备以及相关设备 | |
JPH10229429A (ja) | 通信ネットワークシステム | |
US20060221827A1 (en) | Tcp implementation with message-count interface | |
CN115344405A (zh) | 一种数据处理方法、网络接口卡、电子设备及存储介质 | |
CN111447046B (zh) | 业务数据传输方法、装置、设备和存储介质 | |
CN117176809B (zh) | 一种数据交互方法及系统 | |
CN118214621A (zh) | 一种can通信传输方法及传输装置 | |
CN117560115A (zh) | 数据传输方法、装置、系统、电子设备及存储介质 | |
CN118555249A (zh) | 基于dpu网卡的报文传输方法、dpu网卡、网络设备以及计算机存储介质 | |
EP1233581A2 (en) | Packet transmitter and method |
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 |