![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux网络
文章平均质量分 96
Jacky~~
Learning Linux kernel!
展开
-
深入理解Linux网络技术内幕(一)——基础介绍
Hello,各位小伙伴们大家好。出于工作的需要以及对Linux的浓厚兴趣,决定从今天开始对这本数进行学习。写这个博客的目的也是记录自己的学习笔记和自己的学习心得,如果大各位小伙伴也有兴趣,欢迎一起学习和讨论。关于本书的前言以及介绍这里就不再赘述,直接进入本书的第一章。对于大型项目源码的研究,就像进入一个陌生新奇的领域,有其习惯和不能言表的期待。事先学习一些主要的约定,并尝试和几种组件互动而不是仅站在旁边观察,肯定会对你有所帮助。本章主要介绍一些在网络代码中经常遇到的通用编程模式和技巧。可能的话,希望原创 2022-12-08 10:55:47 · 2292 阅读 · 3 评论 -
深入理解Linux网络技术内幕(十三)——协议处理函数
协议是所有通信的架构:指示每位通信者如何理解通话的另一端。在Linux中,对通信的理解是通过网络中各层的协议处理函数。本篇说明这些处理函数如何安装、如何在执行期间被选中以及如何启用。原创 2022-12-14 13:59:13 · 2057 阅读 · 2 评论 -
深入理解Linux网络技术内幕(二)——关键数据结构
Linux网络代码中有些关键数据结构随处可见。在阅读本书以及直接研究源码时,必须了解这些数据结构里的字段。当然,逐一研究这些数据结构的字段比起解析函数更加乏味,但这是很重要的基础。传奇软件工程师Frederick P.Broooks曾说过:“给我看你的数据”本章介绍下列数据结构,同时说明操作这些数据结构的一些函数和宏。一个封包就存储在这里。所有网络分层都会使用这个结构来存储其报头、有关用户数据的信息(有效载荷),以及用来协调其工作的其他内部信息。原创 2022-09-24 17:33:16 · 1424 阅读 · 3 评论 -
深入理解Linux网络技术内幕(三)——用户空间与内核的接口
简要的介绍用户空间应用程序可用于与内核通信或读取内核输出信息的主要机制。不谈其实现细节,因为每种机制都需要一章才能说清楚。主要的目的在于给出足够的引导。通过本章你可以取得所需要的信息,了解给定目录如何添加到/proc及所在位置、处理给定ioctl命令的内核处理函数,以及目前用户空间网络配置最佳接口Netlink提供了哪些函数。本章所关注的机制,就是在谈到用户空间配置命令(如ifconfig和route)及内核处理函数(应用所请求的配置)两者的接口。下一部分将围绕系统初始化进行学习和分析。原创 2022-10-15 16:35:29 · 1043 阅读 · 0 评论 -
深入理解Linux网络技术内幕(四)——通知链
内核的很多子系统之间具有很强的相互依赖性,因此,其中一个子系统侦测到的或者产生的事件,其他子系统可能都有兴趣。为了实现这种交互需求,Linux使用了所谓的通知链(notification chain)通知链如何声明以及网络代码定义了哪些链(chain)内核子系统如何向通知链注册内核子系统如何在链上产生通知消息。注意,通知链只在内核子系统之间使用。内核和用户空间之间的通知信息则是依赖其他机制,如上一篇博客介绍(虚拟文件系统、系统调用等等)通知链列表元素的类型是};原创 2022-10-22 15:57:00 · 1626 阅读 · 0 评论 -
深入理解Linux网络技术内幕(五)——网络设备初始化
现代操作系统的适应性增加了初始化的复杂度。首先,设备驱动程序可以作为模块加载至内核,也可以作为内核的静态组件。此外,设备可以在引导期间就存在,也可以在运行期间插入(或删除):后一种类型的设备称为可热插拔设备,如USB、PCI CardBus、IEEE 1394以及其他。我们将会看到热插拔对内核和用户空间有什么影响。原创 2022-10-29 15:13:56 · 1178 阅读 · 0 评论 -
深入理解Linux网络技术内幕(六)——PCI层和网络接口卡
内核中的PCI子系统(也称PCI层)提供各种PCI设备驱动程序共同的所有通用功能。这个子系统让程序员减少了很多必须对各种设备所做的事,让驱动程序能以更简明的方式编写,使内核更易于收集和维护有关各种设备的信息,如描述信息和统计数据。原创 2022-11-04 10:50:54 · 1142 阅读 · 0 评论 -
深入理解Linux网络内幕(七)——组件初始化的内核基础架构
要完全了解内核组件,不但要知道给定的一组函数在做什么,还要知道这些函数何时被启用以及由谁启用。子系统的初始化就是内核根据其模型所处理的基本任务之一。这种基础架构值得研究,有助于了解网络协议栈的关键组件是如何初始化的(包括NIC设备驱动程序在内)。我们知道传给宏的函数都用诸如__initcall之类的宏标记。因为大多数内核组件可以编译成模块或与内核静态链接,而选择之后,会改变这些宏的定义,以应用前一节所介绍的内存最优化的工作。正如在所见的一样,会根据下列符号是否定义在包含。原创 2022-11-13 18:29:18 · 542 阅读 · 0 评论 -
深入理解Linux网络技术内幕(八)——设备注册和初始化
经过前面所学,我们已经知道内核如何验证NIC,以及内核所做的初始化,使得NIC得以和其他设备驱动程序对话。下面我们将讨论初始化的其他步骤:网络设备何时以及如何在内核注册网络设备如何利用网络设备数据库注册,并指派一个net_device结构的实例。net_device结构如何组织到hash表和列表,以便于做各种查询。net_device实例如何初始化,一部分由内核核心函数完成,一部分由其设备驱动程序完成。就注册而言,虚拟设备和真实设备有何差别。NIC可用之前,其相关联的net_device。原创 2022-11-18 14:58:06 · 1677 阅读 · 0 评论 -
深入理解Linux网络技术内幕(九)——中断和网络驱动程序
这一篇我们将按照一个个的功能或一个个的子系统分析如何实现网络,为什么要引入某些功能,以及当功能之间有意义时彼此之间是如何交互的进行分析。原创 2022-11-25 18:27:03 · 988 阅读 · 0 评论 -
深入理解Linux网络技术内幕(十)——帧的接收
前面一节我们知道了,处理L2层的帧的函数是由中断事件驱动的。下面我们将着手讨论帧的接收,此时,硬件会使用中断事件通知CPU,该帧已经可用了。接收中断事件的CPU会执行do_IRQ函数。IRQ编号会引发正确的处理函数被启用后。此处理函数通常是设备驱动程序在设备设备驱动程序初始化期间所注册的函数,IRQ函数处理例程会在中断模式下执行,即后续的中断事件都会暂时被关闭。中断处理函数会执行一些立即性的任务,然后把其他任务安排到下半部函数中以便在稍后执行。明确的将,中断处理函数会:把帧拷贝到sk_buff。原创 2022-11-30 15:02:10 · 978 阅读 · 0 评论 -
深入理解Linux网络技术内幕(十一)——帧的传输
“传输”这一术语用于离开系统的帧,也许是因为被系统传送出去,或者是因为被转发出去。本章我们讨论帧传输的数据通路中所涉及的主要任务:为设备开启和关闭帧的传输为设备调度以准备传输为下一帧调度以准备传输。也就是在设备出口队列中等待的那些帧。传输本身(我们将检查主要函数)传输过程和第十章所谈的接收过程大部分是对称的:传输软IRQ,与软IRQ配对,而与配对,诸如此类。因此,如果你已读过前一章,应该会发现这一章很容易理解。下图比较了调度设备以准备接收,以及调度设备以准备传输两者之间背后的逻辑。以下是一些相似性:是设备列原创 2022-12-07 13:10:43 · 1542 阅读 · 0 评论 -
深入理解Linux网络技术内幕(十二)——中断事件一般性参考数据
这篇博客的内容不是很多,主要是介绍几种一般性信息,适用于前面所讲涉及中断事件和帧的处理有关帧接收的统计数据保存在各个CPU数组中,其元素为类型(参见)的元素有前述有些计数器目前都由(由非NAPI驱动程序所用)更新,这表示使用NAPI驱动程序时,其值是不正确的。向量的内容可通过接口查看。其他统计数据则由驱动程序、较高层协议以及流量控制队列控制保存在私有数据结构中。这些值有些可以通过用户空间程序读取,如,其他则可通过输出。下表列出了所有在中的文件,都定义在,你可以找出文件与内核变量之间的关联性。需要强调的是,原创 2022-12-08 10:53:08 · 393 阅读 · 0 评论