第一部分 Linux IP协议栈源代码 453
第二部分 TCP/IP协议栈源代码分析 453
第1章 TCP/IP协议栈分析概述 453
第2章 背景与基本概念 456
2.1 黑暗时代 457
2.2 Ghu说“用Linux吧,随后一切都会充满希望” 458
2.3 网络编程规则 459
2.4 合作 461
第3章 Linux与ISO模型 463
3.1 ISO和OSI 463
3.2 OSI栈 464
3.2.2 第2层——数据链路层 466
3.2.1 第1层——物理层 466
3.2.3 第3层——网络层 467
3.2.4 第4层——传输层 467
3.2.5 第5层——会话层 468
3.2.6 第6层——表示层 469
3.2.7 第7层——应用层 469
3.3 从TCP/IP到OSI模型的映射 470
第4章 ICMP 472
4.1 规范化的报文 472
4.2 输入函数 476
4.3 输出函数 481
4.4 管理例程 482
第5章 套接字API概述 483
5.1 主要的套接字函数 483
5.1.2 connect 484
5.1.1 socket 484
5.1.3 bind 485
5.1.4 listen 485
5.1.5 accept 486
5.1.6 read、ready 486
5.1.7 write、writev 487
5.1.8 shutdown 487
5.1.9 close(一个套接字对象) 488
5.1.10 recv、recvfrom、recvmsg 488
5.1.11 send、sendto、sendmsg 489
5.2 套接字选项函数 490
5.2.1 getsockopt 490
5.2.3 套接字选项(SOL_SOCKET) 491
5.2.2 setsockopt 491
5.2.4 IP标准选项(IPPROTO_IP) 494
5.2.5 IP多播选项(IPPROTO_IP) 495
5.2.6 TCP选项(IPPROTO_TCP) 495
第6章 路由 497
6.1 ARPAnet的遗产 498
6.2 路由选择:让Internet名副其实 499
6.3 信包和支票 503
6.4 Linux的路由选择:路由表处理例程 505
6.4.1 路由表结构 506
6.4.2 支持/proc文件系统 507
6.4.3 ioctl处理例程 510
6.4.4 增加路由表中的路由 511
6.4.5 从路由表中删除路由 516
6.4.6 高速缓存管理例程 519
6.4.8 路由请求处理程序 521
6.4.7 后台处理程序 521
第7章 IPv4 524
7.1 IP包格式 524
7.1.1 版本 524
7.1.2 头长度 525
7.1.3 服务类型 525
7.1.4 总长度 526
7.1.5 标识 526
7.1.6 分片控制 526
7.1.7 生命周期 528
7.1.8 协议 528
7.1.10 源和目的地址 529
7.1.11 IP包选项 529
7.1.9 头校验和 529
7.2 实现应该做的与不该做的 530
7.3 函数讨论 530
7.4 API的其他功能 531
7.5 包装 536
7.6 IP信包发送 540
7.7 传送数据 550
7.8 数据泛洪 552
7.9 管理任务 558
第8章 UDP 559
8.1 UDP信包的轨迹 559
8.2 函数索引 561
8.3 发送一个UDP信包 562
8.4 ioctl接口——udp_ioctl 565
8.5 接收UDP信包 565
8.6 IP连接例程 570
第9章 TCP 572
9.1 无错的错误控制 572
9.2 内部视角 573
9.3 像棋游戏 574
9.3.1 设定棋盘 576
9.3.2 开始连接的开棋法 577
9.3.3 游戏之中 578
9.3.4 不利的交易 580
9.3.5 游戏结束 580
9.3.6 将死 581
9.3.7 判定失败一方 581
9.4 信号灯测试 581
9.5 一个包头的解析 582
9.6 分析 587
9.7 tcp.c 591
9.8 tcp_output.c 619
9.9 tcp_timer.c 624
9.10 timer.c 625
第10章 IP防火墙支持 627
10.1 请给我您的护照 627
10.2 瞒天过海 628
10.3 防火墙特性 629
10.4 包过滤例程 630
10.5 /proc文件系统支持 633
10.6 IP伪装支持 634
10.7 防火墙管理 634
附录A GNU通用公共许可证 637
附录B 缩写 644
附录C DNS 647