一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种高效的负载均衡设备TCP重传实现方法与流程

2021-12-15 03:07:00 来源:中国专利 TAG:

一种高效的负载均衡设备tcp重传实现方法
技术领域
1.本发明涉及通信技术领域,具体是指一种高效的负载均衡设备tcp重传实现方法。


背景技术:

2.tcp(transmission control protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由ietf的rfc 793定义。在简化的计算机网络osi模型中,它完成第四层传输层所指定的功能。
3.通常在每个tcp报文段中都有一对序号和确认号。tcp报文发送者称自己的字节流的编号为序号,称接收到对方的字节流编号为确认号。tcp报文的接收者为了确保可靠性,在接收到一定数量的连续字节流后才发送确认。这是对tcp的一种扩展,称为选择确认。选择确认使得tcp接收者可以对乱序到达的数据块进行确认。每一个字节传输过后,序号都会递增1。
4.通过使用序号和确认号,tcp层可以把收到的报文段中的字节按正确的顺序交付给应用层。序号是32位的无符号数,在它增大到4294967295时,便会回绕到0。对于初始化序列号(isn)的选择是tcp中关键的一个操作,它可以确保强壮性和安全性。
5.tcp协议使用序号标识每端发出的字节的顺序,从而另一端接收数据时可以重建顺序,无惧传输时的包的乱序交付或丢包。在发送第一个包时(syn包),选择一个随机数作为序号的初值,以克制tcp序号预测攻击。
6.发送确认包(ack),携带了接收到的对方发来的字节流的编号,称为确认号,以告诉对方已经成功接收的数据流的字节位置。ack并不意味着数据已经交付了上层应用程序。
7.可靠性通过发送方检测到丢失的传输数据并重传这些数据。包括超时重传与重复累计确认。
8.超时重传时,发送方使用一个保守估计的时间作为收到数据包的确认的超时上限。如果超过这个上限仍未收到确认包,发送方将重传这个数据包。每当发送方收到确认包后,会重置这个重传定时器。进一步,如果重传定时器被触发,仍然没有收到确认包,定时器的值将被设为前次值的二倍(直到特定阈值)。
9.结合图1,对于基于重复累计确认的重传,如果一个包(不妨设它的序号是100,即该包始于第100字节)丢失,接收方就不能确认这个包及其以后的包,因为采用了累计ack。接收方在收到序号为100以后的包时,发出对包含第99字节的包的确认。这种重复确认是包丢失的信号。发送方如果收到3次对同一个包的确认,就重传最后一个未被确认的包。阈值设为3被证实可以减少乱序包导致的无作用的重传现象。
10.在linux操作系统中,现有的tcp重传有两种方法:
11.(1)在tcp协议的报文传输中,首先从系统中申请一个新的报文缓冲区(skb),在其中填写报文的相关内容,调用相应的发送函数,最终由网卡驱动程序进行发送,发送后由驱动程序释放该报文缓冲区;如果需要重传时,则重复以上全过程。
12.(2)在tcp协议的报文传输中,首先从系统中申请一个新的报文缓冲区(skb),在其
中填写报文的相关内容,并在同时复制出一个相同的报文,即克隆报文,将该克隆报文放入重传等待队列,再调用相应的发送函数发送原报文,最终由网卡驱动程序进行发送,发送后由驱动程序释放原报文缓冲区;如果需要重传时,从重传等待队列取出克隆报文,重复发送过程;如果不再需要重传,则释放掉这个克隆报文。
13.以上两种方法具有以下缺点:
14.(1)对于全流程重传方案,每次重传都要重新申请报文缓存,并完成整个报文发送流程,执行效率较低,当遇到大量tcp重传时,消耗大量cpu运算力。
15.(2)对于使用克隆报文和重传队列的方案,每个可能出现重传的报文都需要同时复制出一个克隆报文作为重传时的备份,这样就导致占用更多的报文缓存,消耗内存较多,当遇到大量tcp重传时,会导致大量内存占用。
16.所以,一种高效的负载均衡设备tcp重传实现方法成为人们亟待解决的问题。


技术实现要素:

17.本发明要实现的目的是提高tcp重传的执行效率,节省负载均衡设备的cpu和内存等关键资源。
18.为实现上述目的,本发明提供的技术方案为:一种高效的负载均衡设备tcp重传实现方法,包括以下步骤:
19.步骤1、预置条件
20.负载均衡系统中的每一个报文都有相应的报文描述符;
21.步骤2、在tcp协议的报文传输中,首先从系统中申请一个新的报文缓冲区,在其中填写报文的相关内容形成待发送报文a;
22.步骤3、如果待发送报文a属于tcp协议中可能会出现重传情况的报文,则设置报文a的描述符上的重传标志位,并将指向报文a的指针加入待重传队列,然后调用网卡驱动的报文发送接口来发送报文a;
23.步骤4、在网卡驱动的发送处理中,发送了报文a之后,在报文释放函数中对报文a描述符上的重传标志位进行判断,如果发现报文a重传标志置位,则不释放报文a;
24.步骤5、当出现重传情况时,tcp协议栈可以直接从待重传队列中取出之前加入的指向报文a的指针,并再次调用网卡驱动的报文发送接口来发送报文a,无需申请新报文缓存或复制报文处理;
25.步骤6、当tcp协议栈收到报文a的描述符回复报文b时,则可在待重传队列中删除并直接释放报文a,而不再进行重新发送。
26.作为改进,所述步骤1中的描述符在linux系统中为skb结构。
27.作为改进,所述步骤3中若待发送报文a不属于tcp协议中可能会出现重传情况的报文,则直接调用网卡驱动的报文发送接口来发送报文a。
28.作为改进,所述步骤4中在报文释放函数中对报文a描述符上的重传标志位进行判断,如果没有发现报文a重传标志置位,则释放报文a。
29.本发明与现有技术相比的优点在于:本发明提高了tcp重传的执行效率,节省负载均衡设备的cpu和内存等关键资源。经对比测试,负载均衡设备的tcp流量转发性能平均提高了30%。
附图说明
30.图1是重复累计确认重传的流程图。
31.图2是本发明一种高效的负载均衡设备tcp重传实现方法的流程图。
具体实施方式
32.下面结合附图对本发明一种高效的负载均衡设备tcp重传实现方法做进一步的详细说明。
33.结合附图1

2,本发明一种高效的负载均衡设备tcp重传实现方法的具体实施过程如下:
34.一种高效的负载均衡设备tcp重传实现方法,包括以下步骤:
35.步骤1、预置条件
36.负载均衡系统中的每一个报文都有相应的报文描述符,描述符在linux系统中为skb结构;
37.步骤2、在tcp协议的报文传输中,首先从系统中申请一个新的报文缓冲区,在其中填写报文的相关内容形成待发送报文a;
38.步骤3、如果待发送报文a属于tcp协议中可能会出现重传情况的报文,则设置报文a的描述符上的重传标志位,并将指向报文a的指针加入待重传队列,然后调用网卡驱动的报文发送接口来发送报文a;若待发送报文a不属于tcp协议中可能会出现重传情况的报文,则直接调用网卡驱动的报文发送接口来发送报文a;
39.步骤4、在网卡驱动的发送处理中,发送了报文a之后,在报文释放函数中对报文a描述符上的重传标志位进行判断,如果发现报文a重传标志置位,则不释放报文a;如果没有发现报文a重传标志置位,则直接释放报文a;
40.步骤5、当出现重传情况时,tcp协议栈可以直接从待重传队列中取出之前加入的指向报文a的指针,并再次调用网卡驱动的报文发送接口来发送报文a,无需申请新报文缓存或复制报文处理;
41.步骤6、当tcp协议栈收到报文a的描述符回复报文b时,则可在待重传队列中删除并直接释放报文a,而不再进行重新发送。
42.以上对本发明及其实施方式进行了描述,这种描述没有限制性,附图中所示的也只是本发明的实施方式之一,实际的结构并不局限于此。总而言之如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献