掌桥专利:专业的专利平台
掌桥专利
首页

基于TCP-BPF的动态网络自适应修改方法

文献发布时间:2024-04-18 19:58:53


基于TCP-BPF的动态网络自适应修改方法

技术领域

本发明涉及TCP动态网络修改领域,尤其涉及一种基于TCP-BPF的动态网络自适应修改方法。

背景技术

当客户端与服务端建立TCP连接时,通常情况下与TCP相关的参数大多都是默认的,比如TCP所采用的拥塞控制方案,初始拥塞窗口大小、以及UTO、延迟ACK的大小等,但是在网络环境发生变化时,如网络环境从低带宽高延迟变为高带宽低延迟,或丢包率徒增,网络波动时,对于当前TCP连接的参数,可能就不是最优解了。

其次,有时需要去修改TCP相关参数来适应应用层的需求,如TCP UTO(UserTimeout,用户超时时间),需要根据不同的应用层的场景来设置不同的UTO,而非默认值;再如,在智能手机上运行的app需要针对短数据包优化的重传技术,而数据中心服务器可以则需要另一种拥塞控制方案,即需要实现客户端的定制化。

Linux TCP协议栈现在有一些方式来对TCP连接参数进行修改,如基于通用规则的自适应配置,或通过修改相应文件来调整参数等方式,但这些方式都存在一些问题。

Linux TCP协议栈现在有一些方式来对TCP连接参数进行修改,TCP连接参数在标准情况下通常是根据默认配置进行设置的。TCP协议栈会在建立连接时使用一组默认的参数来初始化连接,并在连接过程中根据一些固定的算法和规则进行调整,但这种方式虽然比较灵活,但缺点也很明显,是基于一些通用的原则和算法,可能不适用于所有的特定情况。在某些特殊应用场景下(如网络情况发生明显波动),可能需要根据特定需求。除此之外,还可以使用配置文件的方式来对参数进行调整。通常可以在/proc/sys/net/ipv4或/proc/sys/net/ipv6目录下找到,并通过修改相应的文件来进行调整,这种方式的弊端是非常不灵活,无法在TCP保持连接的过程中自适应地变化。

发明内容

本发明的目的在于针对现有技术的不足,提供一种基于TCP-BPF的动态网络自适应修改方法。

本发明的目的是通过以下技术方案来实现的:一种基于TCP-BPF的动态网络自适应修改方法,包括以下步骤:

(1)使用eBPF获取TCP协议栈中的关键数据,并基于eBPF的map将关键数据传递到用户态,同时收集应用层的第一信息,将关键数据和第一信息作为衡量指标,以计算出适配当前网络环境的一组最优TCP参数集;其中,所述关键数据包括网络带宽相关数据、网络延迟相关数据、网络稳定性相关数据、丢包率相关数据和延迟ACK相关数据;所述第一信息包括对连接持久性的需求和数据传输模式;所述TCP参数集包括拥塞控制算法、初始拥塞窗口大小、用户超时时间和延迟ACK;

(2)使用TCP-BPF提供的tcp_options_write()方法将所述步骤(1)得到的最优TCP参数集插入到TCP Header中的options字段中,并将更新后的TCP参数集中的TCP参数同步至服务端,以实现TCP参数的传递;

(3)服务端在收到TCP报文时,通过TCP-BPF提供的tcp_parse_options()方法对options字段进行解析,并使用eBPF提供的bpf_setsockops和setsockops辅助函数将接收到的最优TCP参数集应用到服务端的当前TCP连接中。

进一步地,所述拥塞控制算法包括Reno算法、NewReno算法、CUBIC算法、BBR算法和Vegas算法。

进一步地,所述步骤(1)中,使用eBPF获取TCP协议栈中的关键数据,具体包括:

网络带宽相关数据:通过struct tcp_sock中的__u32 snd_cwnd获取拥塞窗口大小;通过struct tcp_sock中的__u32 snd_ssthresh获取慢开始门限;通过struct tcp_sock中的__u32snd_cwnd_cnt获取拥塞窗口大小的增长情况;通过struct tcp_sock中的__u32 snd_cwnd_clamp获取拥塞窗口大小的最大值限制;

