TCP/IP 详解卷 - 实现
TCP/IP 详解卷 - 实现
内容简介
本书完整而详细地介绍了 TCP/IP 协议是如何实现的。书中给出了约 500 个图例,15000 行实际操作的 C 代码,采用举例教学的方法帮助你掌握 TCP/IP 实现。本书不仅说明了插口 API 和协议族的关系以及主机实现与路由器实现的差别。还介绍了 4.4BSD-Lite 版的新的特点。本书适用于希望理解 TCP/IP 协议如何实现的人,包括编写网络应用程序的程序员以及利用 TCP/IP 维护计算机网络的系统管理员。
作者简介
加里;R. 赖特(Gary R. Wright)研究 TCP/IP 多年。他是 Connix 公司的董事长,Connix 公司的总部在康涅狄格州,主要提供 Internet 接入和咨询服务。 W. 理查德 史蒂文斯(W. Richard Stevens)(1951—1999)是国际的 Unix 和网络专家,备受赞誉的技术作家。生前著有《TCP/IP 详解》(三卷本)、《UNIX 网络编程》(两卷本)以及《UNIX 环境高级编程》,均为不朽的经典著作。
目录
- 出版者的话
- 译者序
- 前言
第 1 章 概述 1
- 1.1 引言 1
- 1.2 源代码表示 1
- 1.2.1 将拥塞窗口设置为 11
- 1.2.2 印刷约定 2
- 1.3 历史 2
- 1.4 应用编程接口 3
- 1.5 程序示例 4
- 1.6 系统调用和库函数 6
- 1.7 网络实现概述 6
- 1.8 描述符 7
- 1.9 mbuf 与输出处理 11
- 1.9.1 包含插口地址结构的 mbuf11
- 1.9.2 包含数据的 mbuf12
- 1.9.3 添加 IP 和 UDP 首部 13
- 1.9.4 IP 输出 14
- 1.9.5 以太网输出 14
- 1.9.6 UDP 输出小结 14
- 1.10 输入处理 15
- 1.10.1 以太网输入 15
- 1.10.2 IP 输入 15
- 1.10.3 UDP 输入 16
- 1.10.4 进程输入 17
- 1.11 网络实现概述(续)17
- 1.12 中断级别与并发 18
- 1.13 源代码组织 20
- 1.14 测试网络 21
- 1.15 小结 22
第 2 章 mbuf:存储器缓存 24
- 2.1 引言 24
- 2.2 代码介绍 27
- 2.2.1 全局变量 27
- 2.2.2 统计 28
- 2.2.3 内核统计 28
- 2.3 mbuf 的定义 29
- 2.4 mbuf 结构 29
- 2.5 简单的 mbuf 宏和函数 31
- 2.5.1 m_get 函数 32
- 2.5.2 MGET 宏 32
- 2.5.3 m_retry 函数 33
- 2.5.4 mbuf 锁 34
- 2.6 m_devget 和 m_pullup 函数 34
- 2.6.1 m_devget 函数 34
- 2.6.2 mtod 和 dtom 宏 36
- 2.6.3 m_pullup 函数和连续的协议首部 36
- 2.6.4 m_pullup 和 IP 的分片与重组 37
- 2.6.5 TCP 重组避免调用 m_pullup39
- 2.6.6 m_pullup 使用总结 40
- 2.7 mbuf 宏和函数的小结 40
- 2.8 Net/3 联网数据结构小结 42
- 2.9 m_copy 和簇引用计数 43
- 2.10 其他选择 47
- 2.11 小结 47
第 3 章 接口层 49
- 3.1 引言 49
- 3.2 代码介绍 49
- 3.2.1 全局变量 49
- 3.2.2 SNMP 变量 50
- 3.3 ifnet 结构 51
- 3.4 ifaddr 结构 57
- 3.5 sockaddr 结构 58
- 3.6 ifnet 与 ifaddr 的专用化 59
- 3.7 网络初始化概述 60
- 3.8 以太网初始化 61
- 3.9 SLIP 初始化 64
- 3.10 环回初始化 65
- 3.11 if_attach 函数 66
- 3.12 ifinit 函数 72
- 3.13 小结 73
第 4 章 接口:以太网 74
- 4.1 引言 74
- 4.2 代码介绍 75
- 4.2.1 全局变量 75
- 4.2.2 统计量 75
- 4.2.3 SNMP 变量 76
- 4.3 以太网接口 77
- 4.3.1 leintr 函数 79
- 4.3.2 leread 函数 79
- 4.3.3 ether_input 函数 81
- 4.3.4 ether_output 函数 84
- 4.3.5 lestart 函数 87
- 4.4 ioctl 系统调用 89
- 4.4.1 ifioctl 函数 90
- 4.4.2 ifconf 函数 91
- 4.4.3 举例 94
- 4.4.4 通用接口 ioctl 命令 95
- 4.4.5 if_down 和 if_up 函数 96
- 4.4.6 以太网、SLIP 和环回 97
- 4.5 小结 98
第 5 章 接口:SLIP 和环回 100
- 5.1 引言 100
- 5.2 代码介绍 100
- 5.2.1 全局变量 100
- 5.2.2 统计量 101
- 5.3 SLIP 接口 101
- 5.3.1 SLIP 线路规程:SLIPDISC101
- 5.3.2 SLIP 初始化:slopen 和 slinit103
- 5.3.3 SLIP 输入处理:slinput105
- 5.3.4 SLIP 输出处理:sloutput109
- 5.3.5 slstart 函数 111
- 5.3.6 SLIP 分组丢失 116
- 5.3.7 SLIP 性能考虑 117
- 5.3.8 slclose 函数 117
- 5.3.9 sltioctl 函数 118
- 5.4 环回接口 119
- 5.5 小结 121
第 6 章 IP 编址 123
- 6.1 引言 123
- 6.1.1 IP 地址 123
- 6.1.2 IP 地址的印刷规定 123
- 6.1.3 主机和路由器 124
- 6.2 代码介绍 125
- 6.3 接口和地址小结 125
- 6.4 sockaddr_in 结构 126
- 6.5 in_ifaddr 结构 127
- 6.6 地址指派 128
- 6.6.1 ifioctl 函数 130
- 6.6.2 in_control 函数 130
- 6.6.3 前提条件:SIOCSIFADDR、SIOCSIFNETMASK 和 SIOCSIFDSTADDR132
- 6.6.4 地址指派:SIOCSIFADDR133
- 6.6.5 in_ifinit 函数 133
- 6.6.6 网络掩码指派:SIOCSIFNETMASK136
- 6.6.7 目的地址指派:SIOCSIFDSTADDR137
- 6.6.8 获取接口信息 137
- 6.6.9 每个接口多个 IP 地址 138
- 6.6.10 附加 IP 地址:SIOCAIFADDR139
- 6.6.11 删除 IP 地址:SIOCDIFADDR140
- 6.7 接口 ioctl 处理 141
- 6.7.1 leioctl 函数 141
- 6.7.2 slioctl 函数 142
- 6.7.3 loioctl 函数 143
- 6.8 Internet 实用函数 144
- 6.9 ifnet 实用函数 144
- 6.10 小结 145
第 7 章 域和协议 146
- 7.1 引言 146
- 7.2 代码介绍 146
- 7.2.1 全局变量 147
- 7.2.2 统计量 147
- 7.3 domain 结构 147
- 7.4 protosw 结构 148
- 7.5 IP 的 domain 和 protosw 结构 150
- 7.6 pffindproto 和 pffindtype 函数 155
- 7.7 pfctlinput 函数 157
- 7.8 IP 初始化 157
- 7.8.1 Internet 传输分用 157
- 7.8.2 ip_init 函数 158
- 7.9 sysctl 系统调用 159
- 7.10 小结 161
第 8 章 IP:网际协议 162
- 8.1 引言 162
- 8.2 代码介绍 163
- 8.2.1 全局变量 163
- 8.2.2 统计量 163
- 8.2.3 SNMP 变量 164
- 8.3 IP 分组 165
- 8.4 输入处理:ipintr 函数 167
- 8.4.1 ipintr 概观 167
- 8.4.2 验证 168
- 8.4.3 转发或不转发 171
- 8.4.4 重装和分用 173
- 8.5 转发:ip_forward 函数 174
- 8.6 输出处理:ip_output 函数 180
- 8.6.1 首部初始化 181
- 8.6.2 路由选择 182
- 8.6.3 源地址选择和分片 184
- 8.7 Internet 检验和:in_cksum 函数 186
- 8.8 setsockopt 和 getsockopt 系统调用 190
- 8.8.1 PRCO_SETOPT 的处理 192
- 8.8.2 PRCO_GETOPT 的处理 193
- 8.9 ip_sysctl 函数 193
- 8.10