自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(441)
  • 收藏
  • 关注

原创 ARP报文在linux内核协议栈传输时,为什么没有经过PREROUTING,而是直接到达netfilter的INPUT

ARP报文在Linux内核协议栈传输时,‌不经过PREROUTING链而直接到达netfilter的INPUT链,‌主要是因为ARP协议工作在数据链路层(‌L2)‌,‌而不是网络层(‌L3)‌。‌在TCP/IP协议栈中,‌PREROUTING链主要用于处理进入本机的网络层数据包,‌而ARP报文并不包含IP头部,‌因此不会被视为网络层数据包。因此,‌ARP报文在Linux内核中的处理路径与网络层数据包不同,‌它不会经过PREROUTING链,‌而是直接由数据链路层和ARP协议处理机制来管理。

2024-09-18 15:45:34 318

原创 linux 下一跳缓存,early demux(‌早期解复用)‌介绍

early demux是在skb接收方向的加速方案。linux kernel 3.6之后版本在取消了FIB查询前的路由缓存后,每个skb应该都需要查询FIB。而early demux是基于一种思想:如果一个skb是本机某个应用程序的套接字需要的,那么我们可以将路由的结果缓存在内核套接字结构上,这样下次同样的报文(四元组)到达后,我们可以在FIB查询前就将报文提交给上层,也就是提前分流(early demux)。

2024-09-03 16:10:29 550

原创 同步IO和异步IO的差异

阻塞行为:同步I/O: 进程发起I/O操作后会阻塞,直到I/O完成。异步I/O: 进程发起I/O请求后立即返回,不会阻塞。内核数据拷贝:同步I/O: 数据从内核空间拷贝到用户空间是在进程的上下文中完成的。异步I/O: 内核负责将数据拷贝到用户空间,无需进程参与。完成通知:同步I/O: I/O操作完成后,进程自动从阻塞状态恢复。异步I/O: 通过信号或回调函数通知进程I/O已完成。系统调用:同步I/O: 使用read(), write()等传统系统调用。异步

2024-08-29 17:05:36 189

原创 shell代码,统计所有iptables,ip6tables规则,按五链分别保存到对应.md文件

【代码】shell代码,统计所有iptables,ip6tables规则,按五链分别保存到对应文件。

2024-08-29 09:46:11 98

原创 net_device数据结构简单总结

net_device 结构体用于表示和管理系统中的每一个网络接口,无论是物理的还是虚拟的。它封装了网络设备的所有相关信息和操作,是连接硬件驱动和网络协议栈的关键纽带。net_device 结构是 Linux 网络子系统的核心之一,它为上层协议栈提供了一个统一的接口来访问和控制网络设备,同时也为网络设备驱动程序提供了一个标准的框架。

2024-08-28 10:52:08 970

原创 sk_buff简单总结

sk_buff是Linux网络子系统中最核心的数据结构之一,主要用于在网络协议栈中表示和管理网络数据包。它在整个网络数据包的生命周期中扮演着关键角色,从数据包的接收、处理到发送的整个过程中都会用到sk_buff。

2024-08-28 10:42:58 358

原创 epoll原理简单总结

epoll是Linux系统中用于I/O多路复用的一种高效机制。它的主要作用是同时监控多个文件描述符(如socket),当其中有I/O事件发生时,立即通知应用程序进行处理。相比于select和poll,epoll具有更高的性能和扩展性,尤其适合处理大量并发连接的场景。

2024-08-28 10:35:00 374

原创 操作系统MLFQ多级调度策略简单介绍

MLFQ(多级反馈队列)调度策略是一种常见的操作系统进程调度算法。

2024-07-26 10:54:50 334

原创 TCP Nagle算法,TCP_CORK,延迟确认机制简单介绍

虽然Nagle算法在提出时解决了重要问题,但随着网络技术的发展,一些新的机制如TCP_CORK(在Linux中)提供了更细粒度的控制,允许应用程序更好地平衡延迟和效率。Nagle算法与TCP的另一个机制——延迟确认——结合使用时,可能会导致性能问题。延迟确认会推迟发送ACK,而Nagle算法又在等待ACK,这可能会导致不必要的延迟。在其他系统中,可能需要使用不同的机制来实现类似的功能,如FreeBSD的TCP_NOPUSH。它通过延迟发送小数据包来实现这一目标,直到有足够的数据可以发送一个完整的数据包。

