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

相关推荐

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

    2024-03-27 03:24:03       45 阅读
  2. linux内核网络每日读书

    2024-03-27 03:24:03       45 阅读
  3. linux内核网络揭秘《二》“每日读书

    2024-03-27 03:24:03       46 阅读
  4. linux 内核网络源码--流量管理“每日读书

    2024-03-27 03:24:03       31 阅读
  5. linux内核网络源码-用户空间内核的接口

    2024-03-27 03:24:03       44 阅读
  6. 【讯为Linux驱动开发】3.内核空间用户空间

    2024-03-27 03:24:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 03:24:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 03:24:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 03:24:03       87 阅读
  4. Python语言-面向对象

    2024-03-27 03:24:03       96 阅读

热门阅读

  1. C/C++ 设置Socket的IP_TOS选项

    2024-03-27 03:24:03       40 阅读
  2. LeetCode 93. 复原 IP 地址

    2024-03-27 03:24:03       41 阅读
  3. C# 类 结构体

    2024-03-27 03:24:03       40 阅读
  4. SSH公钥(SSH Key)生成方法

    2024-03-27 03:24:03       44 阅读
  5. 判断对象存活的算法

    2024-03-27 03:24:03       36 阅读
  6. node项目中express的使用

    2024-03-27 03:24:03       47 阅读
  7. 20240325_AI小字典

    2024-03-27 03:24:03       35 阅读
  8. android 13长按power键没有关机菜单

    2024-03-27 03:24:03       37 阅读
  9. leetcode77.组合

    2024-03-27 03:24:03       41 阅读
  10. C语言获取输出相关函数scanf、gets、fgets等

    2024-03-27 03:24:03       46 阅读
  11. 使用 python 拆分 excel 文件

    2024-03-27 03:24:03       40 阅读
  12. 电子商务类网站搭建需要注意的几点。

    2024-03-27 03:24:03       43 阅读
  13. springboot如何通过注解优雅实现接口多版本管理

    2024-03-27 03:24:03       36 阅读