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周期。

相关推荐
qq_401700414 分钟前
嵌入式用Unix时间的优势及其C语言转换
服务器·c语言·unix
xu_yule2 小时前
Linux_12(进程信号)内核态和用户态+处理信号+不可重入函数+volatile
linux·运维·服务器
虾..3 小时前
Linux 环境变量&&进程优先级
linux·运维·服务器
i***t9193 小时前
Linux下MySQL的简单使用
linux·mysql·adb
偶像你挑的噻3 小时前
11-Linux驱动开发-I2C子系统–mpu6050简单数据透传驱动
linux·驱动开发·stm32·嵌入式硬件
稚辉君.MCA_P8_Java3 小时前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
数据库学啊4 小时前
团队小希望运维简单,时序数据库选型有什么推荐?
运维·数据库·时序数据库
霍格沃兹软件测试开发5 小时前
Playwright MCP浏览器自动化指南:让AI精准理解你的命令
运维·人工智能·自动化
郝学胜-神的一滴5 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
宾有为5 小时前
【Linux】Linux 常用指令
linux·服务器·ssh