2024-07-25 11:02:36 876

原创 进程组(Process Groups)简单介绍

进程组是一个或多个进程的集合,这些进程通常与同一作业或应用程序相关联。每个进程组都有一个唯一的进程组ID(PGID)。创建进程组的进程被称为组长。组长的进程ID(PID)通常与进程组ID(PGID)相同。进程组是介于单个进程和会话(session)之间的一个组织层次。该管道命令会创建一个新的进程组,包含三个进程,并在后台运行。

2024-07-23 17:38:10 300

原创 SIGINT 和 SIGTSTP 信号区别

SIGINT 和 SIGTSTP 是 UNIX /类UNIX 系统中的两种不同的信号,它们用于进程间通信和控制.含义:中断信号默认行为:终止进程通常触发方式:用户在终端按下 Ctrl+C信号编号:通常为 2目的:用于请求程序立即终止含义:终端停止信号默认行为:暂停(挂起)进程通常触发方式:用户在终端按下 Ctrl+Z信号编号:通常为 20目的:用于暂停进程的执行,但不终止进程。

2024-07-23 16:01:02 278

原创 fork()和exec()的区别,使用场景

fork()和exec()是Unix/Linux系统编程中常用的两个函数,主要用于创建新进程。

2024-07-23 11:29:53 247

原创 linux内核管理物理内存的二进制伙伴算法(Binary Buddy Algorithm)

二进制伙伴算法(Binary Buddy Algorithm)是Linux内核用于管理物理内存的一种高效算法。

2024-07-19 14:09:39 334

原创 linux 用户/内核空间分配原理,修改方法

这种分配方式被称为3/1分割(3G/1G split)。

2024-07-19 10:10:43 261

原创 linux /proc 文件系统介绍

proc文件系统提供了一种简单而强大的机制,允许用户空间程序和内核之间进行交互,实现了对内核参数的动态查看和修改,而无需重新编译内核或重启系统。

2024-07-19 09:54:23 373

原创 C语言 printf函数缓冲机制

printf函数使用了缓冲机制。当我们调用printf时,输出通常不会立即显示在屏幕上,而是先存储在一个缓冲区中。这是为了提高I/O操作的效率。stdio库维护了一个缓冲区。当缓冲区满了,或者在特定条件下,缓冲区的内容会被刷新(flush)到实际的输出设备(如屏幕)。

2024-07-09 13:35:52 362

原创 里氏替换原则简单总结

子类型必须能够替换掉它们的基类型。换句话说,程序中的对象应该可以在不改变程序正确性的前提下被它的子类的对象所替换。详细说明:子类应当可以完全替换基类,而不会改变程序的正确性。子类可以扩展基类的功能,但不应该改变基类的功能。子类应当遵守基类的行为约定。

2024-07-04 10:16:24 228

原创 开闭原则的简单总结

开闭原则指的是软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。对扩展开放:当需要新增功能时,可以通过添加新的代码来实现,而不是修改现有代码。对修改关闭:已经存在的、经过测试的代码不应该被修改。

2024-07-04 09:59:58 350

原创 100岁躺平计算器:规划您的长期财务未来

"100岁躺平计算器"是一个简单而强大的桌面应用,它能帮助用户模拟和可视化长期财务状况。无论你是刚刚开始职业生涯的年轻人,还是已经在考虑退休的中年人,这个工具都能为你提供宝贵的财务洞察。"100岁躺平计算器"为我们提供了一个简单而强大的方式来可视化我们的长期财务状况。通过使用这个工具,我们可以更好地理解通货膨胀和长期支出对我们财务的影响,从而做出更明智的财务决策。无论您是刚开始规划未来,还是想要重新评估您的财务状况,这个计算器都是一个值得尝试的工具。开始使用"100岁躺平计算器",规划您的财务未来吧!

