TCP-BPF :通过BPF定制TCP行为

2024-09-06 08:38
文章标签 定制 行为 tcp bpf

本文主要是介绍TCP-BPF :通过BPF定制TCP行为,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TCP-BPF :通过BPF定制TCP行为

作者介绍
jianmingfan@126.com 如何以通俗的方式讲解技术
前腾讯云专家工程师,长期专注于操作系统,网络,BPF技术发展。

TCP-BPF又名sockops,由facebook工程师开发。它的缘起是工程师考虑如何针对数据中心内部的网络特征,定制TCP参数,优化TCP的表现。例如可以灵活的修改TCP 缓冲区大小,SYN RTO, SYN-ACK RTO, 初始拥塞窗口等参数。插上BPF的翅膀,TCP-BPF表现出了其超能力。例如可编程,易部署升级,调优能力强等。这些都是传统的调优方法所不能及的。那么TCP-BPF 都能干些什么事情呢?其能力的边界在哪里呢?如何降低其学习门槛呢?从这些问题出发,本文介绍了TCP-BPF背后的设计思路和源码实现,同时也给出了案例分析。遇到部分TCP参数,也给出了一些解释。希望此文能帮助开发者理解TCP-BPF的潜能,并有助于迅速上手。

介绍

Linux 本身提供了一些机制可以修改TCP的一些参数。

  1. setsockopt
    我们知道当我们建立了socket 之后,可以通过setsockopt 修改一些TCP的参数,例如SO_RCVBUF可以设置接受缓冲区大小。这种机制需要修改应用层代码。
  2. ip-route
    通过ip route可以基于route信息调整一些tcp参数。例如initcwnd 参数可以设置某一条路由上的tcp 连接的初始拥塞窗口大小。
  3. sysctl
    通过sysctl 可以修改一些TCP参数,但是它以网络命名空间为粒度,使用起来也有诸多不便之处。

读者可能还能举出其他的定制方法,例如在内核中增加新的TCP option,用户态协议栈等。前者部署周期漫长,后者还存在诸多的问题,应用范围受限。

针对以上方法的局限性,facebook 工程师基于BPF技术实现了一套TCP-BPF框架,并把这些框架提交到了内核主干了。这个方法一开始只是针对数据中心的场景,修改了SYN,SYN-ACT RTO, 初始拥塞窗口等参数。后来随着钩子越来越丰富,其使用场景就远远超过了这些参数了。

设计概论

相对于其他类型的BPF程序,TCP-BPF可以说是有其自身的一些特点。

cgroupv2

TCP-BPF 是一种新的BPF 程序的类型,它和cgroupv2紧密绑定的。用户首先要创建一个cgroupv2的组,将BPF程序挂载到该组。为什么要这么做呢?其设计的初衷是属于不同组的应用程序可以挂载不同的BPF 程序。这样就可以为不同组的应用设计不同的策略和BPF程序呢。

一个BPF 程序,多个调用点

读者知道,目前的BPF程序的使用模式一般都是一种程序类型对应一个内核中的调用点,例如XDP,TC ,其对应的调用点都是唯一的。但是TCP-BPF这种程序类型是一个例外。一段TCP-BPF程序可以从TCP执行过程中的多个调用点进入。那么在BPF程序中如何区分不同的调用点呢?答案是不同的调用点会传入不同的ops 值到BPF程序中。

那么这么复杂的设计初衷是什么呢?为了完成一件事情,往往需要一段BPF程序,在不同的调用点紧密合作。比方说,为了优化数据中心内部的TCP连接,需要同时将SYN RTO, SYN-ACK RTO,socket 缓冲区设置成小值,而这几个操作就需要从不同的调用点进入。假如不同的调用点对应不同的BPF程序,那么上述的协作就非常困难。

遍布TCP协议栈的钩子

在最新的5.15的Linux内核代码中,已经有15个TCP-BPF的钩子了,而且还在持续增加。透过这些钩子可以一窥其能力。通过这些钩子可以充分的了解TCP连接的状态,从而对它进行运行时调整。例如可以通过BPF实现自定义的TCP option;覆盖TCP默认的参数,例如SYN RTO (SYN 超时重传的时间),还可以和sockhash 配合,为主机内进程网络通信提供捷径。

helper 函数

读者朋友也许会说以上介绍的钩子很强大,可是还有很多参数不能修改啊,例

这篇关于TCP-BPF :通过BPF定制TCP行为的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141536

相关文章

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了个性化生成的效率和效果。 UniPortrait以统一的方式定制单 ID 和多 ID 图像,提供高保真身份保存、广泛的面部可编辑性、自由格式的文本描述,并且无需预先确定的布局。

JAVAEE初阶第七节(中)——物理原理与TCP_IP

系列文章目录 JAVAEE初阶第七节(中)——物理原理与TCP_IP 文章目录 系列文章目录JAVAEE初阶第七节(中)——物理原理与TCP_IP 一.应用层重点协议)1. DNS2 .NAT3. NAT IP转换过程 4 .NAPT5. NAT技术的缺陷6. HTTP/HTTPS7. 自定义协议 二. 传输层重点协议 1 .UDP协议 2.1.1 UDP协议端格式 2.1.2 UD

深入理解TCP通信

这大概是自己博客上面第三次写TCP通信demo了,总是写同样的内容也不太好啊,不过每一次都比前一次进步一点。这次主要使用了VIM编辑工具、gdb调试、wireshirk、netstat查看网络状态。 参考《C++服务器视频教程》、《Unix网络编程》 一、VIM常用命令 vim server.cpp #打开一个文件:w 写入文件:wq 保存并退出:q! 不保存退出显示行号

行为智能识别摄像机

行为智能识别摄像机 是一种结合了人工智能技术和监控摄像技术的先进设备,它能够通过深度学习算法对监控画面进行实时分析,自动识别和分析监控画面中的各种行为动作。这种摄像机在安防领域有着广泛的应用,可以帮助监控人员及时发现异常行为,并采取相应的措施。 行为智能识别摄像机可以有效预防盗窃事件。在商场、超市等公共场所安装这种摄像机,可以通过识别异常行为等情况,及时报警并阻止不安全行为的发生