深入理解linux网络技术内幕
深入理解linux网络技术内幕
Christian benvenuti
夏宏, 闫江毓, 黄景昌 译
出版时间:2009年07月
页数:996
Linux如此流行正是得益于它的特性丰富并且有效的网络协议栈。如果你曾经惊叹于Linux能够实现如此复杂的工作,或是你只是想通过现实中的例子学习现代网络,《深入理解Linux网络技术内幕》将会给你指导。
同其他O'Reilly的畅销书籍一样,《深入理解Linux网络技术内幕》清楚地阐述了网络的基本概念,并指导你如何用C语言实现。虽然早先的TCP/IP经验是有用的,初学者通过本书仍然可以学习到协议本身和大量的应用信息。一旦彻底掌握了这些网络工具,你就可以使用本书所附的代码,准确地指出Linux内核中最重要的部分如何工作。
网络功能的实现分布在不同的时间由不同的代码块完成,这正是理解网络和实现它的难点之一。本书的成功之一就是描述这些代码块如何集成,以及众多的函数和数据结构之间的关系。《深入理解Linux网络技术内幕》不仅描述了Linux网络的全貌,而且是理解Linux网络细节的有效指南。
作者Christian Benvenuti是一个专注于操作系统网络的设计者。他在书中不仅解释了Linux代码如何工作,还阐述了主要网络特性的目的,以及在不同解决方案间是如何抉择的。书中还包含了大量的流程图和其他图表以帮助读者理解。
书中的主题包含:
* 网络通信的主要问题
* 网络接口设备(NIC)驱动
* 系统初始化
* 第二层(链路层)的功能和实现
* 第三层(IP)的功能和实现
* ARP
* 桥接
* 路由
* ICMP
  1. 前言
  2. 第一部分 基础背景
  3. 第一章 简介
  4. 基本术语
  5. 常见编码模式
  6. 用户空间工具
  7. 浏览源代码
  8. 当功能以补丁形式提供时
  9. 第二章 关键数据结构
  10. 套接字缓冲区:sk_buff结构
  11. net_device结构
  12. 本章涉及的文件
  13. 第三章 用户空间与内核的接口
  14. 概论
  15. procfs与sysctl
  16. ioctl
  17. Netlink
  18. 配置改变串行化
  19. 第二部分 系统初始化
  20. 第四章 通知链
  21. 使用通知链的原因
  22. 概论
  23. 定义链
  24. 链注册
  25. 链上的通知事件
  26. 网络子系统的通知链
  27. 通过/proc文件系统的调整
  28. 本章涉及的函数和变量
  29. 本章涉及的文件和目录
  30. 第五章 网络设备初始化
  31. 系统初始化概论
  32. 设备注册和初始化
  33. NIC初始化的基本目标
  34. 设备与内核之间的交互
  35. 初始化选项
  36. 模块选项
  37. 设备处理层初始化:net_dev_init
  38. 用户空间辅助程序
  39. 虚拟设备
  40. 通过/proc文件系统调整
  41. 本章涉及的函数和变量
  42. 本章涉及的文件和目录
  43. 第六章 PCI层和网络接口卡
  44. 本章涉及的数据结构
  45. PCI NIC设备驱动程序的注册
  46. 电源管理和网络唤醒
  47. PCI NIC驱动程序注册范例
  48. 大蓝图
  49. 通过/proc文件系统调整
  50. 本章涉及的函数和变量
  51. 本章涉及的文件和目录
  52. 第七章 组件初始化的内核基础架构
  53. 引导期间的内核选项
  54. 模块初始化代码
  55. 优化宏卷标
  56. 引导期间初始化函数
  57. 内存最优化
  58. 通过/proc文件系统调整
  59. 本章涉及的函数和变量
  60. 本章涉及的文件和目录
  61. 第八章 设备注册和初始化
  62. 设备注册之时
  63. 设备除名之时
  64. 分配net_device结构
  65. NIC注册和除名的架构
  66. 设备初始化
  67. net_device结构的组织
  68. 设备状态
  69. 设备的注册和除名
  70. 设备注册
  71. 设备除名
  72. 开启和关闭网络设备
  73. 更新设备队列规则状态
  74. 从用户空间配置设备相关信息
  75. 虚拟设备
  76. 上锁
  77. 通过/proc文件系统调整
  78. 本章涉及的函数和变量
  79. 本章涉及的文件和目录
  80. 第三部分 传输和接收
  81. 第九章 中断和网络驱动程序
  82. 决策和流量方向
  83. 接收到帧时通知驱动程序
  84. 中断处理函数
  85. softnet_data结构
  86. 第十章 帧的接收
  87. 与其他功能交互
  88. 设备的开启和关闭
  89. 队列
  90. 通知内核帧已接收:NAPI和netif_rx
  91. 设备驱动程序与内核间的旧接口:netif_rx的第一部分
  92. 拥塞管理
  93. 处理NET_RX_SOFTIRQ:net_rx_action 234
  94. 第十一章 帧的传输
  95. 传输的开启和关闭
  96. 第十二章 中断事件一般性参考数据
  97. 统计数据
  98. 通过/proc和sysfs文件系统调整
  99. 本部分涉及的函数和变量
  100. 本部分涉及的文件和目录
  101. 第十三章 协议处理函数
  102. 网络协议栈概论
  103. 执行正确的协议处理函数
  104. 协议处理函数的组织
  105. 协议处理函数的注册
  106. Ethernet与IEEE 802.3帧
  107. 通过/proc文件系统进行调整
  108. 本章涉及的函数和变量
  109. 本章涉及的文件和目录
  110. 第四部分 桥接
  111. 第十四章 桥接:概念
  112. 中继器、网桥以及路由器
  113. 网桥与交换机
  114. 主机
  115. 用网桥合并LAN
  116. 桥接不同技术的LAN
  117. 地址学习
  118. 多台网桥
  119. 第十五章 桥接:生成树协议
  120. 基本术语
  121. 阶层交换式L2拓扑范例
  122. 生成树协议的基本元素
  123. 网桥ID和端口ID
  124. 网桥协议数据单元(BPDU)
  125. 定义活跃拓扑
  126. 定时器
  127. 拓扑变化
  128. BPDU封装
  129. 传输配置BPDU
  130. 处理入口帧
  131. 收敛时间
  132. 新版生成树协议概况
  133. 第十六章 桥接:Linux实现
  134. 网桥设备抽象
  135. 重要的数据结构
  136. 桥接程序的初始化
  137. 建立网桥设备和网桥端口
  138. 建立一个新网桥设备
  139. 网桥设备设置函数
  140. 删除网桥
  141. 给网桥添加端口
  142. 启动和关闭网桥设备
  143. 启动和关闭网桥端口
  144. 改变网桥端口状态
  145. 大蓝图
  146. 转发数据库
  147. 处理入口流量
  148. 网桥设备上的传输
  149. 生成树协议(STP)
  150. netdevice通知链
  151. 第十七章 桥接:其他主题
  152. 用户空间配置工具
  153. 通过/proc文件系统调整网桥
  154. 通过/sys文件系统调整网桥
  155. 统计数据
  156. 本部分涉及的数据结构
  157. 本部分涉及的函数和变量
  158. 本部分涉及的文件和目录
  159. 第五部分 因特网协议第4版(IPv4)
  160. 第十八章 因特网协议第4版(IPv4):概念
  161. IP协议:大蓝图
  162. IP报头
  163. IP选项
  164. 封包的分段/重组
  165. 校验和
  166. 第十九章 因特网协议第4版(IPv4):Linux的
  167. 原理和功能
  168. 主要IPv4数据结构
  169. 封包的一般性处理
  170. IP选项
  171. 第二十章 因特网协议第4版(IPv4):转发
  172. 和本地传递
  173. 转发
  174. 本地传递
  175. 第二十一章 因特网协议第4版(IPv4):传输
  176. 进行传输的重要函数
  177. 衔接邻居子系统
  178. 第二十二章 因特网协议第4版(IPv4):处理分段
  179. IP分段
  180. IP重组
  181. 第二十三章 因特网协议第4版(IPv4):其他主题
  182. 长效IP端点信息
  183. 选择IP报头的ID字段
  184. IP统计资料
  185. IP配置
  186. IP-over-IP
  187. IPv4:问题出在哪儿?
  188. 通过/proc文件系统做调整
  189. 本部分涉及的数据结构
  190. 本部分涉及的函数和变量
  191. 本部分涉及的文件和目录
  192. 第二十四章 L4协议和Raw IP的处理
  193. 可用的L4协议
  194. L4协议的注册
  195. L3到L4的传递:ip_local_deliver_finish
  196. IPv4 vs IPv6
  197. 通过/proc文件系统做调整
  198. 本章涉及的函数和变量
  199. 本章涉及的文件和目录
  200. 第二十五章 因特网控制消息协议(ICMPv4)
  201. ICMP报头
  202. ICMP有效载荷
  203. ICMP类型
  204. ICMP协议的应用程序
  205. 大蓝图
  206. 协议的初始化
  207. 本章涉及的数据结构
  208. 传输ICMP消息
  209. 接收ICMP消息
  210. ICMP统计资料
  211. 把错误通知传给传输层
  212. 通过/proc文件系统调整
  213. 本章涉及的函数和变量
  214. 本章涉及的文件和目录
  215. 第六部分 邻居子系统
  216. 第二十六章 邻居子系统: 概念
  217. 邻居是什么?
  218. 需要邻居协议的原因
  219. Linux实现
  220. 邻居协议代理
  221. 何时发送和处理Solicitation请求
  222. 邻居状态和网络不可到达性探测(NUD)
  223. 第二十七章 邻居子系统:基础结构
  224. 主要的数据结构
  225. L3协议和邻居协议间的通用接口
  226. 邻居基础结构的一般任务
  227. 邻居结构的引用计数
  228. 创建一个邻居项
  229. 删除邻居
  230. 担任代理
  231. L2帧头缓存
  232. 协议初始化和清理
  233. 与其他子系统的交互
  234. 邻居协议和L3传输函数的交互
  235. 排队
  236. 入口队列
  237. 第二十八章 邻居子系统:地址解析协议(ARP)
  238. ARP 封包格式
  239. ARP 事务范例
  240. 无端ARP
  241. 多个网络接口的应答
  242. 调整ARP 选项
  243. 初始化ARP协议
  244. 初始化neighbour 结构
  245. 传输和接收ARP 封包
  246. 处理入口ARP 封包
  247. ARP代理
  248. 实例
  249. 外部事件
  250. ARPD
  251. 逆向地址解析协议(RARP)
  252. ND(IPv6)对ARP(IPv4)的改进
  253. 第二十九章 邻居子系统:其他问题
  254. 邻居的系统管理
  255. 使用/proc文件系统调整邻居性能
  256. 本部分涉及的数据结构
  257. 本部分涉及的文件和目录
  258. 第七部分 路由
  259. 第三十章 路由:概念
  260. 路由器、路由与路由表
  261. 路由的基本元素
  262. 路由表
  263. 查找
  264. 封包接收与封包传输
  265. 第三十一章 路由: 高级路由
  266. 策略路由背后的概念
  267. 多路径路由背后的概念
  268. 与其他内核子系统的交互
  269. 路由协议守护进程
  270. Verbose监控
  271. ICMP_REDIRECT消息
  272. 反向路径过滤
  273. 第三十二章 路由: Linux的实现
  274. 内核选项
  275. 主要的数据结构
  276. 路由scope与地址scope
  277. 主IP地址与辅助IP地址
  278. 常用的辅助程序与宏
  279. 全局锁
  280. 路由子系统初始化
  281. 外部事件
  282. 与其他子系统的交互
  283. 第三十三章 路由: 路由缓存
  284. 路由缓存初始化
  285. Hash表的组织
  286. 主要的缓存操作
  287. 多路径缓存
  288. DST与调用协议间的接口
  289. 刷新路由缓存
  290. 垃圾回收
  291. 出口ICMP REDIRECT限速
  292. 第三十四章 路由: 路由表
  293. 路由Hash表的组织
  294. 路由表初始化
  295. 路由的添加与删除
  296. 策略路由及其对路由表定义的影响
  297. 第三十五章 路由: 查找
  298. 查找函数的高层概述
  299. 辅助函数
  300. 路由表查找:fn_hash_lookup
  301. fib_lookup函数
  302. 为接收和发送设置函数
  303. 输入和输出路由函数的一般结构
  304. 输入路由
  305. 输出路由
  306. 多路径对下一跳选择的影响
  307. 策略路由
  308. 源路由
  309. 策略路由与基于路由表的分类器
  310. 第三十六章 路由: 相关主题
  311. 用户空间配置工具
  312. 统计数据
  313. 通过/proc文件系统调整
  314. 开启和关闭转发
  315. 本书此部分中的数据结构功能
  316. 本部分涉及的函数和变量
  317. 本部分涉及的文件和目录
