商家名称 | 信用等级 | 购买信息 | 订购本书 |
Linux内核源码剖析:TCP/IP实现(套装上下册)(樊东东著) | |||
Linux内核源码剖析:TCP/IP实现(套装上下册)(樊东东著) |
《Linux内核源码剖析:TCP/IP实现(套装上下册)》:
套接口缓存
网络设备
IP:网际协议
ICMP:Internet控制报文协议
IP组播
IGMP:Internet组管理协议
邻居子系统
路由表
套接口层
TCP:传输控制协议
TCP连接的建立
TOP拥塞控制的实现
TCP的输出
TCP的输入
TCP连接的终止
UDP:用户数据报
前言
第1章 预备知识
1.1 应用层配置诊断工具
1.1.1 iputils
1.1.2 net-tools
1.1.3 iproute2
1.2 内核空间与用户空间的接口
1.2.1 proefs
1.2.2 sysctl(proc/sys目录)
1.2.3 sySfs(/sys文件系统)
1.2.4 ioctl系统调用
1.2.5 netlink套接口
1.3 网络I/O加速
1.3.1 TSO/GSO
1.3.2 I/OAT
1.4 其他
1.4.1 slab分配器
1.4.2 RCU
第2章 网络体系结构概述
2.1 引言
2.2 协议简介
2.3 网络架构
2.4 系统调用接口
2.5 协议无关接口
2.6 传输层协议
2.7 套接口缓存
2.8 设备无关接口
2.9 设备驱动程序
2.1 0网络模块源代码组织
第3章 套接口缓存
3.1 引言
3.2 skbufr结构
3.2.1 网络参数和内核数据结构
3.2.2 SKB组织相关的变量
3.2.3 数据存储相关的变量
3.2.4 通用的成员变量
3.2.5 标志性变量
3.2.6 特性相关的成员变量
3.3 skbsharedinfo结构
3.3.1 “零拷贝”技术
3.3.2 对聚合分散I/O数据的支持
3.3.3 对GSO的支持
3.3.4 访问skbsharedinfo结构
3.4 管理函数
3.4.1 SKB的缓存池
3.4.2 分配SKB
3.4.3 释放SKB
3.4 ,4数据预留和对齐
3.4.5 克隆和复制SKB
3.4.6 链表管理函数
3.4.7 添加或删除尾部数据
3.4.8 拆分数据:skbsplit()
3.4.9 重新分配SKI]的线性数据区pskb-expand-head()
3.4.1 0其他函数
第4章 网络模块初始化
4.1 引言
4.2.网络模块初始化顺序
4.3 优化基于宏的标记
4.4 网络设备处理层初始化
第5章 网络设备
5.1 PCI设备
5.1.1 PCI驱动程序相关结构
5.1.2 注册PCI驱动程序
5.2 与网络设备有关的数据结构
5.2.1 netdevice结构
5.2.2 网络设备有关结构的组织
5.2.3 相关函数
5.3 网络设备的注册
5.3.1 设备注册的时机
5.3.2 分配netdevice结构空间
5.3.3网络设备注册过程
5.3.4 注册设备的状态迁移
5.3.5 设备注册状态通知
5.3.6 引用计数
5.4 网络设备的注销
5.4.1 设备注销的时机
5.4.2 网络设备注销过程
5.5 网络设备的启用
5.6 网络设备的禁用
5.7 与电源管理交互
5.7.1 挂起设备
5.7.2 唤醒设备
5.8 侦测连接状态改变
5.8.1 调度处理连接状态改变事件
5.8.2 linkwatch标志
5.9 从用户空间配置设备相关信息
5.9.1 ethtool
5.9.2 媒体独立接口
5.1 0虚拟网络设备
第6章 IP编址
6.1 接口和IP地址
6.1.1 主IP地址、从属IP地址和IP别名
6.1.2 IP地址的组织
6.1.3 indevice结构
6.1.4 inifaddr结构
6.2 函数
6.2.1 inetdev-init()
6.2.2 inetdevdestroy()
6.2.3 inet-select-addr()
6.2.4 inet-confirm-addr()
6.2.5 inet-addr-oniink()
6.2.6 inetdev-by-index()
6.2.7 inet-ifa-byprefix()
6.2.8 inet-abe-len()
6.3 IP地址的设置
6.3.1 netlink接口
6.3.2 inet-insertifa()
6.3.3 inet-del-ifaO
6.4 ioctl
6.5 inetaddrchain通知链
第7章 口层的输入
7.1 系统参数
7.2 接口层的ioctl
7.2.1 SIOCxlFxxx类命令
7.2.2 S10CETHTOOL
7.2.3私有命令
7.3初始化
7.4 softnetdata结构
7.5 NAPI方式
7.5.}网络设备中断例程
7.5.2 网络输入软中断
7.5.3 轮询处理
7.6 非NAPI方式
7.7 接口层输入报文的处理
7.7.1 报文接收例程
7.7.2 netif-receive-skb()
7.7.3 dev-queue-xmit-nit()
7.8 响应CPU状态的变化
7.9 netpoll
7.9.1 netpoll相关结构
7.9.2 注册netpoll实例
7.9.3 netpoll的输入
7.9.4 netpoll的输出
7.9.5 txwork工作队列
7.9.6 netpoll实例:netconsole
第8章 口层的输出
8.1 输出接口
8.1.1 dev-queue-xmit()
8.1.2 dev-hard-start-xmit()
8.1.3 e100的输出接口100-xmit-flame()
8.2 网络输出软中断
8.2.1 netif-schedule()
8.2.2 nettxaction()
8.3 网络设备不支持GSo时的处理
8.3 dev-gso-cb私有控制块
8.3.2 dev-gs0一segment()
8.3.3 skb-gso-segment()
第9章 量控制
9.1 通过流量控制后输出
9.1.1 dev一.queue-xmit()
9.1.2 qdisc-restart()
9.2 构成流量控制的三种元素
9.2.1 排队规则
9.2.2 类
9.2.3 过滤器
9.3默认的FIFO排队规则
9.3.1 pfifo-fast-init(
9.3.2 pfifo-fast-reset()
9.3.pfifo.一fast-enqueue()
9.3.4 pfifo-fast-dequeue()
9.3.pfifo.一fast-requeue()
9.4 netlink的tc接口
9.5 排队规则的创建接口
9.5.1 类的创建接口
9.5.2 过滤器的创建接口
第10章 ntemet协议族
10.1 net-Proto-family结构
10.2 imetprotosw结构
10.3 netprotocol结构
10.4 Intemet协议族的初始化
第11章 P:网际协议
11.1 引言
11.1.1 IP首部
11.1.2 IP数据报的输入与输出
11.2 IP的私有信息控制块
11.3 系统参数
11.4 初始化
11.5 IP层套接口选项
11.6 ipv4de’vconf结构
11.7 套接口的错误队列
11.7.1 添加ICMP差错信息
11.7.2 添加由本地产生的差错信息
11.7.3 读取错误信息
11.8 报文控制信息
11.8.1 IP控制信息块
11.8.2 报文控制信息的输出
11.8.3 报文控制信息的输入
11.9 对端信息块
11.9.1 系统参数
11.9.2 对端信息块的创建和查找
11.9.3 对端信息块的删除
11.9.4 垃圾回收
11.10IP数据报的输入处理
11.10.1 IP数据报输入到本地
11.10.2 IP数据报的转发
11.11IP数据报的输出处理
11.11.1 IP数据报输出到设备
11.11.2 TCP输出的接口
11.11.3 UDP输出的接口
11.12IP层对GSO的支持
11.12.1 inet-gso-segment()
112.2 inet-gso-send-check()
第12章 P选项处理
12.1 IP选项
12.1.1 选项列表的结束符
12.1.2 空操作
12.1.3 安全选项
12.1.4 严格源路由选项
12.1.5 宽松源路由选项
12.1.6 记录路由选项
12.1.7 流标识选项
12.1.8 时间戳选项
12.1.9 路由器警告选项
12.2 ipoptions结构
12.3在IP数据报中构建IP选项
12.4 复制IP数据报中选项到指定的ipoptions结构
12.5 处理待发送IP分片中的选项
12.6 解析IP选项
12.7 还原在校验IP选项时修改的IP选项
12.8 处理转发IP数据报中的IP选项
12.9 处理IP数据报的源路由选项
12.1 0解析并处理IP首部中的IP选项
12.1 1路由警告选项的处理
12.1 2由控制信息生成IP选项信息块
第13章 P的分片与组装
13.1 系统参数
13.2分片
13.2.1 速分片
13.2.2 慢速分片
13.3组装
13.3.Iipq结构
13.3.2 ipq散列表和链表的维护
13.3.3 ipq散列表的重组
13.3.4 超时IP分片的清除
13.3.5 垃圾收集
13.3.6相关分片组装函数
13.3.7 分片组装
第14章 CMP:Internet控制报文协议
14.1 ICMP报文结构
14.2 注册ICMP报文类型
14.3 系统参数
14.4 ICMP的初始化
14.5 输入处理
14.5.1 差错处理
14.5.2 重定向处理
14.5.3 请求回显
14.5.4 时间戳请求
14.5.5 地址掩码请求和应答
14.6 输出处理
14.6.1 发送ICMP报文
14.6.2 发送回显应答和时间戳
应答报文
第15章 IP组播
15.1 初始化
15.2 虚拟接口
15.2.1 虚拟接口的添加
15.2.2 虚拟接口的删除:vif-deleteO
15.2.3查找虚拟接口:ipmrfmdvif()
15.3组播转发缓存
15.3.1 组播转发缓存的创建
15.3.2 组播转发缓存的删除
15.3.3 组播转发缓存的查找
15.3.4 向组播路由守护进程发送报告
15.4 临时组播转发缓存
15.4.1 临时组播转发缓存队列
15.4.2 创建临时组播转发缓存
15.4.3 用于超时而删除临时组播转发缓存的定时器
15.4.4 释放临时组播缓存项中保存的临时组播报文
15.5 外部事件
15.6 组播套接口选项
15.6.1 IP-MULTICAST-TTL
15.6.2 IP-MULTICAST——LOOP
15.6.3 IP-MULTICAST-IF
15.6.4 IP-ADD-MEMBERSHIP
15.6.5 IP-DROP-MEMBERSHIP
15.6.6 IP-MSFILTER
15.6.7 IP-BLOCK-SOURCE和IP-UNBLOCK-SOURCE
15.6.8 IP-ADD-SOURCE-MEMBERSHIP和IPDROP-SOURCE-MEMBERSHIP
15.6.9 MCAST-JOIN-GROUP
15.6.1 0MCASTLEAVEGRoUP
15.6.1 lMCAST-BLOCK-SOURCE和M-CASTUNBLOCKSOI瓜CE
15.6.1 2MCASTJOINSOURCEGROUP和MCASTLEAVESOURCEGROUP
15.6.1 3MCAST-MSFILTER
15.7 组播选路套接口选项
……
第16章 IGMP:Internet组管理协议
第17章 邻居子系统
第18章 ARP:地址解析协议
第20章 路由缓存
第21章 路由策略
第22章 套接口层
第23章 套接口I/O
第24章 套接口选项
第25章 传输控制块
第26章 TCP:传输控制协议
第27章 TCP的定时器
第28章 TCP连接的建立
第29章 TCP拥塞控制的实现
第30章 TCP的输出
第31章 TCP的输入
第32章 UDP:用户数据报
第33章 UDP:用户数据报
参考文献
有人宣称Linux人才是未来20年IT职场中的王者。无论这种说法有多夸张,有一个事实是不可否认的,那就是,近年来Linux的市场份额不断增长,Linux正在受到越来越多的关注乃至推崇。由于Linux可广泛地应用到各种系统,包括很多嵌入式系统上,以及其他的诸多优点,如开放、高效、丰富的网络功能等,这种趋势在可预计的未来还将持续。
目前,国内对Linux各方面的研究工作没有国外那样广泛和深入,相关的出版物水准参差不齐。特别是在网络的实现方面,有些著作针对性不强,有些则缺少了重要的传输层协议实现的论述,还有一些虽然有比较全面的介绍,却不够深入,选用的Linux版本也比较旧。
针对以上情况,本书选择了较新的2.6.2 0版本内核RCP/IP实现作详细的论述,在重要的细节处甚至逐行分析,并在此基础上,对代码背后的机制和原理作了深入的阐述,将各关键点连成一个整体,帮助读者理清整个Linux网络部分的脉络。作者本着严谨的态度,在写作过程中参阅了大量的中英文资料及相关的文档。相信本书可以成为那些希望深入了解Linux的TCP/IP协议栈、网络部分实现的人们的有力工具。
本书共有33章,通过自底向上的方法来论述TCP/IP的实现,从数据链路层开始,然后是网络层(IP、ICMP、IGMP、路由以及邻居子系统和IP组播),接下来是套接口,最后是传输层(TCP和UDP)。在学习的时候也可以采用自顶向下的方法(从传输层开始向下),或者结合以上两种方法。要理解一个系统的运行机制,对于一个专业人员来说,代码是最为直接也最为可靠的资源。Linux普及面不断扩展,越来越多的人会想通过研读内核代码来了解Linux系统,一来是更好地解决具体工作中的相关问题,二来是从Linux这个高质量的操作系统中学习到更多的编程、架构等技术。本书的特点如下:
选择的内核版本新,内容不会在短期内过时。
对代码作了详细的论述,在此基础上进一步分析了代码背后的机制和原理,为读者理清了整个框架的脉络,帮助读者避免迷失在细节中。
写作过程中参阅了大量中英文资料和相关的文档,对内核代码更是作了长时间深入细致的研究和分析,在细节处反复推敲,以确保本书的质量。
插图:
尽管技术有了巨大的进步,但是TCP/IP协议栈的处理方式却几乎没有变化。也就是说,即便用户使用最先进的CPU,依然要处理那些未经优化的TCP/IP协议,由此产生巨大的系统开销。例如,TCP/IP的传输过程中需要封装、解包,这些动作对于处理器而言并不是一个复杂的过程,但是会占用处理器周期,而且网络带宽越高,这个问题越严重。系统开销的增大不仅仅表现在占用较多的处理器周期,还会导致处理网络相关数据时的内存访问效率降低。这又会进一步降低CPU效能和网络效率。
过去,网络流量较低,处理网络相关数据所产生的开销,远远低于用于执行正常任务的开销,所以并未引起重视。现在,随着网络流量大幅度提升,处理网络相关数据所产生的系统开销越来越不能忽视,甚至已经影响到了正常应用。现有几种解决方案: (1)TSO(TCP Segmentation Offioad) 通过网络设备上的专用处理器处理部分或者全部的封包,借此来降低对于系统处理器资源的占用,不过这种解决方案只对具有某些特征的数据包有效。
(2)RDMA(。Remote Direct MemoryAccess,远程直接内存访问)
发送端系统直接将有效数据送至目的系统指定的内存中,无需移动数据包的时间消耗,因此大大提升了网络传输的效率。但是这种技术需要专用的网络设备,应用程序也需要进行修改,甚至还增加了一个RDMA层的封装过程,而且这种操作风险较高,因此目前看来还不是一个吸引人的解决方案。 (3)Onloading技术 将系统处理器作为处理网络流量的第一引擎,尽可能地提升CP[J处理网络数据包的效率,这种思想已经被英特尔借鉴。
相关阅读:
更多图书资讯可访问读书人图书频道:http://www.reAder8.cn/book/