第1章 操作系统、网络、协议栈、代码 1
1.1 Linux操作系统介绍 2
1.1.1 Linux操作系统架构简介 2
1.1.2网络协议发展介绍 3
1.2本书的组织和安排 7
1.2.1基本的数据结构和计算机术语 8
1.2.2图片风格演示 10
1.2.3本书的组织 11
第2章 内核系统初始化 14
2.1系统初始化流程简介 15
2.2内核文件解读 19
2.2.1 ELF文件格式 19
2.2.2 Link Scripts知识 22
2.2.3 Linux内核镜像解析 23
2.3中断及任务调度管理 32
2.3.1中断及软中断模型 32
2.3.2各种语境下的切换 43
2.3.3内核下的同步与互斥 44
2.3.4各种异步手段 47
2.4虚拟文件系统 49
2.5网络协议栈各部分初始化 52
2.5.1网络基础系统初始化 53
2.5.2网络内存管理 54
2.5.3网络文件系统初始化 63
2.5.4网络协议初始化 65
2.5.5初步了解路由系统 74
2.6 Linux设备管理 75
2.6.1底层PCI模块的初始化 78
2.6.2网络设备接口初始化例程 80
第3章 配置网络系统 92
3.1配置过程分析 93
3.1.1配置是如何下达到内核的? 93
3.1.2 socket系统调用 95
3.1.3 ioctl代码的实现 104
3.1.4 loopback接口的配置过程 113
3.1.5 IP别名的实现 115
3.2回顾FIB系统初始化 119
3.3深入FIB系统 122
3.4 FIB系统发生了什么样的变化 132
3.5直接访问路由表 149
3.6接口状态变化的处理过程 151
第4章 网络层实现的初步研究 154
4.1从ping 127.0.0.1开始旅程 155
4.2再次相遇Socket系统调用 157
4.3 IP数据报文格式 158
4.4 send系统调用 159
4.5在路由系统中游历 164
4.5.1查找出口 164
4.5.2当目的地址是远端主机时 177
4.5.3创建对应路由cache表项 180
4.5.4创建对应邻居表项 184
4.6回到发送的路径 189
4.6.1 IP层发送过程 189
4.6.2揭密hh cache 193
4.7 ARP的作用 202
4.7.1 ARP的机制 202
4.7.2 ARP报文格式 203
4.7.3 Linux ARP协议的实现 204
4.8到达设备驱动层 219
4.8.1数据链路层帧格式 219
4.8.2 Loopback设备的发送过程 224
4.9接收过程:从中断到路由系统 225
4.10 ICMP 240
4.10.1 ICMP报文格式 241
4.10.2 ping本机地址及回环地址 242
4.10.3 ping外部地址 243
4.11从内核到用户 249
第5章 传输层实现的研究 253
5.1进一步到UDP 254
5.1.1 UDP用户代码 254
5.1.2 UDP数据报文格式 255
5.1.3服务器端bind的实现 255
5.1.4接收代码 261
5.1.5释放UDP的socket 264
5.2更高阶的TCP 266
5.2.1 TCP用户代码 266
5.2.2 TCP数据报文格式 266
5.2.3 TCP栈及socket的初始化 268
5.2.4服务器端bind和listen的实现 271
5.2.5服务器端accept的实现 276
5.2.6 客户端connect的实现——发起三次握手 278
5.2.7 TCP报文的接收 286
5.2.8三次握手的实现 291
5.2.9内核收到报文转到用户态 295
5.2.10释放TCP的socket 300
5.3 TCP拥塞控制 303
5.3.1 TCP拥塞控制机制介绍 305
5.3.2 Linux内核拥塞控制功能的实现 307
第6章 Select系统调用的实现机制 310
6.1如何使用select 312
6.2 Select的内核实现 313
第7章 数据链路层协议实现 318
7.1基本的2层知识 319
7.2 Linux桥实现的基本框架 320
7.3 VLAN 321
7.3.1 VLAN概念 321
7.3.2 Linux下VLAN——存在巨大的缺陷 323
7.4 LACP协议 330
7.4.1聚合端口简介 330
7.4.2 LACP在Linux中的实现 333
7.5 2层功能总结 339
后记 341
参考文献 342