本书共分9章;第1章介绍了Linux系统内核的组成结构、编译方法、调试工具和方法,为初学者了解Linux内核提供了知识准备,也为读者深入研究网络内核推荐了方法和工具;第2章介绍了Linux网络内核组成和重要的数据结构;第3章介绍了套接字的概念和套接字接口的实现;第4章介绍了UDP、TCP和原始数据包处理模块的内核实现,另外还介绍了新传输层协议与套接字的设计;第5章介绍了IPv4、ICMP和IPv6协议的内核实现;第6章介绍了数据链路层的内核实现以及一些特殊链路层协议;第7章介绍了Linux网络设备驱动程序结构,并通过实例介绍了网卡驱动的设计过程;第8章介绍了Linux路由模块和邻居子系统的实现;第9章介绍了Linux平台上的MPLS网络配置和MPLS协议实现。
本书全面描述了Linux网络内核的结构和源码,力图使读者了解和掌握网络内核的工作原理和开发方法。全书共分为9章,主要介绍了Linux内核和相关开发工具、Linux网络内核结构、套接字及其设计、传输层协议实现与设计、网络层实现、数据链路层实现、网络设备驱动程序及其设计、路由模块与邻居子系统、MPLS网络及其协议实现等内容。
本书适用于从事计算机网络、协议研发、嵌入式产品开发的技术人员,也适用于计算机、通信专业的本科生和研究生。
第1章 Linux系统内核/1
1.1 Linux系统内核组成结构/1
1.1.1 内核组成结构/1
1.1.2 Linux内核源码浏览工具/2
1.2 Linux系统内核编译/3
1.2.1 Linux内核编译步骤/3
1.2.2 Linux内核编译选项/4
1.3 Linux系统内核调试工具/5
1.3.1 KGDB调试工具/6
1.3.2 UML调试工具/10
1.3.3 用虚拟机软件搭建内核调试平台/11
1.4 GDB使用/16
1.4.1 基本命令/16
1.4.2 断点/16
1.4.3 查看运行时数据/19
1.4.4 改变程序的执行/21
1.5 调试范例/21
1.5.1 调试示例程序/22
1.5.2 调试前的工作/22
1.5.3 调试运行/22
第2章 Linux网络内核/24
2.1 TCP/IP协议体系/24
2.1.1 TCP/IP协议体系架构/24
2.1.2 网络数据包的封装与解封/25
2.2 Linux网络内核组成/26
2.2.1 Linux网络内核的组成模块/26
2.2.2 内核中的数据包处理流程/28
2.3 网络内核的重要数据结构/30
2.3.1 套接字缓冲区/30
2.3.2 网络设备/42
第3章 套接字/53
3.1 套接字与套接字接口/53
3.1.1 套接字/54
3.1.2 套接字接口的使用/54
3.1.3 套接字编程实例/60
3.2 套接字内核实现/62
3.2.1 套接字创建流程/62
3.2.2 套接字数据结构/62
3.2.3 套接字功能实现/74
3.3 新协议族与套接字/94
3.3.1 数据定义/95
3.3.2 函数设计/96
第4章 传输层/99
4.1 UDP协议/99
4.1.1 UDP简介/99
4.1.2 UDP协议模块处理流程/99
4.1.3 UDP头部实现/100
4.1.4 UDP包的发送/101
4.1.5 UDP包的接收/110
4.1.6 UDP连接的建立/116
4.2 TCP协议/118
4.2.1 TCP协议简介/118
4.2.2 TCP协议模块处理流程/119
4.2.3 TCP头部实现/120
4.2.4 TCP连接建立/121
4.2.5 TCP包的发送/124
4.2.6 TCP包的接收/132
4.3 原始数据包处理模块/142
4.3.1 原始套接字简介/142
4.3.2 原始数据包处理流程/142
4.3.3 原始数据包的发送/144
4.3.4 原始数据包的接收/148
4.4 新传输层协议与套接字设计/150
4.4.1 数据结构/152
4.4.2 函数设计/153
第5章 网络层/156
5.1 IPv4介绍/156
5.2 IPv4协议实现/157
5.2.1 IP包头实现/157
5.2.2 IP层处理流程/158
5.2.3 IP包的本地发送/159
5.2.4 IP包的本地接收/168
5.2.5 IP包的转发/175
5.3 ICMP协议实现/176
5.3.1 ICMP简介/176
5.3.2 ICMP流程/178
5.4 IPv6协议实现/186
5.4.1 IPv6协议简介/186
5.4.2 给内核配置IPv6/187
5.4.3 IPv6协议模块处理流程/187
5.4.4 IPv6包的发送/188
5.4.5 IPv6包的接收/194
5.4.6 IPv6包的转发/198
5.4.7 相关协议实现/200
第6章 数据链路层/207
6.1 数据链路层协议/207
6.2 帧的发送和接收/208
6.2.1 设备初始化函数/208
6.2.2 帧的发送实现/209
6.2.3 帧的接收实现/215
6.2.4 驱动上层的数据包类型与递交方法/222
6.3 通用点对点(PPP)协议实现/225
6.3.1 点对点协议/225
6.3.2 PPP协议管理/227
6.3.3 发送帧/230
6.3.4 接收帧/233
6.4 异步PPP协议实现/234
6.4.1 ppp_async_init函数/234
6.4.2 ppp_async_send函数/235
6.4.3 ppp_asynctty_receive函数/236
6.5 以太网上的PPP协议实现/236
6.5.1 PPPoE协议规范/237
6.5.2 数据结构/238
6.5.3 PPPoE驱动程序/239
第7章 网络设备驱动程序/247
7.1 网络设备驱动程序/247
7.1.1 数据结构/247
7.1.2 网络设备的初始化/248
7.1.3 网络设备的打开和关闭/253
7.1.4 发送数据包/254
7.1.5 接收数据包/256
7.1.6 网络设备的统计信息/260
7.2 CS89x0网卡驱动程序设计/260
7.2.1 数据定义/261
7.2.2 I/O端口访问函数/262
7.2.3 CS89x0网卡的初始化/263
7.2.4 CS89x0网卡的打开和关闭/268
7.2.5 CS89x0网卡发送数据包/270
7.2.6 CS89x0网卡接收数据包/271
第8章 路由模块与邻居子系统/275
8.1 路由原理/275
8.2 路由表数据结构/277
8.2.1 路由表类型/277
8.2.2 路由表缓存类型/283
8.3 路由信息管理/285
8.3.1 路由规则管理/286
8.3.2 路由表管理/288
8.4 路由查询/290
8.4.1 发送时路由查询/291
8.4.2 接收时路由查询/299
8.5 邻居子系统/302
8.5.1 邻居子系统类型/302
8.5.2 邻居子系统处理模块/305
第9章 MPLS网络与协议实现/310
9.1 MPLS协议原理/310
9.1.1 原理介绍/310
9.1.2 Linux内核的MPLS配置/311
9.2 MPLS协议模块/313
9.2.1 流程/313
9.2.2 数据结构/314
9.2.3 初始化/318
9.2.4 MPLS标签转发表管理/321
9.2.5 MPLS层的数据发送/345
9.2.6 MPLS层的数据接收与转发/348
参考文献/355