网络延迟相关数据:通过struct tcp_sock中的__u32 srtt_us获取往返时间;通过struct sock中的struct rate_sample获取与往返时间和传输速率相关的统计信息;

丢包率相关数据:通过struct tcp_sock中的__u32 retrans_out获取当前重传队列中的数据包数量;

网络稳定性相关数据:通过struct tcp_sock中的__u32 mdev_us获取往返时间的最大偏差;

延迟ACK相关数据:通过struct tcp_sock中的rcv_nxt字段以获取接收端期望的下一个序列号;通过struct tcp_sock中的rcv_wnd字段以获取接收端的TCP窗口规模;通过struct tcp_sock的__u8 delayed_acks获取已经收到但尚未发送延迟ACK的数据包数量;通过struct tcp_sock的unsigned int ack_delay获取ACK的时间;通过struct inet_connection_sock的__u8icsk_ack_pending确定是否有ACK等待发送。

进一步地,所述步骤(1)中,将关键数据和第一信息作为衡量指标,以计算出适配当前网络环境的一组最优TCP参数集,具体包括以下子步骤:

(1.1)根据网络带宽相关数据、网络延迟相关数据、网络稳定性相关数据和丢包率相关数据等关键数据确定适配当前网络环境的拥塞控制算法与初始拥塞窗口大小,并根据拥塞控制算法和当前网络环境动态调整拥塞窗口大小;

(1.2)根据应用程序需求、网络条件和拥塞窗口大小确定适配当前网络环境的用户超时时间;其中所述应用程序需求根据对连接持久性的需求和网络稳定性相关数据确定,所述网络条件根据网络延迟相关数据和丢包率相关数据确定,所述拥塞窗口大小根据拥塞控制算法和对连接持久性的需求确定;

(1.3)根据接收端的TCP窗口规模和应用层的场景确定适配当前网络环境的延迟ACK;其中所述接收端的TCP窗口规模根据延迟ACK相关数据确定,所述应用层的场景包括应用层的数据传输模式和Nagle算法,所述Nagle算法根据数据传输模式确定。

本发明的有益效果为,本发明使用TCP-BPF在客户端和服务端之间动态且无侵入地同步数据;本发明做到了动态自适应地改变TCP连接的参数以适配当前的网络环境;本发明使用eBPF获取TCP协议栈中的相关数据以及根据应用层的相关数据来计算适配当前网络环境的最优TCP参数集;本发明能够在使用eBPF技术灵活通用的基础上,根据TCP客户端不断变化的网络环境动态自适应且无侵入地修改TCP连接的相关策略和参数,通过不断计算和修改参数来选择最适合当前网络环境的拥塞控制算法、拥塞窗口大小以及延迟ACK等算法和参数来维持更高的吞吐量和稳定性,使得TCP连接在变化的网络环境中能维持高性能传输;同时,本发明还可以通过TCP-BPF与TCP options实现客户端与服务端之间无侵入的数据互通,实现客户端的定制化。

附图说明

图1为本发明中发送端(即客户端)的框架图;

图2为本发明中接收端(即服务端)的框架图。

具体实施方式

下面结合附图和具体实施例进一步详细说明,在本发明中参照附图来描述本发明的各方面,附图中示出了许多说明性实施例。本发明的实施例不局限于附图所述。应当理解,本发明通过上面介绍的多种构思和实施例,以及下面详细描述的构思和实施方式中的任意一种来实现,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。

本发明的基于TCP-BPF的动态网络自适应修改方法,通过对TCP连接相关参数进行收集并分析进而实现动态网络自适应的方案研究。TCP-BPF又名sockops,为扩展TCP提供基础支持,TCP-BPF中有多种HOOK,通过丰富的HOOK点来收集和处理与TCP连接相关的数据,可以详尽地了解TCP连接的状态,从而对它进行运行时调整。如图1所示,该方法具体包括以下步骤:

