自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 “linux性能”工具集助力分析优化Linux

序这段时间的工作全都扔在了Linux分析优化上。认识到,没有一件事是容易的。但还是很庆幸,brendangregg为Linux做了那么多,使得对于整体分析优化Linux有了那么多称手的“兵器”,再次感谢brendangregg和torvalds。https://www.brendangregg.com/linuxperf.htmlbredangregg是Linux系统性能优化的行家,你可以通过他的主页更快的上手Linux、eBPF等等新知识。每张工具集图谱都有适应的场景,性能监控工具帮助实时测量

2022-03-07 20:36:25 1178 2

原创 RTT 发散思维写点随笔录

从网络里RTT这个词发散的想一些网络方面的知识,更加全面的看看RTT是什么和为什么要用RTT

2022-09-11 13:03:29 320 1

原创 XDP eBPF怎么利用操作系统玩转快速数据包处理

eBPF是一种注入式技术,让研究内核的工程师们在应用层上展现自己的奇思妙想,这种能力确实让人趋之若鹜。近些年来,内核的网络协议栈总被人诟病,人们对网络的依赖感越强,这种声浪也就越明显。暴露出问题很好,因为会涌现很多好玩的东西。内核被人diss的本质原因就是用户态和内核态大量的上下文切换!应付的任务越多,切换的越频繁,开销也就越大,速度也自然快不起来。网络任务因需求量自然居高不下,现在谁也不能断别人的网,网意味着生活技能!...

2022-08-12 23:34:16 916

原创 互联网对内核模块的加载之道

一则杂谈而已

2022-07-10 17:58:42 248

原创 DPDK(DATA PLANE DEVELOPMENT KIT)专业处理数据包的SDK

认识DPDK-数据面开发工具集DPDK是用户态的第三方库,主要的能力就是在大规模的CPU架构上加速数据包的处理流程。DPDK的名字很明显的反映出它的作用,数据平面上的开发工具集,表明DPDK只是一个专门用于处理数据包收发的工作库,这意味着它不能控制数据包的行为。想到了农夫山泉的一句广告,我们不生产水,只是大自然的“搬运工”。这个“新生”搬运工替代了内核网络协议栈这个“老员工”,所以说,使用DPDK的都绕开了内核网络协议栈。DPDK库的三种能力:貌似,DPDK用了一种不同于内核网络协议栈处理的方式,实现着加

2022-07-02 16:33:38 443

原创 私有协议的解密游戏:从秘文到明文

现在的互联网,谁不想造一个像Ether、IP、TCP这种网络领域鹤立鸡群的通信协议。就连很火的QUIC,也是伴随着RFC落地,才正式被人认可是公共的HTTP协议。所以,大多数人都还是在创造协议时,给自己贴上个“私有协议”的标签。这很常规,并不俗套。甚至teamviewer这类的商业软件就把自家的teamview协议叫做私有协议。一个私有协议完成自己的工作,是自己基本的能力。但如果想让它被真正的“用起来”,最起码还需要做这样一份工作,私有协议的解密游戏。为什么这么说呢?因为,一个私有协议在网络中跟着数据包一

2022-06-11 16:02:15 1247

原创 systemd Linux管理服务集大成者

systemd init系统 Linux管理服务的能力

2022-05-27 20:19:54 745

原创 eBPF Kprobe,有些事做不到

记录一段失败的可行性验证方案,历时两天多,探索出eBPF kprobe技术的边界。要谈eBPF kprobe,那就得从Kprobes聊起。KprobesKprobes内核调试技术,是Linux提供的一种能力。能在内核指令执行过程中动态断点,在不影响内核态指令正常运行的过程中,收集系统的性能数据。Kprobes 内核调试技术原理简单!内核函数方便利用指令向用户态暴露自己的内存地址。(所有暴露的内核函数地址都在虚拟文件/proc/kallsyms上可找到!这是Kprobes利用的前提条件!)Kpr

2022-05-08 14:28:29 1166 2

翻译 [译]Cilium:BPF和XDP参考指南,一同认识eBPF【概念篇】

