- 博客(449)
- 收藏
- 关注
原创 lua 一个简单的table变量序列化和日志写入函数
lua将table类型变量转换成string类型函数serialize和一个简单的日志写入函数write_log。
2024-12-05 13:36:40
486
原创 IPv6 NA RTR/SOL/OVR标志位,单播多播选择,ndppd代理和kernel配置
表示该 NA 消息是否是对特定的 Neighbor Solicitation (NS) 消息的响应。决定接收节点是否应该覆盖其现有的邻居缓存表条目。表示发送 NA 消息的节点是否是一个路由器。
2024-12-03 16:50:16
1437
原创 IPv6拨号 /proc/sys/net/ipv6/conf/$ifname/ndisc_mbit 作用
【代码】IPv6拨号 /proc/sys/net/ipv6/conf/$ifname/ndisc_mbit 作用。
2024-10-30 17:40:47
264
转载 巧夺天工的kfifo
https://linyt.blog.youkuaiyun.com/article/details/5764312?fromshare=blogdetail&sharetype=blogdetail&sharerId=5764312&sharerefer=PC&sharesource=toyijiu&sharefrom=from_link
2024-09-24 17:13:17
67
原创 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
474
原创 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
720
原创 同步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
314
原创 shell代码,统计所有iptables,ip6tables规则,按五链分别保存到对应.md文件
【代码】shell代码,统计所有iptables,ip6tables规则,按五链分别保存到对应文件。
2024-08-29 09:46:11
144
原创 net_device数据结构简单总结
net_device 结构体用于表示和管理系统中的每一个网络接口,无论是物理的还是虚拟的。它封装了网络设备的所有相关信息和操作,是连接硬件驱动和网络协议栈的关键纽带。net_device 结构是 Linux 网络子系统的核心之一,它为上层协议栈提供了一个统一的接口来访问和控制网络设备,同时也为网络设备驱动程序提供了一个标准的框架。
2024-08-28 10:52:08
1188
1
原创 sk_buff简单总结
sk_buff是Linux网络子系统中最核心的数据结构之一,主要用于在网络协议栈中表示和管理网络数据包。它在整个网络数据包的生命周期中扮演着关键角色,从数据包的接收、处理到发送的整个过程中都会用到sk_buff。
2024-08-28 10:42:58
513
原创 epoll原理简单总结
epoll是Linux系统中用于I/O多路复用的一种高效机制。它的主要作用是同时监控多个文件描述符(如socket),当其中有I/O事件发生时,立即通知应用程序进行处理。相比于select和poll,epoll具有更高的性能和扩展性,尤其适合处理大量并发连接的场景。
2024-08-28 10:35:00
432
原创 TCP Nagle算法,TCP_CORK,延迟确认机制简单介绍
虽然Nagle算法在提出时解决了重要问题,但随着网络技术的发展,一些新的机制如TCP_CORK(在Linux中)提供了更细粒度的控制,允许应用程序更好地平衡延迟和效率。Nagle算法与TCP的另一个机制——延迟确认——结合使用时,可能会导致性能问题。延迟确认会推迟发送ACK,而Nagle算法又在等待ACK,这可能会导致不必要的延迟。在其他系统中,可能需要使用不同的机制来实现类似的功能,如FreeBSD的TCP_NOPUSH。它通过延迟发送小数据包来实现这一目标,直到有足够的数据可以发送一个完整的数据包。
2024-07-25 11:02:36
1168
原创 进程组(Process Groups)简单介绍
进程组是一个或多个进程的集合,这些进程通常与同一作业或应用程序相关联。每个进程组都有一个唯一的进程组ID(PGID)。创建进程组的进程被称为组长。组长的进程ID(PID)通常与进程组ID(PGID)相同。进程组是介于单个进程和会话(session)之间的一个组织层次。该管道命令会创建一个新的进程组,包含三个进程,并在后台运行。
2024-07-23 17:38:10
484
原创 SIGINT 和 SIGTSTP 信号区别
SIGINT 和 SIGTSTP 是 UNIX /类UNIX 系统中的两种不同的信号,它们用于进程间通信和控制.含义:中断信号默认行为:终止进程通常触发方式:用户在终端按下 Ctrl+C信号编号:通常为 2目的:用于请求程序立即终止含义:终端停止信号默认行为:暂停(挂起)进程通常触发方式:用户在终端按下 Ctrl+Z信号编号:通常为 20目的:用于暂停进程的执行,但不终止进程。
2024-07-23 16:01:02
692
原创 linux内核管理物理内存的二进制伙伴算法(Binary Buddy Algorithm)
二进制伙伴算法(Binary Buddy Algorithm)是Linux内核用于管理物理内存的一种高效算法。
2024-07-19 14:09:39
392
原创 linux /proc 文件系统介绍
proc文件系统提供了一种简单而强大的机制,允许用户空间程序和内核之间进行交互,实现了对内核参数的动态查看和修改,而无需重新编译内核或重启系统。
2024-07-19 09:54:23
452
原创 C语言 printf函数缓冲机制
printf函数使用了缓冲机制。当我们调用printf时,输出通常不会立即显示在屏幕上,而是先存储在一个缓冲区中。这是为了提高I/O操作的效率。stdio库维护了一个缓冲区。当缓冲区满了,或者在特定条件下,缓冲区的内容会被刷新(flush)到实际的输出设备(如屏幕)。
2024-07-09 13:35:52
680
原创 里氏替换原则简单总结
子类型必须能够替换掉它们的基类型。换句话说,程序中的对象应该可以在不改变程序正确性的前提下被它的子类的对象所替换。详细说明:子类应当可以完全替换基类,而不会改变程序的正确性。子类可以扩展基类的功能,但不应该改变基类的功能。子类应当遵守基类的行为约定。
2024-07-04 10:16:24
253
原创 开闭原则的简单总结
开闭原则指的是软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。对扩展开放:当需要新增功能时,可以通过添加新的代码来实现,而不是修改现有代码。对修改关闭:已经存在的、经过测试的代码不应该被修改。
2024-07-04 09:59:58
395
原创 100岁躺平计算器:规划您的长期财务未来
"100岁躺平计算器"是一个简单而强大的桌面应用,它能帮助用户模拟和可视化长期财务状况。无论你是刚刚开始职业生涯的年轻人,还是已经在考虑退休的中年人,这个工具都能为你提供宝贵的财务洞察。"100岁躺平计算器"为我们提供了一个简单而强大的方式来可视化我们的长期财务状况。通过使用这个工具,我们可以更好地理解通货膨胀和长期支出对我们财务的影响,从而做出更明智的财务决策。无论您是刚开始规划未来,还是想要重新评估您的财务状况,这个计算器都是一个值得尝试的工具。开始使用"100岁躺平计算器",规划您的财务未来吧!
2024-06-28 14:43:44
1002
原创 linux内核kmalloc和kfree函数的原理
kmalloc和kfree提供了一种高效、灵活的方式来管理内核中的小块内存。它们的实现基于slab分配器,这种机制能够最小化内存碎片,并提供快速的内存分配和释放操作。kmalloc函数用于在内核空间分配小块连续的物理内存。kfree函数用于释放由kmalloc分配的内存。
2024-06-26 10:52:21
687
原创 OpenWRT Linux, bridge概念解释
在 OpenWrt Linux 系统中,bridge(网桥)的概念通常指的是在数据链路层(OSI 模型的第2层)实现连接和数据转发的虚拟网络设备。它的主要作用是将多个网络接口(例如 LAN 口、WLAN 等)连接在一起,使它们在逻辑上组成一个单一的网段,并在其间转发数据包。网桥透明地连接了物理上分离的网络段,使互连的网段在逻辑上成为一个网络。连接在网桥上的设备感知不到网桥的存在,似乎它们都连接在同一物理网段上。网桥通过学习 MAC 地址,记录源 MAC 地址与端口的对应关系,构建转发表。
2024-06-20 11:19:14
554
原创 socket 文件描述符的原理和底层实现
在C语言中调用socket函数会返回一个整型的文件描述符(file descriptor),它是一个非负整数,用来标识和引用这个新创建的socket。这个描述符在UNIX/Linux等操作系统中被广泛用于对文件、管道、网络连接等资源的引用。
2024-06-04 11:28:00
486
原创 linux fork()函数调用原理
在Linux中,fork函数用于创建一个新的进程,该进程是调用进程的子进程。下面我将详细说明fork函数在代码流程中的原理和用户态与内核态的交互过程。这就是Linux中fork函数创建进程的代码原理流程,以及用户态和内核态的交互过程。fork函数通过系统调用将进程创建的任务委托给内核,内核负责实际的进程创建和管理工作,并返回结果给用户态程序。通过fork系统调用,内核会创建一个新的进程,该进程拥有与父进程相同的代码、数据、堆栈等,但有自己独立的进程控制块和内核栈。
2024-05-26 16:17:31
622
原创 linux中系统调用的原理
整个过程中,用户态和内核态之间的切换是通过软中断(如int 0x80或syscall指令)来实现的。内核态具有更高的权限,可以访问系统资源和执行特权指令。通过系统调用,用户态程序可以请求内核提供服务,并获取所需的结果。这就是Linux中系统调用的基本原理和代码处理流程。系统调用提供了用户态和内核态之间的接口,使得用户程序能够访问和利用系统资源,同时也保证了系统的安全性和稳定性。Linux中系统调用的原理涉及到用户态和内核态之间的切换以及参数传递。
2024-05-26 16:03:30
402
原创 linux kernel中的ingress hook简介
在Linux内核中,Ingress Hook是Netfilter框架中的一个钩子(Hook),用于对进入网络接口的数据包进行处理。它位于数据包接收的早期阶段,在数据包被路由或转发之前。
2024-05-20 10:32:12
780
原创 conntrack作用和原理
Conntrack(Connection Tracking)是Linux内核中的一个重要模块,它的主要作用是跟踪和维护网络连接的状态信息。Conntrack模块位于内核协议栈的网络层和传输层之间,对经过系统的所有网络数据包进行跟踪和记录。
2024-05-20 10:22:16
638
原创 路由器接收arp信息的处理流程
以上就是路由器接收ARP信息,从网卡开始到包处理结束的整个过程中,网卡、内存、CPU、内核协议栈等的详细处理流程。这个过程涉及了硬件和软件的协同工作,通过网卡接收、DMA传输、中断处理、驱动程序处理、协议栈处理等步骤,最终完成对ARP帧的接收和处理。
2024-05-20 10:08:11
582
原创 路由表基本原理说明
路由器将数据包的目的IP地址与路由表中的条目进行比较,找到具有最长匹配前缀的路由条目。如果存在与数据包特征匹配的自定义表(例如,基于源地址、目的地址、协议类型等),则路由器将在该表中查找匹配的路由条目。当数据包的目的地址不是本地接口地址时,路由器会在Main表中查找匹配的路由条目,确定数据包的下一跳。当在Main表中找不到匹配的路由条目时,数据包将根据Default表中的默认路由进行转发。如果在自定义表中也没有找到匹配的路由,路由器将使用Default表中的默认路由来转发数据包。
2024-05-17 14:49:26
460
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人