(1)使用eBPF获取TCP协议栈(stack)中的关键数据,并基于eBPF的map将关键数据传递到用户态,同时收集应用层的第一信息,将关键数据和第一信息作为衡量指标,以计算出适配当前网络环境的一组最优TCP参数集。其中,关键数据包括网络带宽相关数据、网络延迟相关数据、网络稳定性相关数据、丢包率相关数据和延迟ACK相关数据等关键数据;第一信息包括对连接持久性的需求和数据传输模式等;TCP参数集包括拥塞控制算法、初始拥塞窗口大小、用户超时时间(UTO)和延迟ACK等参数。

应当理解的是,关键数据是与TCP连接相关的数据,发送端需要不断地获取TCP协议栈的关键数据,与此同时,还需要兼顾应用层的需求信息,即第一信息,对连接持久性的需求等。

本实施例中,使用eBPF获取TCP协议栈中的关键数据,具体包括:

(a1)网络带宽相关数据:通过struct tcp_sock中的__u32 snd_cwnd获取拥塞窗口大小,拥塞窗口大小与网络带宽相关,因为拥塞窗口大小决定了发送端允许同时在传输中的数据量。通过struct tcp_sock中的__u32 snd_ssthresh获取慢开始门限,当拥塞窗口大小超过慢开始门限时,发送端进入拥塞避免阶段,这个值也可以用于推断网络带宽的变化。通过struct tcp_sock中的__u32 snd_cwnd_cnt获取拥塞窗口大小的增长情况。通过struct tcp_sock中的__u32snd_cwnd_clamp获取拥塞窗口大小的最大值限制。

应当理解的是,__u32 snd_cwnd是一种数据类型,该类型的数据即为对应的拥塞窗口大小;同理,__u32 snd_ssthresh类型的数据为对应的慢开始门限,类似地,__u32snd_cwnd_cnt、__u32 snd_cwnd_clamp同样也是数据类型。

(a2)网络延迟相关数据:通过struct tcp_sock中的__u32 srtt_us获取平滑的往返时间(RTT),该值表示发送端估计的往返时间,可以用作网络延时的指标,可以衡量网络延时情况。通过struct sock中的struct rate_sample获取与RTT和传输速率相关的统计信息。

(a3)丢包率相关数据:通过struct tcp_sock中的__u32 retrans_out获取当前重传队列中的数据包数量,该值可以用作丢包率的指标,因为它表示发送端检测到的丢失数据包的数量。

(a4)网络稳定性相关数据:通过struct tcp_sock中的__u32 mdev_us获取平滑的往返时间(RTT)的最大偏差,其单位为微秒,该值表示RTT的波动程度,可以用作网络波动的指标,是一个衡量网络波动情况的参数。

(a5)延迟ACK相关数据:通过struct tcp_sock中的rcv_nxt字段以获取接收端期望的下一个序列号,对rcv_nxt字段的内容进行分析,可以确定接收端发送ACK报文的时间。通过struct tcp_sock中的rcv_wnd字段以获取接收端的TCP窗口规模,对获取到的TCP窗口规模进行分析,可以确定接收端是否允许发送端继续发送数据。通过struct tcp_sock的__u8delayed_acks获取已经收到但尚未发送延迟ACK的数据包数量。通过struct tcp_sock的unsigned int ack_delay获取ACK的时间,当数据包到达时,TCP将等待该ACK的时间的过程中以期望在此期间接收更多数据包,并将它们的ACK一起发送。通过struct inet_connection_sock的__u8 icsk_ack_pending确定是否有ACK等待发送,当该值为非零值时,表示有一个或多个ACK等待发送。

本实施例中,为了使得客户端自适应感知网络环境的变化,需要使用eBPF从TCPstack中动态采集关键数据,同时收集应用层的第一信息,将关键数据和第一信息作为衡量指标,以计算出适配当前网络环境的一组最优TCP参数集,如图1所示,具体包括以下子步骤:

(1.1)根据网络带宽相关数据、网络延迟相关数据、网络稳定性相关数据和丢包率相关数据等关键数据确定适配当前网络环境的拥塞控制算法与初始拥塞窗口大小,并根据拥塞控制算法和当前网络环境动态调整拥塞窗口大小。