2024-06-28 14:43:44 653

原创 linux kernel slab分配器

slab分配器是一种高效的内存管理机制,主要用于小块内存的分配和释放。

2024-06-27 11:01:07 323

原创 linux内核kmalloc和kfree函数的原理

kmalloc和kfree提供了一种高效、灵活的方式来管理内核中的小块内存。它们的实现基于slab分配器,这种机制能够最小化内存碎片,并提供快速的内存分配和释放操作。kmalloc函数用于在内核空间分配小块连续的物理内存。kfree函数用于释放由kmalloc分配的内存。

2024-06-26 10:52:21 432

原创 OpenWRT Linux, bridge概念解释

在 OpenWrt Linux 系统中,bridge(网桥)的概念通常指的是在数据链路层(OSI 模型的第2层)实现连接和数据转发的虚拟网络设备。它的主要作用是将多个网络接口(例如 LAN 口、WLAN 等)连接在一起,使它们在逻辑上组成一个单一的网段,并在其间转发数据包。网桥透明地连接了物理上分离的网络段,使互连的网段在逻辑上成为一个网络。连接在网桥上的设备感知不到网桥的存在,似乎它们都连接在同一物理网段上。网桥通过学习 MAC 地址,记录源 MAC 地址与端口的对应关系,构建转发表。

2024-06-20 11:19:14 356

原创 OpenWRT相关文章链接

https://openwrt.org/docs/techref/netifd

2024-06-20 10:50:12 104

原创 socket 文件描述符的原理和底层实现

在C语言中调用socket函数会返回一个整型的文件描述符(file descriptor),它是一个非负整数,用来标识和引用这个新创建的socket。这个描述符在UNIX/Linux等操作系统中被广泛用于对文件、管道、网络连接等资源的引用。

2024-06-04 11:28:00 323

原创 popen底层实现原理

popen是C语言标准库中的一个函数,它提供了一种方便的方式来执行外部命令并与之进行通信。

2024-05-27 10:58:16 442

原创 linux fork()函数调用原理

在Linux中,fork函数用于创建一个新的进程,该进程是调用进程的子进程。下面我将详细说明fork函数在代码流程中的原理和用户态与内核态的交互过程。这就是Linux中fork函数创建进程的代码原理流程,以及用户态和内核态的交互过程。fork函数通过系统调用将进程创建的任务委托给内核,内核负责实际的进程创建和管理工作,并返回结果给用户态程序。通过fork系统调用,内核会创建一个新的进程,该进程拥有与父进程相同的代码、数据、堆栈等,但有自己独立的进程控制块和内核栈。

2024-05-26 16:17:31 502

原创 linux中系统调用的原理

整个过程中,用户态和内核态之间的切换是通过软中断(如int 0x80或syscall指令)来实现的。内核态具有更高的权限,可以访问系统资源和执行特权指令。通过系统调用,用户态程序可以请求内核提供服务,并获取所需的结果。这就是Linux中系统调用的基本原理和代码处理流程。系统调用提供了用户态和内核态之间的接口,使得用户程序能够访问和利用系统资源,同时也保证了系统的安全性和稳定性。Linux中系统调用的原理涉及到用户态和内核态之间的切换以及参数传递。

2024-05-26 16:03:30 339

原创 linux kernel中的ingress hook简介

在Linux内核中,Ingress Hook是Netfilter框架中的一个钩子(Hook),用于对进入网络接口的数据包进行处理。它位于数据包接收的早期阶段,在数据包被路由或转发之前。

2024-05-20 10:32:12 697

原创 conntrack作用和原理

Conntrack(Connection Tracking)是Linux内核中的一个重要模块,它的主要作用是跟踪和维护网络连接的状态信息。Conntrack模块位于内核协议栈的网络层和传输层之间,对经过系统的所有网络数据包进行跟踪和记录。

2024-05-20 10:22:16 473

原创 http消息从网卡接收的处理流程

当路由器接收到HTTP信息时,从网卡开始到包处理结束,涉及到网卡、内存、CPU、内核协议栈等多个部分的处理。