当你真正认识一门科学时,你才会感受到它的魅力。eBPF技术已经不再小众。从Linux3.18的初次亮相,现在的生态算得上是“内核关联技术”里的翘楚。其中代表性的有BCC、libbpf、cilium、Katran等等,被广泛用于解决不同的问题。虽然用起来不难,但想系统性的掌握却并非件易事。其中,Cilium官方文档中的BPF and XDP Reference Guide是一份好资料。于是,就有了译文的想法,愿一同在技术层面再认识eBPF。转译过程中有参考其他资料,亦有基于个人认知补充的背景知识。主

2022-05-03 15:35:37 2145

原创 libbpf eBPF对TCP下手了

eBPF这项新技术会成为又一个内核玩家们的新圣地。而我对eBPF了解的越多,就愈发追捧这门技术,乃至有些痴迷,“eBPF造万物”的字眼快要在我嘴里破口而出,背后的原因,是内核给了eBPF足够的空间,去接管系统的一切。但作为一个TCP玩家,学习eBPF的目的自然还是注重眼前。TCP是我现在的工作,所以我只好把目光从全局回缩一下,先捣鼓捣鼓eBPF对TCP的玩法。BPF是我的出发点,所以我总想着在这玩出点什么名堂。以往刚接触eBPF,会偏执的认为这只是一个白盒测试,最有价值的是在于可以追踪应用程序/内核

2022-04-17 14:07:00 3218 5

原创 技巧派:linux帮忙可视化前预处理

技巧派是一个新篇章。渐渐发觉,计算机这个行当里,排斥着光说不练的假把式,凡事都要手底下见真章。而真章下除了日以继夜的付出、保持好奇心、还有就是一些个小技巧。事情那么多,一件事如果从零做两次就意味着低效。对于未来可能会重复的工作,技巧派的目的就是记录一次,在之后的实践中反复套牢记忆,不求一遍过,最终得技巧。分享出来,目的也很简单。一是有人遇到了一样的问题,可以从文中得到解答;二是在自已需要的过程中,可以拿出来回味,在反复中形成肌肉记忆,掌握住这个提高效率的小技巧。技巧不在乎一时的理解,是在你未来工作中

2022-04-05 18:21:18 1259

原创 解决你的主机序和网络序问题

对一个搞系统和网络的人来讲,主机序和网络序是要清楚的。这对于写socket通信讲,是很重要的!一个完整的socket通信必然绕不开主机序和网络序问题,这是当今计算机通信的基石。但对于一个常写socket通信的老手而言,可能也不太知道这个知识点,因为主机序和网络序问题被各种语言的解释器给掩盖了,这虽是减轻了socket编程的工作,但也给网络通信的过程蒙上一层面纱。很多人不知道主机序和网络序是什么了,更别提“系统”的大端序和小端序,这是一个学习者的悲哀!不懂得本质,哪得来创新,反复造同一个轮子的行为只能让

2022-03-26 19:47:33 166

原创 学习ebpf_exporter项目搞懂prometheus client端的全调度

bpf碰上prometheus简介bpf_exporter的完整调度流程:组成模块导入和配置采集数值:数据落盘:http调度:代码分析——重点模块exporter结构解析定位数据采集区Register注册和暴露描述符定义collect采集数值获取内核的ebpf Table的数据(收集ebpf的统计日志)Gather调度collect采集数据数据组装处理数据落盘http调度入口prometheus的handler连接prometheus.DefaultGatherer简介bpf_exporter项目利用g

2022-03-25 16:43:22 5280 3

原创 eBPF(extended Berkeley Packet Filter):Linux系统最具颠覆性的“白盒测试”

eBPF——Linux系统地图上的“沙盒游戏”简单介绍eBPF简单介绍eBPFeBPF is a revolutionary technology with origins in the Linux kernel that can run sandboxed programs in an operating system kernel. It is used to safely and efficiently extend the capabilities of the kernel without

2022-03-20 18:11:41 1898

原创 简单聊聊利用DNS服务器提供单一入口

