最近要给团队做一个长期的内部分享,主题就是Linux内核中数据包的处理流程。 这几天抽空画了一部分流程图。...我本人对网卡驱动兴趣不大,但skb path又无法脱离网卡驱动,这里选择了Intel的e1000网卡驱动:原因有二,一是Intel网卡驱动是内核里面写得最清楚,可读性最高的;二是e1000是Intel里面比较简单的驱动
认识 Linux, 了解 Linux 的相关背景 1.发展史 学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。...严格来讲,Linux只是操作系统内 核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它 包括GUI组件和许多其他实用工具。...随着Linux操作系统飞速发展,各种集成 在Linux上的开源软件和实用工具也得到了应用和普及,因此,Linux也成为了开源软件的代名词。...国内如中标麒麟Linux、红旗 Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得 到了广泛应用。...Linux来实现,而这一切均归功与Linux与开源的力量。
在linux系统中,有一些特殊程序,启动后就会持续在后台执行,等待用户或者其他软件调用使用,这种程序我们称为服务。...linux系统中服务的管理工具 systemV systemd 一、systemV与init systemV,systemV当中有一个叫init的程序,这个程序可以让系统中的service命令去调用/etc...servername on/off 指定一个服务在哪个运行级别启动 chkconfig --list servername 查看一个服务在哪些运行级别启动 分类 按照功能分类 系统服务:这些服务的服务对象是linux...系统本身,或者linux系统的用户 网络服务:网络服务的服务对象是网络中的其他客户端 按照启动方法分类 独立系统服务:这类服务一经启动,除非系统关闭或者管理者手动结束,否则会一直在后台执行,不管是否用到...而这些服务就需要用户手动去处理 运行级别分类 init会根据用户指定的运行级别,来启动不同的服务,在linux系统中包含了0-6,一共7个运行级别 0 关机 1 单用户 2 无网络的多用户
Eth1在通过网线连接到以太网交换机的同时也被则加入了Linux Bridge,这相当于用一条网线将Linux Bridge上的一个端口(Eth1)连接到了本地站点的以太网交换机上,Eth1上收到的所有数据包都会被发送到...Linux Bridge上,Linux Bridge发给Eth1的数据包也会被发送到以太网交换机上。...Linux Bridge上还有一个Tap虚拟网卡,用于V**程序接收从Linux Bridge上收到的数据包。...由于Eth1被加入了V**主机上的Linux Bridge,因此Linux Bridge收到该ARP请求。 Linux Bridge对该ARP请求进行泛洪,发送到连到其上面的Tap虚拟网卡上。...这两个Linux Bridge和两个以太网交换机一起将左右两个站点的主机连接在一起,形成了一个局域网。
Linux是什么?Linux是一个操作系统。操作系统是管理和控制计算机硬件与软件资源的计算机程序,其他软件都在操作系统的支持下运行。...更加准确一点,Linux是一个操作系统的内核,Linux核心和很多软件一起构成一个完整的操作系统。Windows 10 和 MAC OS X 都是操作系统。在Linux诞生之前,不得不提Unix。...1991年的10月5日,linus在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生。可以到Linux Kernel了解更多消息。
这个指令输入之后,按下neter键之后这个就需要我们输入这个root账号的密码,输入之后就可以切换到root账户; (2)在root账户里面,我们使用ctrl+D命令去切换回去普通账户; 2.权限 (1)权限介绍...我们在日常的生活里面讲的权限指的就是这个某一个人是否可以做某一件事情,可以做这件事情我们就说这个人具有做这件事情的权限,反之我们称这个人没有这个权限; (2)文件类型 在linux里面,权限是和事物的属性相关的...,像我们之前介绍的文件的属性,被划分为文件的可读性,可写性,文件的可执行性,我们使用这个ll指令显示的内容就是这个文件的相关属性,第一个字母有很多种类型,我们上面的这个图片里面显示的就是d和短杠-,其中这个...开头的表示这个磁盘文件,也叫做块设备文件,c表示字符设备文件,例如我们经常说的键盘,以及相关的显示器文件等等,p表示的就是用来实施通信功能的管道文件; (3)权限组成 权限划分为这个角色和对应的属性,我们上面已经介绍过这个
在 上一篇文章 中,我们介绍了网卡接收和发过数据在 Linux 内核中的处理过程,我们先来回顾一下网卡接收和发送数据的过程,如 图1 所示: ?...为了避免这种情况出现,Linux 内核把中断处理分为:中断上半部 和 中断下半部,上半部在关闭中断的情况下进行,而下半部在打开中断的情况下进行。...一般来说,网卡驱动向内核注册的中断处理服务属于 中断上半部,如前面介绍的 NS8390网卡驱动 注册的 ei_interrupt 中断处理服务,而本文主要分析网卡 中断下半部 的处理。...数据包上送 在上一篇文章中,我们介绍过 ei_interrupt 中断处理服务首先会创建一个 sk_buff 数据包对象保存从网卡中接收到的数据,然后调用 netif_rx 函数将数据包上送给网络协议栈处理...对于 Linux 内核的中断处理机制可以参考我们之前的文章 Linux中断处理,这里就不详细介绍了。在本文中,我们只需要知道网络中断下半部处理例程为 net_rx_action 函数即可。
我们貌似就只有用 eBPF/SystemTap 配合 kprobe 的一条路可以走了 基础的 trace Kprobe 在继续下面的代码实际操作之前,我们首先要来认识一下 Kprobe 先引用一段官方文档的介绍...OK,Hook 点确认后,在开始正式编码前,我们来大概介绍下 ip_finish_output ip_finish_output 首先来看下这个函数 static int ip_finish_output...在这三个参数中,我们主要来将视线放在 struct sk_buff *skb 上。 熟悉 Linux Kernel 协议栈实现的同学肯定对 sk_buff 这个数据结构非常非常熟悉了。...sk_buff 的一些指针的操作,我们就能很方便的获取到其中不同 layer 的 header 和具体的 payload OK,现在让我们正式的来开始实现我们所需要的功能 eBPF + KProbe 首先简单介绍下...这也是名字中 e 的来历(extend) 本质上而言,eBPF 在内核维护了一层 VM,可以加载特定规则生成的代码,让内核变得更具有可编程性(后面我争取写一篇 eBPF 从入门到入土的介绍文章) Tips
前言我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。...与其它的跟踪技术相比,使用BPF的主要优点是几乎可以访问Linux内核和应用程序的任何信息,同时,BPF对系统性能影响很小,执行效率很高,而且开发人员不需要因为收集数据而修改程序。...本文将介绍保证BPF程序安全的BPF验证器,然后以BPF程序的工具集BCC为例,介绍常见BPF程序,具体为kprobes和tracepoints类型的BPF程序的使用及程序编写示例。2....print_functionfrom bcc import BPFfrom time import sleep# define BPF programbpf_program = """#include linux...总结本文主要介绍了保证BPF程序安全的BPF验证器,然后以BPF程序的工具集BCC为例,分享了kprobes和tracepoints类型的BPF程序的使用及程序编写示例。
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect
不同类型的Linux系统对各日志存放路径及文件名页不尽相同,对于ubuntu和Centos系统默认将生成的日志保存在“/var/log”目录。...如表下所示为Linux系统的默认日志类型及其存放信息如下所示: 系统默认日志类型 /var/log/messages 记录Linux内核消息及各种应用程序的公共日志信息 /var/log/cron 记录...crond 计划任务产生的事件信息 var/log/dmesg 记录 Linux 操作系统在引导过程中的各种事件信息 /var/log/lastlog 记录每个用户最近的登录事件 /var/log/secure
The use of a Linux virtual file system (vfs) to represent the cgroup hierarchy provides for a familiar...(via task_lock()) - inside an rcu_read_lock() section via rcu_dereference() 3.3 子系统API 每个子系统应该: - 在linux
1、安装 很简单,直接 sudo yum install -y git 2、版本控制 故事介绍:你是一个大学生,你上课需要交一分实验报告,教你的老师比较负责,所以说,每次的实验报告他都会看的很仔细,非常的认真看你的报告...但是由于之前做的比较粗糙,没有图形化的界面直接就是Linux上的需要命令行的格式来操作,你想了一想决定了,最后还是做一个相对图形化一点的效果,这样的话看起来还会方便一点—>建设网站,所有的当前用户的文档...我们把我们的仓库下拉到自己的Linux的机器中之后,能够看见目录中的内容。 其中有一个隐藏目录 .git 想要实现把本地的文件上传到仓库之中的话,首先要cp目标文件到指定的目录之中。...然后再使用git commit -m “(添加你需要写的介绍)” 这样的话就能够正常的提交了。...commit后面一定要添加 -m,并且介绍内容要认真的写,既方便自己,也方便别人 但是远端的仓库中还没有更新,还差几步。
tcpdump 是 Linux 系统提供一个非常强大的抓包工具,熟练使用它,对我们排查网络问题非常有用。...tcpdump 常用的选项有: -i 指定要捕获的目标网卡名,网卡名可以使用前面章节中介绍的 ifconfig 命令获得;如果要抓所有网卡的上的包,可以使用 any 关键字。
Linux 中的 xargs 命令是一个非常有用的命令行工具,可以将一些参数集合传递给其他命令作为参数,并利用指定的命令进行处理。...总结 xargs 命令是Linux中非常有用的一个命令,它可以帮助我们批量处理文件或者其他任务。在使用的时候,需要注意文件名中可能包含的特殊字符,以及被传递的命令是否支持多个参数的情况。
1.linux安装软件 1.1源代码安装:这个里面可能根据代码bug需要修改的情况,不推荐使用; 1.2rpm安装:不同的安装包之间存在依赖关系,很容易出错; 1.3yum安装:解决安装源,安装版本,安装依赖相关的问题...; 在linux里面,这个软件包和软件包管理器就相当于这个手机上面的应用商店,yum就是一个linux里面一款很常用的包管理器; 3.linux软件包管理器yum 3.1在linux下面安装软件,一个经常使用的方法就是下载程序的源代码...但是这样搞显得很麻烦,于是就有人把这个常用的一些软件编译好,做成一个软件包,放到这个云服务器上面去,通过包管理器就可很容易获得这个编译好的软件包,并且直接进行安装; 3.3软件包和软件包管理器,就类似于我们上面介绍的这个手机上面的...app和应用市场之间的关系 3.4yum就是linux上面一种很常用的包管理器,应用于centos等发行版本上面; 3.5认识一下这个rzsz 这个工具应用于linux机器和远端的linux机器通过xshell...下面的这个就是运行的情况显示: 4.3人物说话情景 使用的指令就是yun install -y cowsay进行这个软件安装,之后输入 cowsay ""这个引号里面的内容就会显示在这个最后的结果里面去; 5.vim简单介绍
linux目录结构介绍 "/" :Linux文件系统的入口.也是最高一级的目录...."/root":Linux超级权限用户root的跟目录. "/sbin":基本的系统维护命令,只能由超级用户使用. "/srv":存放一些服务器启动之后需要提取的数据.
基本介绍 第三类是标准的网络接口Linux设备,本章介绍的内核,其余的交互网络接口描述 网络接口,必须使用特定的内核数据结构本身注册,与外部分组交换数据线打电话时准备 经常使用的文件上的网络接口操作是没有意义的...>) FDDI设备使用alloc_fddidev(linux/fddidevice.h>) 令牌环设备使用alloc_trdev(linux/trdevice.h>) register_netdev...该结构定义在linux/skbuff.h>中 传递经全hard_start_xmit的套接字缓冲区包括了物理数据包,并拥有完整的传输层数据包头 该传输函数仅仅运行了对数据包的一致性检查。...dev_kfree_skb_any(struct sk_buff *skb); 不使用接收中断 为了能提高Linux在宽带系统上的性能。...sk_buff *skb); void dev_kfree_skb(struct sk_buff *skb); void dev_kfree_skb_irq(struct sk_buff *skb);
1.Linux的发展史 Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特...2.1 Linux之父 Linux的诞生显得充满了偶然。...国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。...、openSUSE、Gentoo、Linux Mint、Scientific Linux和Oracle Linux等。...以下是部分发行版本的详细介绍: Ubuntu。以其用户友好性和易用性著称,适合Linux新手,提供了强大的社区支持和广泛的软件包。 Red Hat Enterprise Linux(RHEL)。
Linux磁盘-分区介绍 Linux磁盘涉及到的命令不是很多,但是在实际运维中的作用却很大,因为Linux系统及业务都会承载到硬盘上。...主要从以下几个方面来介绍: 1.分区介绍(本章节) 2.创建分区 3.MBR&GPT 4.格式化&挂载 5.inode&硬连接 6.磁盘操作命令 7.小结 在Windows...但是在Linux里面磁盘作为一种核心的资源,我们必须要对他足够了解才行。 在前面的Linux目录介绍里面我们说过/dev目录就是硬件目录,如果服务器里面有硬盘,当然也就在这里形成一个类似的目录。...然后把一个磁盘/dev/sda分成一个或者多个分区,然后分别挂载到不同的目录下,这个分区如果挂载到Linux目录上面,就基本等效于Windows的盘符,只是Windows的盘符是C盘,D盘,而Linux...sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part / sr0 11:0 1 942M 0 rom 介绍
领取专属 10元无门槛券
手把手带您无忧上云