linux内核网络分析 用户空间工具 “每日读书”

有多种不同的工具可以用于配置linux众多可用的网络功能,如本章开头所述,你可以通过使用这些工具对内核巧妙的处理,以便于学习以及发现做这样的修改后的影响。

下面是在本书中将会经常涉及的工具:

iputils

除了经常使用的ping命令外,iputils还包括arping(用于产生ARP请求),网络路由器发现

守护函数rdisc以及其他程序

net-tools

这是一组网络工具,其中有著名的ifconfig, route, netstats以及arp,还有ipmaddr, iptunnel, ether-wake和netplugd等。

IPROUTE2

这是新一代的网络配置套件,同一个多用途的命令ip,这个套件可以配置IP地址以及路由,

还有其他各种高级功能,如邻居协议等等。

IPROUTE2的源代码可以从http://linux-net.osdl.org/index.php/iproute2下载,而其他组件可以从大多数linux发行版本的下载服务器上下载。

大多数linux发行版中都默认包含这些组件,当你不了解内核代码如何处理来自用户空间的命令时,看看用户空间工具的源代码,以了解用户所下达的命令是如何打包并传给内核的。

在下列URL中,可以发现很好的文档,说明如何使用上述工具,包括邮件列表mailing list

如果想追踪网络代码的最新修改,可以关注下列邮件列表

linux网络开发论坛档案库

第二章 关键数据结构

linux网络代码中有些关键数据结构随处可见,本章介绍下列数据结构,同时说明操作这些数据结构的一些函数和宏。

struct sk_buff

一个封包就存储在这里,所有的网络分层都会使用这个结构来存储报头,有关用户数据的信息,以及用来协调其工作的其他内部信息。

struct net_device

在linux内核中每种网络设备都用这个数据结构表示,包括软硬件的配置信息,第八章详细描述了net_device数据结构分配的时机以及分配的方式。

linux网络所用的另一个关键数据结构是struct sock,用于存储套接字的网络信息,因为本书不涉及套接字,故本章没有吧sock包含在内。

套接字缓冲区:sk_buff结构。

这可能是linux网络代码中最重要的数据结构,代表已经接受或者政要传输的数据的包头,此结构定义在include/linux/skbuff.h 头文件中,巨大的变量堆组成,

在内核的进化历程中,这个结构多次变动,不断增加新选项,同时也重组了现存的字段,使得布局更为清晰,其字段可粗略划分为下列几种类型。

布局layout

通用General

功能专用 Feature-specific

管理函数

多个不同的网络分层MAC 或者L2分层上的另一种链路层协议,L3的IP以及L4的TCP或者UDP都会使用这个结构, 而且当该结构从一个分层传到另一个分层时,其不同的字段会随之发生变化,L4在传给L3之前会附加一个报头.而L3再传给L2之前又会加上一个自己的包头,附加包头比起把数据从一个分层拷贝到另一个分层更为高效,由于要在一个缓冲区开端新增空间--也就是要改变指向该缓冲区的变量,--是一种复杂的运算,内核提供了skb_reserve函数,来执行这一操作,所以,当缓冲区往下传经每个分层时,每层的协议首先要做的就是调用skb_reserve 函数,为该协议的包头预留空间,后续,数据预留和对齐,

skb_reserve,skb_put,skb_push以及skb_pull 中国呢,我们会看到的一个实例,说明缓冲区穿越每个分层时,内核如何确保缓冲区头部有足够的空间预留下来,允许每个分层都能加

上自己的包头。

当缓冲区网上经传每个网络分层时,每个源自于旧分层的包头就不再有用处,例如,L2包头只由处理L2协议的设备驱动程序使用,所以对L3而言并无用处,不过,并没有把L2的包头从缓冲区中删除,而是把志向有效载荷开端的指针向前移动到L3包头的开端。这样只需要很少的CPU周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/news/772268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何解决kafka rebalance导致的暂时性不能消费数据问题

文章目录 背景思考答案排它故障转移共享 背景 之前在review同组其它业务的时候,发现竟然把kafka去掉了,问了下原因,有一个单独的服务,我们可以把它称为agent,就是这个服务是动态扩缩容的,会采集一些指标&a…

Windows CMD命令大全(快速上手)

