- 博客(133)
- 资源 (1)
- 收藏
- 关注
原创 数据中心网络实现梳理
前面分析了Kubernetes基本概念,Kubernetes网络等内容,其可能主要属于paas层,而对于其实际依赖的物理上的基础设施的拓扑结构,并没有进行讨论,因此本文将针对参考文章中的相关内容进行阅读学习,对数据中心网络相关内容进行简单梳理。
2025-08-31 16:15:54
1050
原创 网络虚拟化:Veth,Bridge,Network Namespace与Docker网络
以报文发送为例,在TCP/IP实现浅析中一节分析过ip_queue_xmit,其查找路由的调用为ip_route_output_ports->ip_route_output_flow->__ip_route_output_key->ip_route_output_key_hash->ip_route_output_key_hash_rcu->fib_lookup。在rtnl_newlink调用中,会先间接调用rtnl_create_link,其中调用了alloc_netdev_mqs,
2025-07-27 22:49:55
448
原创 TCP/IP协议栈实现浅析(下) 报文接收相关函数及流程分析
上节中按照报文发送经过的顺序即:socect层,传输层,网络层,路由子系统,邻居子系统,设备子系统,网络设备驱动层等各层梳理了报文发送过程,这节梳理报文接收流程,但是报文接收流程就是倒着来的顺序,即从网卡到用户态了。
2025-07-06 22:56:21
776
原创 TCP/IP协议栈实现浅析(中) 报文发送相关函数及流程分析
如果发送的网络包非常大,要进行分段。在内核协议栈里面,网络包的数据都是由 struct sk_buff 维护的,因而第一件事情就是找到一个空闲的内存空间,将用户要写入的数据,拷贝到 struct sk_buff 的管辖范围内。如果使用这种模式,网络包的数据就不会放在连续的数据区域,而是放在 struct skb_shared_info 结构里面指向的离散数据,skb_shared_info 的成员变量 skb_frag_t frags[MAX_SKB_FRAGS],会指向一个数组的页面,就不能保证连续了。
2025-06-18 01:30:47
602
1
原创 TCP/IP协议栈实现浅析(上) socket实现及连接建立相关函数和过程分析
以陆运运送货物为例子,类比网络分层的作用,此处片面的描述作用范围。经过三层转发时,每次源目的mac全部会变更,而源目的ip是肯定不会变的。首先货物要包装好,然后发件人填写发件人的名字和收件人的名字(源目的端口号),填写收件人和发件人的地址(源目的ip),查看离自己最近的网点(比如某xx驿站)的地址把货物送出(默认路由和目的mac),货物会从网点出发,经过一个个中转站,最终把货物送达最后一个中转站,然后由中转站又到达了某某网点,快递员配送到收件人手中。//code。
2024-07-17 23:16:19
1374
原创 内核调试方法
会接管所有的线程,如果你从一个线程切换到另外一个线程, gdb 会马上把原先的线程暂停。一般用 gdb 进行多线程调试,需要注意两个参数: follow-fork-mode 和detach-on-fork。但是在wsl2上尝试全部成功。这步是在编译内核之后进行的,因为有些特性需要在内核编译时就指定,比如kgdb。可以使用串口连接,或者使用socat实现远程gdb连接kgdb,另外还有agent-proxy小工具可用。在用 gdb 来调试内核的时候,由于内核在初始化的时候,会创建很多子线程。
2024-07-11 00:41:54
1611
原创 eBPF学习
先看ebpf.io的介绍,可以设置中文。这里摘录一些我觉得有必要记录的:如何编写 eBPF 程序?在很多情况下,eBPF不是直接使用,而是通过像 Cilium、bcc 或 bpftrace 这样的项目间接使用,这些项目提供了 eBPF 之上的抽象,不需要直接编写程序,而是提供了指定基于意图的来定义实现的能力,然后用 eBPF 实现。如果不存在更高层次的抽象,则需要直接编写程序。Linux 内核期望 eBPF 程序以字节码的形式加载。
2024-01-11 23:33:27
1589
原创 《Learning eBPF》读书笔记
相关章节,标黑的是准备看下的:第1章:介绍第2章:hello world例子以及ebpf程序和ebpf map概念的介绍第3章:ebpf程序以及他们是如何运行在内核中的第4章:探索用户态进程和ebpf程序之间的接口第5章:介绍co-re,即一次编译,任何地方运行第6章:ebpf验证器第7章:介绍许多不同类型的ebpf程序和他们的挂载点第8章:网络特性的ebpf程序介绍第9章:ebpf安全特性应用第10章:许多编程语言应用的概览,用户态进程和epbf程序交互使用的库和框架。第11章:展望。
2024-01-07 17:37:50
3073
原创 uboot学习及内核更换&&设备树及rootfs学习
在前面可以自己编译内核并且可以使用uboot之后,下面就研究下怎么能够快捷的更换版本,而不是把sd卡从树莓派一次次插拔,顺便学习下uboot常见命令。
2023-12-29 23:22:41
1975
翻译 Kernel Build System中文手册
- ...每个条目都拥有自己的依赖。这些依赖用来决定一个条目的可见性。任何子条目只有在他的父条目可见时才可见。
2022-11-20 16:03:45
430
翻译 automake中文手册(部分翻译)
automake是一个根据Makefile.am文件自动生成Makefile.in的工具。每个Makefile.am文件都基本上是由一系列make变量定义组成(偶尔可能也会夹杂规则)。由Makefile.am生成的Makefile.in文件与GNUMakefile标准兼容。Gun的Make标准文档很长,很复杂,又容易变化,而Automake的目标就是将Makefile维护的负担从GNU维护人员身上移除(把他放在automake维护者身上)。最典型的automake输入文件就仅仅是一系列变量定义。......
2022-07-14 23:30:18
1992
原创 makefile学习笔记
makefile文件,见了不少,但自己不会写,在这里学习一下,看的是一位程序员前辈的博客,好像是2004年写的了,不过对我这种以入门为目的的人来说应该已经足够了。另外贴一下他的新站的网址。这里针对阅读内容做下记录。...............
2022-04-10 15:55:46
1250
1
原创 gdb使用
GDB: The GNU Project Debuggergdb能够在程序运行时看到程序里面发生了什么,还能看到程序挂掉的时候在干嘛。。。所以说当你在找bug时是很有用的。。。官方说gdb可以主要做下面四种事情来帮助你找bug:启动你的程序,指定任何可能导致bug的内容使你的程序在特定的条件停下来当你的程序停下后,检查发生了什么在你的程序里改变一些东西,用于去尝试修正一些错误的影...
2019-03-22 15:52:54
2417
1
原创 云原生、容器及数据中心网络相关名词记录
使用Calico、Flannel、Weave和Cilium的终极指南_cilium和calico-CSDN博客Flannel,Calico 和 Cilium 之间有哪些优缺点和差别? - 知乎云原生 | Kubernetes 之常用 CNI 网络插件简述与对比 - 知乎Kubernetes 网络方案全解析:Flannel、Calico 与 Cilium 对比与选择_flannel、calico、cilium-CSDN博客阿里云云原生容器ACP认证培训课程不是技术也能看懂云原生不是技术也能看懂云计算,大数
2025-08-23 15:44:41
1076
原创 内核通信机制总结
Netlink消息的结构主要包含三个部分:Netlink消息头部(Netlink Header)、消息负载(Message Payload)、Netlink消息属性(Netlink Attributes)。需要注意的是,消息的具体结构和使用可能会根据不同的Netlink族(如NETLINK_ROUTE、NETLINK_SOCKETS等)以及消息类型而有所不同。nlmsg_flags:消息的标志,如NLM_F_REQUEST(请求消息)或NLM_F_ACK(需要确认)等。第二个参数是设备相关的请求码。
2025-07-10 00:47:00
848
原创 进程间通信机制研究
(1) 无名管道(pipe):管道允许一个进程和另一个与它有共同祖先的进程之间进行通信。(2)命名管道(FIFO):类似于管道,但是它可以用于任何两个进程之间通信,命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。(3)信号(signal):信号是比较复杂的通信方式,用于通知接收进程有某种事情发生。除了用于进程间通信外,进程还可以发送信号给进程本身;
2025-07-10 00:46:29
373
原创 读书语句摘录
最好的学习方式就是自己要产生一些问题,然后带着这些问题去寻找答案–深入理解Linux网络。理解内核某部分的捷径就是对他做些修改–linux内核设计与实现。
2025-07-10 00:45:40
197
原创 mermaid图学习
节点,链接,箭头都可以定义样式fill:#333;color:#333;color:#333;fill:none;StartStop。
2025-07-10 00:43:31
1123
原创 汇编基础知识
以上代码中的ip_route_command数组是不定长的数组,在x86和arm64的汇编中,是通过扩展栈顶指针实现的,而一般来说gcc的栈保护机制是在栈底保留一块内存canary来检测栈溢出操作,因此如果是这种不定长的数组,更不容易检测到栈溢出。wzr 32位,xzr 64位,这两个寄存器中都是存储的0,用来清零操作,如指针和其它类型的变量清零。lr(Link Register),也就是x30,它的作用就是存储着函数的返回地址。运算符表示使用更新的方式,即在存储操作之后,sp 的值将被更新为。
2025-07-10 00:42:06
401
原创 svn命令行基础操作
svn merge -c -<版本号> . 在本地撤销某次修改的内容,但不更改当前 SVN 的版本号.反向合并(撤销)指定的某个版本的修改,即把该版本的更改“还原”到当前工作副本。svn changelist <changelist名> <文件1> [文件2 …git diff 9da876b 0b0eb5e ./ 比较 9da876b 和 0b0eb5e 这两个提交之间,当前目录下文件的差异。git log 9b0bd4d…--oneline ./ 以简洁格式(每行一条,显示提交哈希和说明)输出。
2025-06-22 12:49:15
432
原创 kbuild system学习
CROSS_COMPILE=执行相关工具时的进程名前缀。M=指定外部模块(比如内核模块)编译目录。ARCH=指定target架构类型。V=指定日志输出级别。
2025-04-30 11:08:48
448
原创 linux通用知识学习
当主进程fork或exec子进程,文件描述符被继承,因此0,1,2句柄也被继承,从而使得telnet等服务,可以做到间接调用别的shell或程序。比如如果是远程登录使用的zsh,那么其会重定向到相应的pts进程在转为守护进程时,可以经0,1,2句柄重定向到/dev/null,做到不输出任何信息。备注:STDOUT_FILENO、STDIN_FILENO是int型的文件描述符,是非负整数,属于没有buffer的I/O;一般定义为0, 1, 2 ,在定义。012。
2024-07-06 16:07:40
459
原创 函数调用图生成
虽然之前就知道有生成调用图的工具,但是没见过这种,我目前分析代码,都是用的流程图,横向表示调用,纵向表示顺序流程。但是一看上面这种,感觉更清晰一点,然后就去研究了。。2023/12/29 去问了作者本人,他说这个是自己手动整理的。。。。
2023-12-29 23:24:24
1030
原创 VsCode备忘
上次简单学习了一下vscode的使用,结果好长时间没用,今天打开又全忘了。。。再记录一下吧Ctrl+Shift+P 命令面板,查找命令,设置等等Ctrl+` 打开集成终端,监视生成输出Ctrl+,打开设置
2023-09-08 00:13:34
1011
1
原创 英语语法学习_incomplete
在语言学中,自然语言的语法是说话者或作者在从句、短语和单词的构成上的一套结构约束。1「语法」实际上有两个概念,一是「语法」(也叫「文法」),二是「语法学」。一、语法:客观存在的语言结构规律(词的变化和组词成句规则)。语法研究包括句法、语义、语用三方面。句法包括传统句法及词法。语义包括句法结构隐含的语义成分、语义指向、语义特征。语用包括语境和句调、语气以及句法结构的变化。二、语法学:对语法系统和语法规律的理论总结和说明。包括普通语法学、描写语法学、历史语法学(语法史)、比较语法学、规范语法学、程序语法学
2023-07-02 11:20:01
482
原创 go语言学习_incomplete
rust没咋整明白,再来了解下go语言基础知识,参考资料为菜鸟教程以及go程序设计语言。go语言与google关系匪浅,且发明人之一还是c语言的发明人之一,可以说是很神奇了。
2023-06-22 13:46:14
1072
2
原创 rust语言学习_incomplete
我看的是rust官方教程的翻译版(感谢翻译的大佬们),这里记录下学习的过程。cargo是rust的构建系统和包管理器创建项目的过程感觉很新奇,使用cargo new后,会自动创建目录结构,而且还自动创建了git仓库。src里面新建了一个打印helloworld的rs文件看下Cargo.toml里的内容,这里面连版本号都有。编译命令是cargo build,这个看起来没啥,但是好处是开发环境的统一,checkout一个仓库,直接就可以build(甚至不限定目录)。虽然./configure&&make也差
2023-06-22 09:18:13
1055
原创 路由转发相关下内核知识整理
netlink可以提供了接口可以向内核增加,删除,查找与接口、地址、路由、arp等相关信息。通过system函数直接下发net-tools或iproute2相关命令下内核。与路由相关的netlink协议族为NETLINK_ROUTE。第二个参数是设备相关的请求码。SIOCSIFVLAN 设置vlan虚接口。SIOCSIFFLAGS 设置接口标志。SIOCGIFFLAGS 获取接口标志。SIOCSIFADDR 设置接口地址。SIOCGIFADDR 获取接口地址。
2023-06-03 09:11:46
562
原创 交叉编译相关知识整理
因为嵌入式设备的特殊性,比如其内存,性能可能相比与通用设备较弱,或者设备上缺少编译工具链等等原因,很多时候想要在嵌入式设备上使用某些程序时,需要在 在通用机器上编译好,而在嵌入式设备上运行,而这两者的cpu架构是不同的,因而需要好好整理下交叉编译。
2023-05-02 17:21:44
1754
原创 源码安装工具checkinstall使用
每当从源码包编译程序时,安装过程很愉快,但当你想删除时,就很费脑筋了,你可能要去找你当时编译的目录执行make unistall,当然更可能的是,你早就把源码包给删除了,对于强迫症来说,这显然不能忍。执行后会交互的让你确定一些信息,默认配置是从 /etc/checkinstallrc 读取的。–addso 把共享库加到/etc/ld.so.conf。-R 生成RPM package.–include 强制包含文件或目录。–inspect 检查包的文件列表。至此,安装的文件可以较好的管理了。
2023-05-02 02:04:39
1506
2
ctb通信库libctb-0.16
2017-06-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