拥塞控制算法主要是为了避免网络拥塞,保证数据传输的稳定性和有效性。TCP有多种拥塞控制算法,拥塞控制算法包括Reno算法、NewReno算法、CUBIC算法、BBR算法和Vegas算法,每种拥塞控制算法在不同的网络环境下有不同的优势,具体包括:

Reno算法是拥塞控制算法的一种经典算法,它的快速重传和快速恢复算法能够及时响应网络拥塞,避免过度拥塞,保证了TCP连接的可靠性和稳定性,但是,Reno算法对网络环境的快速变化的响应能力较弱,在高速网络和长链路的环境下可能会导致TCP连接的传输效率较低。因此,Reno算法适用于中低带宽、中低延迟、低丢包率的网络环境,即Reno算法适用于网络带宽为1Mbps-100 Mbps、网络延迟小于等于100ms、丢包率小于等于1%的网络环境。

NewReno算法是Reno算法的改进版本,其适用网络环境与Reno算法相同,NewReno算法在快速恢复算法方面进行了优化,它能更好地适应高速网络和长链路的环境,提高TCP连接的传输效率,以达到更好的传输效率。

CUBIC算法适用于网络带宽大于等于100Mbps、网络延迟大于等于100毫秒的网络环境,在跨洲或跨国数据传输中表现较好,CUBIC算法可以更快地找到网络的最优传输速率,同时避免频繁的拥塞。

BBR算法适用于管理较大的广域网、无线网络和移动网络,另外,由于BBR算法不受丢包率的影响,它在丢包率大于等于1%的的网络环境下也能保持较高的传输速率。

Vegas算法适用于网络带宽小于等于100Mbps的网络环境,适用于VoIP、在线游戏和实时视频会议等场景。

综上所述,可以看出,在不同的网络环境下,对于当前TCP连接,最优的拥塞控制算法是不断变化的。在很多情况下,客户端比服务器更了解其访问网络的性能。因此,根据实时获取到的关键数据确定当前网络环境,再根据当前网络环境确定适配当前网络环境的拥塞控制算法。

需要说明的是,可以为每个拥塞控制算法设置一个标识ID,标识ID与拥塞控制算法映射,当服务端收到拥塞控制算法选项时,BPF程序可以提取标识符并在映射中查找到所请求的拥塞控制算法的名称。

进一步地,初始拥塞窗口(IW)大小相对于拥塞控制算法,能决定性地影响短流的流完成时间,具体的初始拥塞窗口大小可能因Linux内核版本和TCP拥塞控制算法的实现等而有所不同,但是固定的IW大小并不能适应各种网络变化。因此,需要根据拥塞控制算法和当前网络环境动态调整IW大小,在以短连接和小数据传输为主的网络环境中,则应该将IW调大;在丢包率较高的网络环境中,由于较大的IW会导致更多的丢包和重传,因此应调小IW。

(1.2)根据应用程序需求、网络条件和拥塞窗口大小确定适配当前网络环境的用户超时时间(User Timeout,UTO);其中应用程序需求根据对连接持久性的需求和网络稳定性相关数据确定,网络条件根据网络延迟相关数据和丢包率相关数据确定,拥塞窗口大小根据拥塞控制算法和对连接持久性的需求确定。

用户超时时间(User Timeout,UTO)是一种TCP连接选项,它允许应用程序设置一个超时时间,用于检测连接是否已经失效。如果连接在指定的时间内没有收到任何数据,TCP协议栈将会认为连接已经失效,并发送一个RST包终止连接。

UTO主要用于解决TCP连接的无法正常终止问题。在一些情况下,TCP连接会因为网络故障或者其他原因而无法正常终止,导致连接一直处于半关闭状态或者连接不断重传。这些连接会占用系统资源并降低网络性能。使用UTO可以设置一个连接的超时时间,如果在这个时间内连接没有收到任何数据,则可以强制终止连接,避免连接一直占用系统资源。

在Linux的环境下,可以通过setsockopt来对UTO进行设置,UTO带有建议的超时值,但是此选项的使用在三向握手期间不会协商。一旦建立连接,就会被简单地使用。

