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

相关推荐
挥剑决浮云 -15 分钟前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
立秋678938 分钟前
Python的defaultdict详解
服务器·windows·python
Lansonli1 小时前
云原生(四十一) | 阿里云ECS服务器介绍
服务器·阿里云·云原生
小O_好好学1 小时前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥2 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
john_hjy2 小时前
11. 异步编程
运维·服务器·javascript
x晕x2 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器
活跃的煤矿打工人2 小时前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
tangdou3690986553 小时前
两种方案手把手教你多种服务器使用tinyproxy搭建http代理
运维·后端·自动化运维
北京智和信通3 小时前
云平台和虚拟化智慧运维监控,全面提升故障感知与处置能力
运维·虚拟化·云平台·虚拟机监控