linux内核
文章平均质量分 92
网络安全研发随想
这个作者很懒,什么都没留下…
展开
-
Linux系统安全
在 Linux 中,用户层的所有操作,都可以抽象为“主体 -> 请求 -> 客体”这么一个流程。在这个过程中,Linux 内核安全提供了基于权限的访问控制,确保数据不被其他操作获取。原创 2021-11-05 15:47:15 · 6595 阅读 · 0 评论 -
linux内核数据结构实现--链表、队列和哈希
C是面向过程的语言,但是linux内核却用C实现了一套面向对象的设计模式,linux内核中处处体现着面向对象的思想。原创 2021-01-09 22:18:44 · 892 阅读 · 0 评论 -
方便好用的在线CPU性能调优工具--perf的常见用法
perf 是 Linux 2.6.31 以后内置的性能分析工具。它是一款综合性分析工具,以性能事件采样为基础,可以分析从内核级别,到进程线程级别,甚至到函数及汇编级别的性能问题。原创 2020-12-24 18:22:43 · 792 阅读 · 1 评论 -
linux内存管理总结
内存管理可以分为三个层次,自底向上分别是:操作系统内核的内存管理用户空间lib库的内存管理算法应用程序从lib库申请内存后,根据应用程序本身的程序特性进行优化, 比如使用引用计数std::shared_ptr,内存池方式等等。1. 用户空间内存管理目前大部分用户控件程序使用glibc提供的malloc/free系列函数,而glibc使用的ptmalloc2在性能上远远弱后于google的tcmalloc和facebook的jemalloc。 而且后两者只需要使用LD_PRELOAD环境变量启.原创 2020-11-16 23:21:24 · 346 阅读 · 0 评论 -
DMA流程简介--CPU/内存/网卡之间的交互
1. 收包CPU填充缓冲地址到接收侧描述符。网卡读取接收侧描述符获取缓冲区地址。网卡将包的内容写到缓冲区地址处。网卡回写接收侧描述符更新状态(确认包内容已写完)。CPU读取接收侧描述符以确定包接收完毕。2. 发包CPU读发送侧描述符,检查是否有发送完成标志。CPU将准备发送的缓冲区地址填充到发送侧描述符。网卡读取发送侧描述符中地址。网卡根据描述符中地址,读取缓冲区中数据内容。网卡写发送侧描述符,更新发送已完成标记。...原创 2020-11-11 18:24:07 · 2919 阅读 · 0 评论 -
iptables总结--理解四表五链/snat/dnat/redirect/synproxy/性能
1. iptables四表五链四表五链:链就是位置:共有五个 进路由(PREROUTING)、进系统(INPUT) 、转发(FORWARD)、出系统(OUTPUT)、出路由(POSTROUTING);表就是存储的规则;数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行、丢弃、转发还是修改等等操作。1.1 四表filter表——过滤数据包Nat表——用于网络地址转换(IP、端口)Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOSRaw表——决定数据包是否原创 2020-11-04 14:38:37 · 3580 阅读 · 1 评论 -
TCP协议参数优化
TCP 协议是由操作系统实现的,调整 TCP 必须通过操作系统提供的接口和工具。这就需要理解 Linux 是怎样把三次握手中的状态暴露给我们,以及通过哪些工具可以找到优化依据,并通过哪些接口修改参数。1. TCP 三次握手和优化参数1.1 tcp_syn_retries(syn重传)三次握手建立连接的首要目的是同步序列号。只有同步了序列号才有可靠的传输,TCP 协议的许多特性都是依赖序列号实现的,比如流量控制、消息丢失后的重发等等,这也是三次握手中的报文被称为 SYN 的原因。三次握手虽然由操作系原创 2020-07-12 19:15:23 · 3661 阅读 · 0 评论 -
linux中的TC(TrafficControl)详细说明
1. qdisc(排队规则)、class(类别)和filter(过滤器)Linux操作系统中的流量控制器TC(TrafficControl)用于Linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。qdisc通过队列将数据包缓存起来,用来控制网络收发的速度class用来表示分类策略filter用来将数据包划分到具体的分类中1.1 队列TC模块实现流量控制功能使用的队列规定分为两类:一类是无类队列规定无类队列对进入网络设备原创 2020-06-11 16:04:47 · 5713 阅读 · 0 评论 -
Linux内核套接字(Socket)的设计与实现
套接字是UNIX兼容系统的一大特色,是UNIX一切皆是文件操作概念的具体实现。Linux在此基础上实现了内核套接字与应用程序套接字接口,在用户地址空间与内核地址空间之间提供了一套标准接口,实现应用套接字库函数与内核功能之间的一一对应。1. 套接字和管理套接字的数据结构在Linux中定义了一系列的数据结构来描述套接字本身、套接字传送的数据格式、套接字的属性和管理套接字连接状态的数据结构。管...原创 2020-04-26 18:31:46 · 1774 阅读 · 0 评论 -
linux内核对TCP的连接状态管理
TCP协议实例连接状态存放在struct sock数据结构的state数据域中。当TCP协议实例连接处于不同状态时,对数据包的处理不一样,所以每个输入的数据包都要来查询TCP状态机,整个状态机制划分成3个阶段:第一阶段:连接建立阶段。第二阶段:数据传送阶段。第三阶段:断开连接阶段。1. TCP建立连接(tcp_v4_connect)tcp_v4_connect 函数将初始化一个对外...原创 2020-04-26 13:07:19 · 2268 阅读 · 0 评论 -
Linux内核中TCP协议实现的关键数据结构
1. TCP协议头tcphdrTCP协议头描述了TCP数据段发送的源地址、目标地址、数据段传送管理和连接管理的信息,是TCP协议实现的重要数据结构之一。struct tcphdr { __be16 source; __be16 dest; __be32 seq; __be32 ack_seq;#if defined(__LITTLE_ENDIAN_BITFIELD) __u16 r...原创 2020-04-26 10:58:54 · 1023 阅读 · 0 评论 -
linux内核中TCP接收的实现
linux内核中TCP接收的实现入口函数是tcp_v4_rcv1. 数据包检查处理一开始做一些数据包详细检查处理,一旦出错,可能导致内核挂掉int tcp_v4_rcv(struct sk_buff *skb){ const struct iphdr *iph; struct tcphdr *th; struct sock *sk; int ret; struct net *ne...原创 2020-04-24 18:29:28 · 1216 阅读 · 0 评论 -
linux内核中TCP发送的实现
1. 初始化static int __init inet_init(void){ /*...*/ /* Register the socket-side information for inet_create. */ for (r = &inetsw[0]; r < &inetsw[SOCK_MAX]; ++r) INIT_LIST_HEAD(r); for ...原创 2020-04-24 17:27:41 · 2053 阅读 · 0 评论 -
ebpf深入理解和应用介绍
1. ebpf概述1.1 ebpf发展历史BPF,及伯克利包过滤器Berkeley Packet Filter,最初构想提出于 1992 年,其目的是为了提供一种过滤包的方法,并且要避免从内核空间到用户空间的无用的数据包复制行为。它最初是由从用户空间注入到内核的一个简单的字节码构成,它在那个位置利用一个校验器进行检查 —— 以避免内核崩溃或者安全问题 —— 并附着到一个套接字上,接着在每个接...原创 2020-04-07 16:35:01 · 23325 阅读 · 0 评论 -
linux报文高速捕获技术对比--napi/libpcap/afpacket/pfring/dpdk/xdp
1. 传统linux网络协议栈流程和性能分析Linux网络协议栈是处理网络数据包的典型系统,它包含了从物理层直到应用层的全过程。数据包到达网卡设备。网卡设备依据配置进行DMA操作。(第1次拷贝:网卡寄存器->内核为网卡分配的缓冲区ring buffer)网卡发送中断,唤醒处理器。驱动软件从ring buffer中读取,填充内核skbuff结构(第2次拷贝:内核网卡缓冲区ring...原创 2019-11-19 16:54:52 · 12944 阅读 · 8 评论 -
linux 内核同步--理解原子操作、自旋锁、信号量(可睡眠)、读写锁、RCU锁、PER_CPU变量、内存屏障
内核同步内核中可能造成并发的原因:中断–中断几乎可以在任何时刻异步发生,也就可以随时打断当前正在执行的代码。软中断和tasklet–内核能在任何时刻唤醒或调度软中断和tasklet,打断当前正在执行的代码。内核抢占–因为内核具有抢占性,所以内核中的任务可能会被另一任务抢占。SMP–在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。因此内核其实象多进...原创 2018-12-27 15:08:22 · 990 阅读 · 0 评论 -
linux进程和线程理解
Linux进程类别虽然我们在区分Linux进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_struct,当然我也想说linux其实也没有线程的概念, 只是将那些与其他进程共享资源的进程称之为线程。一个进程由于其运行空间的不同, 从而有内核线程和用户进程的区分, 内核线程运行在内核空间, 之所以称之为线程是因为它没有虚拟地址空间, 只能访问内核的代码和数据, 而用户进程...原创 2018-12-27 15:44:27 · 870 阅读 · 0 评论 -
linux启动流程——initrd和initramfs
Linux内核启动当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码。在个人计算机(PC)中,这个位置在基本输入/输出系统(BIOS)中,它保存在主板上的闪存中。嵌入式系统中的中央处理单元(CPU)会调用这个重置向量来启动一个位于闪存/ROM中的已知地址处的程序。在这两种情况下,结果都是相同的。因为 PC提供了很多灵活性,BIOS必须确定要使用哪个设备来引导系统。稍后...原创 2019-01-02 16:56:45 · 7113 阅读 · 0 评论 -
kvm架构详解--理解CPU、内存、IO虚拟化技术、处理器硬件支持
1. 简介当前的主流虚拟化实现技术分为两种:VMM(虚拟化监控器)运行在硬件平台上,控制所有硬件并管理guest os。guest os运行在比VMM更高的级别。例如xen。VMM运行在宿主操作系统上,宿主操作系统作为第一软件层,VMM作为第二软件层,guest os作为第三软件层。例如kvm和virtual box。kvmKVM是集成到Linux内核的Hypervisor,是X86架...原创 2019-02-24 22:30:45 · 9718 阅读 · 1 评论 -
FreeBSD内核简介
FreeBSD内核可以被看做是一种服务器,它向用户进程提供服务。进程通过系统调用访问这些服务。其中有些服务,比如进程调度和内存管理,采用内核态执行的进程,或者内核里定期执行的例程这样的形式来实现。内核进程和用户进程内核进程只在内核中发挥作用,执行内核镜像的代码,以内核特权模式执行。内核还为每台设备启动一个内核进程,负责处理该设备的中断。常见内核进程idle 在系统没有其它要执行的任务时运行...翻译 2019-03-01 18:28:14 · 2635 阅读 · 0 评论 -
linux内核网络子系统收发过程剖析
整体流程接收流程中断vs软中断驱动和网卡接收缓冲区发送流程驱动和网卡发送缓冲区参考:http://blog.jobbole.com/86656/https://github.com/run/kernel-tcp/blob/master/pdf资料/网络子系统在链路层的收发过程剖析.pdf...原创 2019-02-27 11:24:33 · 507 阅读 · 0 评论 -
Linux内核调试原理和工具介绍--理解静态插装/动态插装、tracepoint、ftrace、kprobe、SystemTap、Perf、eBPF
可以将linux跟踪系统分成Tracer(跟踪数据来自哪里),数据手机分析(如"ftrace")和跟踪前端(更方便的用户态工具)。1. 数据源(Tracers)printk 是一种方法, 但是 printk 终归是毫无选择地全量输出, 某些场景下不实用。Tracepoint属于静态插装, 是散落在内核源代码中的一些 hook,一旦使能,它们便可以在特定的代码被运行到时被触发。比如Ftrace...原创 2019-04-28 17:58:38 · 5120 阅读 · 0 评论 -
linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图
1. 基本概念我们都知道,磁盘是存储文件用的,但是磁盘必须先格式化为某种格式的文件系统,才能存储文件。文件系统的目的就是组织和管理磁盘中的文件。上图展示了在ext2文件系统下,磁盘的存储空间是如何被组织的。为了理解上图,我们先了解一些基本概念。1.1 块(block)磁盘中最小存储单元是扇区(1扇区=512Bytes),而文件系统的最小存储单元是Block(一般地,1Block = ...原创 2019-09-01 11:44:03 · 2540 阅读 · 0 评论 -
linux内核--设备驱动程序(学习笔记)
字符设备驱动一个字符设备要能够工作,需要三部分配合:有一个设备驱动程序的ko模块,包含中断处理函数、设备操作函数。模块初始化时,将设备号注册到内核的全局数据结构cdev_map中。/dev目录下有一个文件表示该设备,这个文件在特殊的devtmpfs文件系统上,有相应的dentry和inode。inode中有设备号,通过设备号可以在cdev_map中找到设备驱动程序。用户可以打开一个字符...原创 2019-09-09 11:23:33 · 363 阅读 · 0 评论 -
linux中断机制--理解中断上半部/下半部、软中断、tasklet、工作队列(可调度、可睡眠)
中断Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。如果要管理这些设备,首先得和它们互相通信才行,一般有两种方案可实现这种功能:中断(interrupt) 让硬件在需要的时候向内核发出信号(变内核主动为硬件主动)。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点是数据量大时,会产生过多中断,而每个中断都要消耗不少的CPU时间,从而导致...原创 2018-12-27 14:41:42 · 2655 阅读 · 0 评论