在客户端,可以通过eBPF使用自定义的选项来实现TCP用户超时选项。当服务器端接收到TCP用户超时时间选项时,同样使用eBPF对选项进行解析,并利用setsockopt辅助函数设置本地套接字UTO。

根据应用程序需求、网络条件和拥塞窗口大小确定适配当前网络环境的用户超时时间。

具体地,用户超时时间的大小与以下三点有关:

(b1)应用程序需求:这是最重要的一点,可以根据对连接持久性的需求和网络稳定性相关数据确定。不同的应用程序对连接持久性的需求不同,有些应用程序需要快速检测连接断开,而另一些应用程序可能需要更长的用户超时时间以应对网络波动,故在确定用户超时时间时也需要依据网络稳定性相关数据。因此,根据应用场景选择合适的UTO值非常重要。但是如果没有eBPF和自定义选项将客户端定制化内容传递至服务端,UTO将使用默认值。

(b2)网络条件:可以根据网络延迟相关数据和丢包率相关数据确定。在具有高延迟或丢包率的网络环境下,较大的UTO值有助于避免过早地终止连接,但是在低延迟、低丢包率的网络中,较小的UTO值有助于更快地检测连接故障。因此,在高延迟或高丢包率的网络环境下,即网络延迟大于等于100ms或丢包率大于等于1%的网络环境中,应适当调大UTO值;在低延迟或低丢包率的网络环境下,即网络延迟小于100ms或丢包率小于1%的网络环境中,应适当调小UTO值。

(b3)拥塞窗口大小:可以根据拥塞控制算法和对连接持久性的需求确定。UTO与拥塞控制算法有关,因为对连接持久性的需求会影响拥塞窗口大小的调整,如果UTO值过大,连接可能在网络拥塞时保持活跃,从而导致更多的丢包和拥塞;相反,较小的UTO值可能有助于快速关闭拥塞连接,减轻网络拥塞,所以,只有保持适当的UTO大小,才能在保证性能的同时,控制网络丢包和拥塞情况。因此,在网络拥塞时,应适当调小UTO;在网络拥塞得以缓解时,应适当调大UTO以保证性能。

综上所述,根据应用程序需求、网络条件和拥塞窗口大小动态调整UTO的大小,获得适配当前网络环境的用户超时时间(UTO)。

(1.3)根据接收端的TCP窗口规模和应用层的场景确定适配当前网络环境的延迟ACK;其中接收端的TCP窗口规模根据延迟ACK相关数据确定,应用层的场景包括应用层的数据传输模式和Nagle算法,Nagle算法根据数据传输模式确定。

TCP的延迟ACK是一种优化技术,用于减少TCP连接中的确认数据包数量和网络带宽占用。通常情况下,TCP接收方会立即发送ACK确认数据包响应接收到的数据包,从而通知发送方数据包已经成功到达。然而,当接收方接收到连续的数据包时,TCP会将ACK数据包缓存一段时间,等待发送方发送更多数据包,从而减少确认数据包的数量和网络带宽的占用。即TCP接收方在接收到数据包后不会立即发送ACK确认数据包,而是等待一段时间,如果在这段时间内没有收到更多的数据包,则发送一个ACK确认数据包;如果接收方在这段时间内收到了更多的数据包,则会将多个ACK合并为一个ACK,从而减少确认数据包的数量和网络带宽的占用。

使用延迟ACK可以显著减少网络带宽的占用和减少网络拥塞的风险,尤其是在高延迟和高带宽的网络环境中。但是,如果数据包到达接收方的时间间隔较长,延迟ACK会导致接收方延迟发送ACK确认数据包,从而增加了发送方的重传等待时间和网络延迟,所以在不同的网络环境下应该使用不同的延迟ACK。

作为一种可靠的协议,TCP关键依赖于ACK数据包来检测丢失和控制数据传输。过于频繁地发送ACK可能会给网络带来过多的开销,但ACK发送太少可能会损害Reno/Cubic等传统拥塞控制的性能。Linux的延迟ACK超时的最小值和最大值被硬编码为40毫秒和200毫秒。然而,这样的固定值不能适应不同的延迟、带宽和损耗特性的连接。它们对于本地连接来说可能太大,但对于洲际连接来说可能太小了。Linux支持的唯一定制是禁用每个路由的延迟ACK机制。但是,发送方无法知道对方使用的确认策略。在低延迟环境中,延迟确认计时器会导致过多的虚假重传超时,从而损害性能。