学点DNS服务器的知识,让你见证DNS传送门的魔力。

2022-03-13 14:34:45 1825

原创 packetdrill脚本分析指南

黑盒测试的工作越来越多,用到packetdrill的场景越来越多,脚本量也在不断地膨胀。可是Google还是没有重视packetdrill,除了少量的脚本书写规范,没有任何其他可以利用的资料,于是在黑暗的深渊里不断地摸索,攀爬,只希望不要摔落packetdrill 写脚本时注意的问题。正确的脚本创作。...

2022-02-14 20:03:30 459

原创 TCP-Nagle:代码版本重新解释Nagle算法

开年来的第一份工作,就是在最新的内核上打补丁。可没想到Nagle算法也被我冲进了去年的垃圾桶里。在网上找了一些资料,理论很快被消化,但看了看内核的实现,久久没能动弹。坐了一天,才摸索出来点什么,觉得需要一份代码解释TCP-Nagle的版本说明,这样和Nagle算法的黑盒解释,才能对TCP-Nagle有全面的理解。于是,有了本文。Nagle算法RFC对Nagle算法解释Nagle’s algorithm, named after John Nagle, is a means of improvi

2022-02-08 21:14:42 1948

原创 学了手内核常见的汇编指令(2):宏定义cmpxchg

近些日子,一直埋头于进程上下文/软中断对TCP传输控制块的访问,总想着在这个点里为传输优化做点事。原因也很简单,因为进程上下文/软中断的锁。先有个直观感受int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) { int ret; lock_sock(sk); ret = tcp_sendmsg_locked(sk, msg, size); release_sock(sk); re

2022-01-31 16:59:33 2160

原创 TCP-F(orward)ACK:植入快速重传灵魂的强制快速重传

FACK和快速重传机制

2022-01-27 21:49:04 2742

原创 F(orward)-RTO Recovery:TCP传输优化的打假算法

引子最近看了点《开端》,时间循环这个梗真的百看不厌,并非喜欢这种设定,而是在这个过程中找到解放自己的方式,寻觅破局之法,这点总能击中我的爽点。可是现实中没有时间循环的设定。但面对僵局,甚至是越走越远的烂局,并不是放任不管,而是及时补救。要在最短的时间,用最确切的证据,去挽救错误的局面。现实如此,网络亦如此。网络是个复杂的玩意,互联网兴起更是催生了这一头巨兽。要在这种盘根错节下充当能手,TCP做了第一个,顺理成章也成了最难的一个。我一直以为TCP的难点不在可靠传输,真正的困局是在传输优化上,而传输优

2022-01-23 13:57:21 1381

原创 TCP-TSQ:控制,不再是限制

kernel实现的TCP-TSQ算法

2022-01-15 19:10:32 1403

原创 学了手内核的位运算(1):test_and_set_bit

我一直都对位运算感兴趣,但凡最小的bit都能干一件大事,比如最多见的“存放一种状态”。果然瘦子都比胖子灵活,就连计算机也没有例外,位运算巧妙的用着计算机的与门、或门、非门和异或等简单操作,就将空间开销拉到了最低。碰巧正研究着kernel的网络协议栈,看到了中间也参杂着不少的位运算函数,所以仗着捣鼓TCP的机会,学习下内核的一些位运算机制。一是学到点自己感兴趣的东西,二是以后再遇到,自然可以相视一笑。此外,内核的位运算实现大多都是原子操作,这让这些位运算函数被广泛用于内核的各个地方。写到这,回想下,自

2022-01-13 22:24:12 2784

原创 上海的一天,看到了点TCP/IP转型的未来

**又来上海,这次恰好多出了周末,我本来一直死宅,此次却莫名想出去采采风,可能是我前几次来的很随意,对上海攒有不少期待!**搞计算机的,尤其还搞TCP/IP的,从来是网上诸葛亮,生活里就像个白痴,多少有点含沙射影的在说我。但好在我对新事物很好奇,并往往会总结经验,所以很少在人前显式的展现出自己的无知。

2022-01-12 21:02:22 747

原创 TCP-TLP:原来尾部丢包是这么玩的

看看TLP的一生

2022-01-08 18:30:04 1100

原创 TCP-retransmitted: 快速重传/超时重传的报文发送全过程

tcp_retransmit_skb:

2022-01-05 18:53:34 1693

原创 TCP-RTO:关键定时器和超时重传的那些事

RTO的关键路径:围绕建联,发送数据和接收数据(ACK)都是有重传定时器的响应。RTO的超时处理阶段会在重传数据段的道路上历经坎坷,充当着TCP重传的最后一道防线。

2022-01-04 18:13:22 1209

原创 上网/游戏/看剧太慢了:瞧瞧是不是运营商干的

提不起来什么兴趣,可能是2021的最后一年,毕竟再过几个小时,2022就来了,我得把所有的精力留到几小时后,才能确定我2021没有透支。今天也不算没有干事,在和身边朋友闲聊上网/游戏/视频等“冲浪手段”总会被网络限制时,意外的在抓鱼打混中知道了点新东西,自己捣鼓了几下,发现还真是如此,想着,总可以在别人埋汰网络差时帮他们出出主意了。即便不能解决他们的事,也可以把锅甩给运营商,又或者帮运行商撇清点关系。ipip也不知道是干什么的,但是确实做了件有趣的事,我猜他们肯定和运行商有些关系吧,但这也仅仅是揣测,毕

2021-12-31 18:02:54 2788

原创 TCP-minshall机制 : 小包的春天

minshall就缓解小包的影响。小包等大包的开销很高,TCP的窗口不是一个精确值,不能精准度量网络的容量,所以小包可以发送至多一个,在容忍的范畴里,小包不需要和大包一样,等窗口空出来才能发送,从而浪费了很多时间。

2021-12-31 12:40:27 988

原创 Leetcode 3:无重复字符的最长子串

Leetcode 3:无重复字符子串

2021-12-29 21:49:53 326

原创 TCP协议栈发送数据报文的机制百科

协议栈是怎么在发送数据报文时调度的,一张图全剖析

2021-12-28 15:54:51 980

原创 Leetcode 2:两数相加

一题探秘迭代和递归Leetcode 2: 两数之和是一道迭代和递归的主战场。/* * @lc app=leetcode.cn id=2 lang=cpp * * [2] 两数相加 */// @lc code=start/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(n

2021-12-28 09:10:30 109

原创 Leetcode 1:两数之和

1. 两数之和

2021-12-26 17:55:39 276

原创 内核编译 我走过最多的路

从0——1的内核编译当你接触到内核,你在真正的开始认识计算机每次萌发动手玩内核的想法,但总是因为各式各样的花式借口放弃了,遂打算一点一点的记录下学习内核的过程,并将遇到的问题和大家分享。如果你也想加入进来!欢迎私信我,大家一起玩转内核。为避免出错,我是从最开始的虚拟机开始部署,用的是Linux Ubuntu 20.04.2(最新出炉~~~)。但其实这并不妨碍我们,在任何的Linux系统上都可以通用的解决内核编译的从0到1。开整下载内核源码安装依赖解压源码配置内核编译和安装启用内核为引

2021-12-23 11:10:34 602

原创 TCP-autocork:发送数据报文之塞子的一生

晒了好几天的图,觉得是时候补充下这部分。autocork我总认为是TSQ部分的一个重要分支,于是我花时间特意去研究了一下,从内核2.6到5.10的版本迭代,tcp_should_autocork的确发生了不少的变化,觉得有必要说说。tcp_should_autocork是一个阻塞发送数据报文的判断条件,在kernel中也确实是这么做的。它位于tcp_push函数,并在判断语句前结束了对push、urg标识的分支处理,这确定了TCP-autocork只服务于“普通的”发送至多数据报文的处理。void .

2021-12-13 17:08:27 1885

原创 TCP 加载字节流//到内核发送缓冲区流程图

大小是系统调用SO_SNDBUF设置的,TCP发送缓存的buffer是应用层下发的两倍,发送队列大小该受buffer限制。但是真实的发送队列会受到size_goal和skb->len的影响,size_goal是算出来的,skb->len是数据包大小。

2021-12-10 17:00:55 1764

原创 互联网职场技术分享的必备技能:VNC 远程桌面演示

VNC 远程桌面控制——职场必备技能点初衷引子远程桌面软件被需要言归正传VNCVNC服务端SSH 远程访问协议安装图形管理界面继续安装VNC ServerVNC 客户端一些小碎语初衷不断涌入高科技开发产业圈的新生代,助长了互联网行业的高速发展,也终于让这个行业的门槛拔地而起。学技术出身的,固然知道提升硬实力的道理,但实力的输出和生产效率的提高亦是每一个互联网职场人的必修课。这个专栏将从VNC开始,不去强调硬技术,而是把关注点放在提高工作效率的软能力上。希望读到这个专栏的读者们学会提高自己工作效率的方法

2021-12-06 21:27:18 5905

原创 packetdrill: python的断言报错AssertionError

写自定义脚本遇到的一个小问题,在这打个标记,防迷路!packetdrill测试时,终端总会在自定义脚本的某python语句上报错,开始以为是自己的python语法问题,遂逐个检查。后经调试,发现终端上的AssertionError是实际结果和脚本预期结果不同,packetdrill报告使用者的。这说明:预期的assert TCP_INFO值错误。贴张图:packetdrill 无法得到对应python语句声明的实际信息变量,如上图的tcpi_snd_cwnd。图上只能说明脚本断言的tcpi_sn

2021-11-29 15:39:28 5293

原创 packetdrill: tun device open: SUCCESS

用packetdirll学习Linux内核网络协议栈,脚本写完后遂在本地测试,遇到了这样的问题,无论运行脚本多少次,终端只显示tun device open:SUCCESS。对于这个问题,先晒解决方案。在终端命令上禁用packetdrill在本地模式上创建的虚拟网卡tun0。ip link set tun0 down引发问题的原因,是packetdrill中创建的虚拟网卡tun0没有释放,从而在local mode下,packetdrill确实打开了net0,但触发了netdevice.c的loop

2021-11-28 14:14:25 688

原创 packetdrill 深入理解内核网络协议栈的工具集

对内核网络协议栈的学习,验证和深度研究packetdrill 将大事化小深入packetdrillpacketdrill 模拟包和验证包packetdrill 设计独特的packetdrill脚本语言注入包和验证包的脚本系统调用shell命令python命令时间戳格式协议栈协议支持IPv4和IPv6Path MTUECN安装和执行参考文献:packetdrill 将大事化小本文是学习和研究内核网络协议栈的一个文笔记录,主要围绕的是一款能帮助大家深入理解内核网络协议栈的工具——packetdrill。pa

2021-11-26 20:44:26 2395

原创 具体数学 递归问题1.1 从河内塔/汉诺塔开始

河内塔问题在经典河内塔问题中,有3根柱子和N个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按从大到小依次套在一根柱子上,现在想将所有的圆盘按照原来的位置从一根柱子移动到另一根柱子上,移动过程需要遵守一些规则:1.每次只能移动一个盘子2.盘子只能从柱子顶端滑出移动到下一根柱子3.盘子只能叠在没有盘子的柱子或者比它大的盘子上聚焦河内塔问题。河内塔的规则,限定了较大的圆盘要先转移到目标柱子(选择的任意一根柱子)上,这时直接转移是不可行的,一定要利用其他柱子。问题中只有3根柱

2021-10-16 18:50:45 656

教你入门packetdrill,学会怎么传输协议优化的学习教程

packetdrill是目前学习传输协议的脚本测试工具,能够定量的研究特定的场景触发的问题。但packetdrill并没有被广泛普及,如tcpdump、libpcap等,这意味着有一定的学习成本,PPT解释了怎么利用packetdrill来书写脚本,学会特定问题的检测和针对性的传输优化。可以参照文章packetdrill一起,进食更加美味。

2022-02-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除