基础概念 在windows操作系统里进的DOS(即输入 winr CMD 进命令提示符)不是纯DOS,只是为方便某些需求而建立的, 而纯DOS本身就是一种操作系统.(两者的区别:比如你可以在纯DOS下删除你的 windows系统, 但在你所说的"命令提示符"里却不能,因为你不可能"在房子里面…

探索 Linux 系统信息工具:uname

在 Linux 系统中,uname 是一个非常实用的命令行工具,用于获取和打印系统特定的基本信息。本文将通过展示 uname 的用法及输出示例,帮助你更好地理解和掌握这一工具。 uname 命令简介 uname 工具提供了多种选项来显示不同的系统信息。当你在…

使用C++实现一个简单的日志功能

日志对于一些大一些的项目来说,可以在项目运行出现问题时更好的帮助 项目的维护人员快速的定位到问题出现的地方并且知道出现问题的原因, 并且日志也可以帮助程序员很好的进行项目的Debug,那么今天我就来实 现一个C编写的一个简单的日志功能。…

深度学习中常用计算距离的几种算法对比与python实现

前言 距离度量在许多机器学习算法中扮演着至关重要的角色,无论是监督学习还是无监督学习。选择适当的距离度量可以显著影响模型的性能。 在高维数据集中,欧几里得距离可能会受到所谓的“维度诅咒”的影响,因为随着维度的增加,数…

海外媒体软文发稿:谷歌关键词优化细分人群成功案例,突破海外市场!

海外媒体软文发稿:谷歌关键词优化细分人群成功案例,突破海外市场! 引言 在全球化的时代,海外市场对于企业的发展至关重要。而在海外市场中,互联网媒体的作用不可忽视。本篇教程将介绍如何通过谷歌关键词优化细分人群…

Java内存模型简述

Java内存模型,也称JMM,定义了共享内存中多线程程序之间读写数据操作的规范。用于规范内存读写操作。 JMM把内存分为两块: 私有线程的工作区域(工作内存)所有线程的共享区域(主内存) 线程和线程…

Spring设计模式-实战篇之单例模式

实现案例,饿汉式 Double-Check机制 synchronized锁 /*** 以饿汉式为例* 使用Double-Check保证线程安全*/ public class Singleton {// 使用volatile保证多线程同一属性的可见性和指令重排序private static volatile Singleton instance;public static Singleton …

js的变量

一、JavaScript的变量分类。js内存为堆或栈 1、基本数据类型变量 a.number 整型 b.string 字符串类型 c.Boolean 布尔值类型 d.null 空 e.undefined 未定义类型 PS:基本数据类型存放在栈中 2、引用数据类型变量 object 对象 array 数组 function 函数 PS&#xf…

【揭秘C语言】零基础也能懂!一篇文章带你掌握C语言指针核心知识点

C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程…

使用 python 拆分 excel 文件

文章目录 1、安装环境2、脚本 split.sh3、运行脚本 1、安装环境 brew install python3 python3 -m venv my_pandas_venv source my_pandas_venv/bin/activate pip install pandas2、脚本 split.sh #!/bin/bash# 检查 Python3 和 pandas 库是否已安装 if ! command -v python3…

Learn OpenGL 30 SSAO

SSAO 我们已经在前面的基础教程中简单介绍到了这部分内容:环境光照(Ambient Lighting)。环境光照是我们加入场景总体光照中的一个固定光照常量,它被用来模拟光的散射(Scattering)。在现实中,光线会以任意方向散射,它的强度是会一…

OpenCV基础demo

一、读取图像 //图片路径QString appPath = QCoreApplication::applicationDirPath();QString imagePath = appPath + "/sun.png";//读取图像cv::Mat img = cv::imread(imagePath.toStdString()); //IMREAD_GRAYSCALE 灰度图 IMREAD_UNCHANGED 具有透明通道if (img.e…

C++ STL - 优先级队列及其模拟实现

目录 0. 引言 1. priority_queue 介绍 1.1 构造函数 1.2 priority_queue 接口函数使用 1.3 仿函数 1.4 题目练习 2. priority_queue 模拟实现 2.1基本框架: 2.2 默认构造函数 2.3 基本函数 2.4 堆的向上以及向下调整 0. 引言 优先队列 (priority_queu…

【剑指offr--C/C++】JZ22 链表中倒数最后k个结点

一、题目 二、思路及代码 遍历链表并存入vector容器&#xff0c;通过下标取出对应位置元素或者返回空 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <cstddef> #include <iterator> #…

【微服务】接口幂等性常用解决方案

一、前言 在微服务开发中&#xff0c;接口幂等性问题是一个常见却容易被忽视的问题&#xff0c;同时对于微服务架构设计来讲&#xff0c;好的幂等性设计方案可以让程序更好的应对一些高并发场景下的数据一致性问题。 二、幂等性介绍 2.1 什么是幂等性 通常我们说的幂等性&…

【Entity Framework】 EF三种开发模式

【Entity Framework】 EF三种开发模式 文章目录 【Entity Framework】 EF三种开发模式一、概述二、DataBase First2.1 DataBase First简介2.2 DataBase First应用步骤2.3 DataBase First总结 三、Model First3.1 Model First简介3.2 Model First实现步骤 四、Code First4.1 Cod…

全市场都忽视了!大摩:数据中心算力成本正在迅速下降

随着AI技术迈入普及与应用的新纪元&#xff0c;其算力需求蓬勃增长的同时&#xff0c;算力成本随技术进步呈现下降趋势。 摩根士丹利在3月24日的AI报告中指出&#xff0c;随着GPU技术的不断进步&#xff0c;例如英伟达从Hopper发展到Blackwell GPU架构&#xff0c;GAI的算力成…

怎么做到高效阅读、高效输出?

每一位得到的用户都是终身学习者&#xff0c;你一定对读书这件事不陌生。但是&#xff0c;并不是每个人都清楚&#xff0c;应该用什么标准选书&#xff0c;又怎么把一本书变成自己的精神资产。而这件事&#xff0c;陈章鱼特别擅长。 今天&#xff0c;我和陈章鱼一起挑选了4个有…

ChatGPT 对 ELT的理解

本文主要内容来自 ChatGPT 4.0 到底什么是 ETL&#xff1f;在数据库内部&#xff0c;把数据从 ODS 层加工成 DWD&#xff0c;再加工成 DWS&#xff0c;这个过程和 ETL 的关系是什么&#xff1f;带着这些问题&#xff0c;我问了一下 ChatGPT&#xff0c;总结如下。 数据在两个数…