在Linux v5.15环境下,eBPF可以获取到延迟ACK相关数据,然后根据接收端的TCP窗口规模和,确定适配当前网络环境的的延迟ACK,具体包括:

(c1)接收端的TCP窗口规模:可以根据延迟ACK相关数据确定,接收端的TCP窗口规模:接收端的TCP窗口规模决定了发送端可以发送的未被确认的数据量。延迟ACK的大小会受到接收端的TCP窗口规模的影响,因为接收端需要确保延迟ACK不会阻塞发送端的数据传输。

(c2)应用层的场景:包括应用层的数据传输模式和Nagle算法,Nagle算法可以根据应用程序的数据传输模式确定。延迟ACK的大小取决于应用程序的数据传输模式,如某些应用程序可能会频繁发送小数据包,而有些应用程序可能会发送较大的数据包,所以接收端需要根据应用程序的数据传输模式动态调整延迟ACK,以获取最佳性能;Nagle算法与延迟ACK结合使用时,可以进一步减少ACK报文的数量,但是某些情况下,Nagle算法可能会导致传输延迟增加,因此需要根据应用层的场景进行选择。

综上所述,使用采集到的关键数据如网络带宽相关数据、网络延迟相关数据、网络稳定性相关数据、丢包率相关数据等,以及应用层的第一信息如对连接持久性的需求和数据传输模式等,将上述数据通过计算得出在当前网络环境下的最优TCP参数集,由前文分析可知,可以通过网络波动、带宽、丢包率等指标选择适配当前网络环境的拥塞控制算法;对于IW的选择也应当根据具体情况判断,如果应用以短连接和小数据传输为主,则应增大IW,如果丢包率较高,应该调小IW;对于TCP UTO的选择,则需结合前文分析,根据应用程序需求、网络条件和拥塞窗口大小进行选择;对于延迟ACK和Nagle算法的选择也需要结合前文根据具体网络环境和应用场景进行选择。将计算得到的这样一组最优TCP参数集缓存在本地,等待传输。

(2)使用TCP-BPF提供的tcp_options_write()方法将步骤(1)得到的最优TCP参数集插入到TCP Header中的options字段中,并将更新后的TCP参数集中的TCP参数同步至服务端,以实现TCP参数的传递。

(3)服务端在收到TCP报文时,通过TCP-BPF提供的tcp_parse_options()方法对options字段进行解析,并使用eBPF提供的bpf_setsockops、setsockops等辅助函数将接收到的最优TCP参数集应用到服务端的当前TCP连接中,如图2所示。

示例性地,在Linux机器上搭建本地网络环境,Ubuntu 18,使用mininet,进行可行性验证。最终验证发现可以通过TCP-BPF提供的方法对TCP options中的数据进行写入和解析,可以验证使用eBPF通过TCP options传递信息方案的可行性。

本发明使用TCP-BPF在客户端和服务端之间动态且无侵入地同步数据;本发明做到了动态自适应地改变TCP连接的参数以适配当前的网络环境;本发明使用eBPF获取TCP协议栈中的相关数据以及根据应用层的相关数据来计算适配当前网络环境的最优TCP参数集;本发明能够在使用eBPF技术灵活通用的基础上,根据TCP客户端不断变化的网络环境动态自适应且无侵入地修改TCP连接的相关策略和参数,通过不断计算和修改参数来选择最适合当前网络环境的拥塞控制算法、拥塞窗口大小以及延迟ACK等算法和参数来维持更高的吞吐量和稳定性,使得TCP连接在变化的网络环境中能维持高性能传输;同时,本发明还可以通过TCP-BPF与TCP options实现客户端与服务端之间无侵入的数据互通,实现客户端的定制化。

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 基于特征图响应的通道自适应分段动态网络剪枝方法
  • 基于可靠样本选择和双分支动态网络的多源域自适应方法
技术分类

06120116512129