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

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

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

iputils

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

守护函数rdisc以及其他程序

net-tools

这是一组网络工具其中有著名ifconfig, route, netstats以及arp还有ipmaddr, iptunnel, ether-wakenetplugd

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分层另一种链路层协议L3IP以及L4TCP或者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.mzph.cn/news/772268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;总结如下。 数据在两个数…