2024-05-20 10:13:27 360

原创 路由器接收arp信息的处理流程

以上就是路由器接收ARP信息,从网卡开始到包处理结束的整个过程中,网卡、内存、CPU、内核协议栈等的详细处理流程。这个过程涉及了硬件和软件的协同工作,通过网卡接收、DMA传输、中断处理、驱动程序处理、协议栈处理等步骤,最终完成对ARP帧的接收和处理。

2024-05-20 10:08:11 386

原创 路由表基本原理说明

路由器将数据包的目的IP地址与路由表中的条目进行比较,找到具有最长匹配前缀的路由条目。如果存在与数据包特征匹配的自定义表(例如,基于源地址、目的地址、协议类型等),则路由器将在该表中查找匹配的路由条目。当数据包的目的地址不是本地接口地址时,路由器会在Main表中查找匹配的路由条目,确定数据包的下一跳。当在Main表中找不到匹配的路由条目时,数据包将根据Default表中的默认路由进行转发。如果在自定义表中也没有找到匹配的路由,路由器将使用Default表中的默认路由来转发数据包。

2024-05-17 14:49:26 255

原创 PPPoE lcp和ncp协商

在 PPPoE(Point-to-Point Protocol over Ethernet)拨号连接中,一旦 LCP(Link Control Protocol)成功协商并建立了 PPP 连接,接下来会进行 NCP(Network Control Protocol) 协商,以协商并配置网络层参数,通常是 IP 地址和相关配置。总之,LCP 协商是在 PPPoE 拨号连接建立过程中的一个关键步骤,它确保了连接的各种参数和特性都能正确配置,以满足连接的要求。LCP 允许双方协商通信中的最大传输单元(MTU)。

2023-10-10 14:16:20 954

原创 C语言getopt()函数

【代码】C语言getopt()函数。

2023-03-14 16:51:11 1296

转载 什么是编码,什么是解码。原理解读

原文:http://www.cnblogs.com/luguo3000/p/3592562.html编码问题一直都伴随着程序猿从不间断,刚开始学编程的时候好多次遇到编码问题,解 决了文件读取的编码问题,又遇到了网络编码问题,解决了网络编码问题又遇到了数据库编码问题。总结一下无非就是编码原理没搞清楚,希望本文能从原理上让菜 鸟们理解编码,遇到问题可以从原理上搞定编码。一.编码人类先有了自己的语言,交流了若干个世纪,然后出现了计算机。可惜计算机只认0和1,人类只能认文字,双方都不能妥协,那就必须要有一个

2020-05-13 17:30:20 9947 2

原创 What are the differences between UTF-8, UTF-16, and UTF-32?

Answer1UTF-8 has an advantage in the case where ASCII characters represent the majority of characters in a block of text, because UTF-8 encodes these into 8 bits (like ASCII). It is also advantageous...

2020-05-06 10:45:55 210

原创 一个简单的抓取百度热度数据并可视化的demo

可视化工具https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js比如抓取2011-2020 100多位日本女星的百度热度数据female_japanese_hot_rank.pyfrom get_index import BaiduIndeximport csv# 可以 from...

2020-05-03 11:19:06 3158

原创 about the C++ object model

## plain object## Alignmentalign with the longest one, such as 4 bytes alignment## Inheritance## object in objectit is same with the Inheritance.## virtual function adde...

2020-04-14 10:17:52 181

原创 关于C++11 的右值引用

右值引用:追要是分移动语义+完美转发。目的是减少赋值操作中的新建内存再copy的造作,直接复用右值已经申请的内存空间和里面对应的内容。本质上是添加move constructor 和 move assignment constructor,move函数将入参类型static_cast为T&&,调用构造函数时就不会去调用copy constructor和copy assignmen...

2020-04-02 11:08:17 179

转载 Cache写机制:Write-through与Write-back

Cache写机制:Write-through与Write-back通常有三种方法:1.write through:CPU向cache写入数据时,同时向memory(后端存储)也写一份,使cache                &n...

2019-12-30 17:24:11 357

空空如也

空空如也

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

TA关注的人

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