书名:深入理解linux网络技术内幕
作者:Christian benvenuti
译者:夏宏, 闫江毓, 黄景昌 译
国内出版社:中国电力出版社
出版时间:2009年07月
页数:996
书号:978-7-5083-7964-7
原版书出版商:O'Reilly Media
Christian benvenuti
 
Christian Benvenuti在意大利的Bologna大学取得了他的计算机科学硕士学位。他与位于Trieste的国际理论物理中心(International Center for Theoretical Physics,ICTP)合作多年,开发了基于Linux内核的特定软件,他是一个远程协作项目的科学顾问,并且是多个网络培训课程的讲师。这些培训主要在欧洲、非洲与南美洲举行,均是基于Linux系统,面向发展中国家的科学家,在这些国家,ICTP已经推广Linux多年。他有时也与由ICTP成员建立的一个非营利组织(Collaborium.org)合作,继续在发展中国家推广Linux。
在过去的几年里,他作为软件工程师为硅谷的Cisco Systems工作,致力于第二层交换、高可用性和网络安全。
Christian Benvenuti received his masters degree in computer science at the Univer-
sity of Bologna in Italy.He collaborated for a few years with the International Center
for Theoretical Physics (ICTP)in Trieste,where he developed ad-hoc software based
on the Linux kernel,was a scientific consultant for a project on remote collabora-
tion,and served as an instructor for several training sessions on networking.The
trainings,held mainly in Europe,Africa,and South America were all based on Linux
systems and addressed to scientists from developing countries,where the ICTP has
been promoting Linux for many years.He occasionally collaborates with a nonprofit
organization founded by ICTP members,Collaborium.org,to continue promoting
Linux on developing countries.
In the past few years he worked as a software engineer for Cisco Systems in the
Silicon Valley,where he focused on Layer 2 switching,high availability,and network
security.