TCP/IP详解 卷1:协议
译者序
前言
第1章 概述 1
1.1 引言 1
1.2 分层 1
1.3 TCP/IP的分层 4
1.4 互联网的地址 5
1.5 域名系统 6
1.6 封装 6
1.7 分用 8
1.8 客户-服务器模型 8
1.9 端口号 9
1.10 标准化过程 10
1.11 RFC 10
1.12 标准的简单服务 11
1.13 互联网 12
1.14 实现 12
1.15 应用编程接口 12
1.16 测试网络 13
1.17 小结 13
第2章 链路层 15
2.1 引言 15
2.2 以太网和IEEE 802封装 15
2.3 尾部封装 17
2.4 SLIP:串行线路IP 17
2.5 压缩的SLIP 18
2.6 PPP:点对点协议 18
2.7 环回接口 20
2.8 最大传输单元MTU 21
2.9 路径MTU 21
2.10 串行线路吞吐量计算 21
2.11 小结 22
第3章 IP:网际协议 24
3.1 引言 24
3.2 IP首部 24
3.3 IP路由选择 27
3.4 子网寻址 30
3.5 子网掩码 32
3.6 特殊情况的IP地址 33
3.7 一个子网的例子 33
3.8 ifconfig命令 35
3.9 netstat命令 36
3.10 IP的未来 36
3.11 小结 37
第4章 ARP:地址解析协议 38
4.1 引言 38
4.2 一个例子 38
4.3 ARP高速缓存 40
4.4 ARP的分组格式 40
4.5 ARP举例 41
4.5.1 一般的例子 41
4.5.2 对不存在主机的ARP请求 42
4.5.3 ARP高速缓存超时设置 43
4.6 ARP代理 43
4.7 免费ARP 45
4.8 arp命令 45
4.9 小结 46
第5章 RARP:逆地址解析协议 47
5.1 引言 47
5.2 RARP的分组格式 47
5.3 RARP举例 47
5.4 RARP服务器的设计 48
5.4.1 作为用户进程的RARP服务器 49
5.4.2 每个网络有多个RARP服务器 49
5.5 小结 49
第6章 ICMP:Internet控制报文协议 50
6.1 引言 50
6.2 ICMP报文的类型 50
6.3 ICMP地址掩码请求与应答 52
6.4 ICMP时间戳请求与应答 53
6.4.1 举例 54
6.4.2 另一种方法 55
6.5 ICMP端口不可达差错 56
6.6 ICMP报文的4.4BSD处理 59
6.7 小结 60
第7章 Ping程序 61
7.1 引言 61
7.2 Ping程序 61
7.2.1 LAN输出 62
7.2.2 WAN输出 63
7.2.3 线路SLIP链接 64
7.2.4 拨号SLIP链路 65
7.3 IP记录路由选项 65
7.3.1 通常的例子 66
7.3.2 异常的输出 68
7.4 IP时间戳选项 69
7.5 小结 70
第8章 Traceroute程序 71
8.1 引言 71
8.2 Traceroute 程序的操作 71
8.3 局域网输出 72
8.4 广域网输出 75
8.5 IP源站选路选项 76
8.5.1 宽松的源站选路的traceroute
程序示例 78
8.5.2 严格的源站选路的traceroute
程序示例 79
8.5.3 宽松的源站选路traceroute程序
的往返路由 80
8.6 小结 81
第9章 IP选路 83
9.1 引言 83
9.2 选路的原理 84
9.2.1 简单路由表 84
9.2.2 初始化路由表 86
9.2.3 较复杂的路由表 87
9.2.4 没有到达目的地的路由 87
9.3 ICMP主机与网络不可达差错 88
9.4 转发或不转发 89
9.5 ICMP重定向差错 89
9.5.1 一个例子 90
9.5.2 更多的细节 91
9.6 ICMP路由器发现报文 92
9.6.1 路由器操作 93
9.6.2 主机操作 93
9.6.3 实现 93
9.7 小结 94
第10章 动态选路协议 95
10.1 引言 95
10.2 动态选路 95
10.3 Unix选路守护程序 96
10.4 RIP:选路信息协议 96
10.4.1 报文格式 96
10.4.2 正常运行 97
10.4.3 度量 98
10.4.4 问题 98
10.4.5 举例 98
10.4.6 另一个例子 100
10.5 RIP版本2 102
10.6 OSPF:开放最短路径优先 102
10.7 BGP:边界网关协议 103
10.8 CIDR:无类型域间选路 104
10.9 小结 105
第11章 UDP:用户数据报协议 107
11.1 引言 107
11.2 UDP首部 107
11.3 UDP检验和 108
11.3.1 tcpdump输出 109
11.3.2 一些统计结果 109
11.4 一个简单的例子 110
11.5 IP分片 111
11.6 ICMP不可达差错(需要分片) 113
11.7 用Traceroute确定路径MTU 114
11.8 采用UDP的路径MTU发现 116
11.9 UDP和ARP之间的交互作用 118
11.10 最大UDP数据报长度 119
11.11 ICMP源站抑制差错 120
11.12 UDP服务器的设计 122
11.12.1 客户IP地址及端口号 122
11.12.2 目标IP地址 122
11.12.3 UDP输入队列 122
11.12.4 限制本地IP地址 124
11.12.5 限制远端IP地址 125
11.12.6 每个端口有多个接收者 125
11.13 小结 126
第12章 广播和多播 128
12.1 引言 128
12.2 广播 129
12.2.1 受限的广播 129
12.2.2 指向网络的广播 129
12.2.3 指向子网的广播 129
12.2.4 指向所有子网的广播 130
12.3 广播的例子 130
12.4 多播 132
12.4.1 多播组地址 133
12.4.2 多播组地址到以太网地址的转换 133
12.4.3 FDDI和令牌环网络中的多播 134
12.5 小结 134
第13章 IGMP:Internet组管理协议 136
13.1 引言 136
13.2 IGMP报文 136
13.3 IGMP协议 136
13.3.1 加入一个多播组 136
13.3.2 IGMP报告和查询 137
13.3.3 实现细节 137
13.3.4 生存时间字段 138
13.3.5 所有主机组 138
13.4 一个例子 138
13.5 小结 141
第14章 DNS:域名系统 142
14.1 引言 142
14.2 DNS基础 142
14.3 DNS的报文格式 144
14.3.1 DNS查询报文中的问题部分 146
14.3.2 DNS响应报文中的资源记录部分 147
14.4 一个简单的例子 147
14.5 指针查询 150
14.5.1 举例 151
14.5.2 主机名检查 151
14.6 资源记录 152
14.7 高速缓存 153
14.8 用UDP还是用TCP 156
14.9 另一个例子 156
14.10 小结 157
第15章 TFTP:简单文件传送协议 159
15.1 引言 159
15.2 协议 159
15.3 一个例子 160
15.4 安全性 161
15.5 小结 162
第16章 BOOTP: 引导程序协议 163
16.1 引言 163
16.2 BOOTP的分组格式 163
16.3 一个例子 164
16.4 BOOTP服务器的设计 165
16.5 BOOTP穿越路由器 167
16.6 特定厂商信息 167
16.7 小结 168
第17章 TCP:传输控制协议 170
17.1 引言 170
17.2 TCP的服务 170
17.3 TCP的首部 171
17.4 小结 173
第18章 TCP连接的建立与终止 174
18.1 引言 174
18.2 连接的建立与终止 174
18.2.1 tcpdump的输出 174
18.2.2 时间系列 175
18.2.3 建立连接协议 175
18.2.4 连接终止协议 177
18.2.5 正常的tcpdump输出 177
18.3 连接建立的超时 178
18.3.1 第一次超时时间 178
18.3.2 服务类型字段 179
18.4 最大报文段长度 179
18.5 TCP的半关闭 180
18.6 TCP的状态变迁图 182
18.6.1 2MSL等待状态 183
18.6.2 平静时间的概念 186
18.6.3 FIN_WAIT_2状态 186
18.7 复位报文段 186
18.7.1 到不存在的端口的连接请求 187
18.7.2 异常终止一个连接 187
18.7.3 检测半打开连接 188
18.8 同时打开 189
18.9 同时关闭 191
18.10 TCP选项 191
18.11 TCP服务器的设计 192
18.11.1 TCP服务器端口号 193
18.11.2 限定的本地IP地址 194
18.11.3 限定的远端IP地址 195
18.11.4 呼入连接请求队列 195
18.12 小结 197
第19章 TCP的交互数据流 200
19.1 引言 200
19.2 交互式输入 200
19.3 经受时延的确认 201
19.4 Nagle算法 203
19.4.1 关闭Nagle算法 204
19.4.2 一个例子 205
19.5 窗口大小通告 207
19.6 小结 208
第20章 TCP的成块数据流 209
20.1 引言 209
20.2 正常数据流 209
20.3 滑动窗口 212
20.4 窗口大小 214
20.5 PUSH标志 215
20.6 慢启动 216
20.7 成块数据的吞吐量 218
20.7.1 带宽时延乘积 220
20.7.2 拥塞 220
20.8 紧急方式 221
20.9 小结 224
第21章 TCP的超时与重传 226
21.1 引言 226
21.2 超时与重传的简单例子 226
21.3 往返时间测量 227
21.4 往返时间RTT的例子 229
21.4.1 往返时间RTT的测量 229
21.4.2 RTT估计器的计算 231
21.4.3 慢启动 233
21.5 拥塞举例 233
21.6 拥塞避免算法 235
21.7 快速重传与快速恢复算法 236
21.8 拥塞举例(续) 237
21.9 按每条路由进行度量 240
21.10 ICMP的差错 240
21.11 重新分组 243
21.12 小结 243
第22章 TCP的坚持定时器 245
22.1 引言 245
22.2 一个例子 245
22.3 糊涂窗口综合症 246
22.4 小结 250
第23章 TCP的保活定时器 251
23.1 引言 251
23.2 描述 252
23.3 保活举例 253
23.3.1 另一端崩溃 253
23.3.2 另一端崩溃并重新启动 254
23.3.3 另一端不可达 254
23.4 小结 255
第24章 TCP的未来和性能 256
24.1 引言 256
24.2 路径MTU发现 256
24.2.1 一个例子 257
24.2.2 大分组还是小分组 258
24.3 长肥管道 259
24.4 窗口扩大选项 262
24.5 时间戳选项 263
24.6 PAWS:防止回绕的序号 265
24.7 T/TCP:为事务用的TCP扩展 265
24.8 TCP的性能 267
24.9 小结 268
第25章 SNMP:简单网络管理协议 270
25.1 引言 270
25.2 协议 270
25.3 管理信息结构 272
25.4 对象标识符 274
25.5 管理信息库介绍 274
25.6 实例标识 276
25.6.1 简单变量 276
25.6.2 表格 276
25.6.3 字典式排序 277
25.7 一些简单的例子 277
25.7.1 简单变量 278
25.7.2 get-next操作 278
25.7.3 表格的访问 279
25.8 管理信息库(续) 279
25.8.1 system组 279
25.8.2 interface组 280
25.8.3 at组 281
25.8.4 ip组 282
25.8.5 icmp组 285
25.8.6 tcp组 285
25.9 其他一些例子 288
25.9.1 接口MTU 288
25.9.2 路由表 288
25.10 trap 290
25.11 ASN.1和BER 291
25.12 SNMPv2 292
25.13 小结 292
第26章 Telnet和Rlogin:远程登录 293
26.1 引言 293
26.2 Rlogin协议 294
26.2.1 应用进程的启动 295
26.2.2 流量控制 295
26.2.3 客户的中断键 296
26.2.4 窗口大小的改变 296
26.2.5 服务器到客户的命令 296
26.2.6 客户到服务器的命令 297
26.2.7 客户的转义符 298
26.3 Rlogin的例子 298
26.3.1 初始的客户-服务器协议 298
26.3.2 客户中断键 299
26.4 Telnet协议 302
26.4.1 NVT ASCII 302
26.4.2 Telnet命令 302
26.4.3 选项协商 303
26.4.4 子选项协商 304
26.4.5 半双工、一次一字符、一次
一行或行方式 304
26.4.6 同步信号 306
26.4.7 客户的转义符 306
26.5 Telnet举例 306
26.5.1 单字符方式 306
26.5.2 行方式 310
26.5.3 一次一行方式(准行方式) 312
26.5.4 行方式:客户中断键 313
26.6 小结 314
第27章 FTP:文件传送协议 316
27.1 引言 316
27.2 FTP协议 316
27.2.1 数据表示 316
27.2.2 FTP命令 318
27.2.3 FTP应答 319
27.2.4 连接管理 320
27.3 FTP的例子 321
27.3.1 连接管理:临时数据端口 321
27.3.2 连接管理:默认数据端口 323
27.3.3 文本文件传输:NVT ASCII
表示还是图像表示 325
27.3.4 异常中止一个文件的传输:
Telnet同步信号 326
27.3.5 匿名FTP 329
27.3.6 来自一个未知IP地址的匿名FTP 330
27.4 小结 331
第28章 SMTP:简单邮件传送协议 332
28.1 引言 332
28.2 SMTP协议 332
28.2.1 简单例子 332
28.2.2 SMTP命令 334
28.2.3 信封、首部和正文 335
28.2.4 中继代理 335
28.2.5 NVT ASCII 337
28.2.6 重试间隔 337
28.3 SMTP的例子 337
28.3.1 MX记录:主机非直接连到
Internet 337
28.3.2 MX记录:主机出故障 339
28.3.3 VRFY和EXPN命令 340
28.4 SMTP的未来 340
28.4.1 信封的变化:扩充的SMTP 341
28.4.2 首部变化:非ASCII字符 342
28.4.3 正文变化:通用Internet邮件
扩充 343
28.5 小结 346
第29章 网络文件系统 347
29.1 引言 347
29.2 Sun远程过程调用 347
29.3 XDR:外部数据表示 349
29.4 端口映射器 349
29.5 NFS协议 351
29.5.1 文件句柄 353
29.5.2 安装协议 353
29.5.3 NFS过程 354
29.5.4 UDP还是TCP 355
29.5.5 TCP上的NFS 355
29.6 NFS实例 356
29.6.1 简单的例子:读一个文件 356
29.6.2 简单的例子:创建一个目录 357
29.6.3 无状态 358
29.6.4 例子:服务器崩溃 358
29.6.5 等幂过程 360
29.7 第3版的NFS 360
29.8 小结 361
第30章 其他的TCP/IP应用程序 363
30.1 引言 363
30.2 Finger协议 363
30.3 Whois协议 364
30.4 Archie、WAIS、Gopher、Veronica和WWW 366
30.4.1 Archie 366
30.4.2 WAIS 366
30.4.3 Gopher 366
30.4.4 Veronica 366
30.4.5 万维网WWW 367
30.5 X窗口系统 367
30.5.1 Xscope程序 368
30.5.2 LBX: 低带宽X 370
30.6 小结 370
附录A tcpdump程序 371
附录B 计算机时钟 376
附录C sock程序 378
附录D 部分习题的解答 381
附录E 配置选项 395
附录F 可以免费获得的源代码 406
参考文献 409
缩略语 420
=================================== TCP/IP详解 卷2:实现 ================
第一章 概述
1.1 引言
1.2 源代码表示
1.3 历史
1.4 应用编程接口
1.5 程序示例
1.6 系统调用和库函数
1.7 描述符
1.8 网络实现概述
1.9 mbuf与输出处理
1.10 输入处理
1.11 网络实现概述
1.12 中断级别与并发
1.13 源代码组织
1.14 测试网络
1.15 小结
第二章 mduf:存储器缓存
2.1 引言
2.2 代码介绍
2.3 mduf的定义
2.4 mduf结构
2.5 简单的mduf宏和函数
2.6 m_devget和m_pullup函数
2.7 mduf宏和函数的小结
2.8 Net/3联网数据结构小结
2.9 m_copy和簇引用记数
2.10 其他选择
2.11 小结
第三章 接口层
3.1 引言
3.2 代码介绍
3.3 ifnet结构
3.4 ifaddr结构
3.5 sockaddr结构
3.6 ifnet与ifaddr的专用化
3.7 网络初始化概述
3.8 以太网初始化
3.9 SLIP初始化
3.10 环回初始化
3.11 if_attach函数
3.12 ifinit函数
3.13 小结
第四章 接口:以太网
4.1 引言
4.2 代码介绍
4.3 以太网接口
4.4 ioctl系统调用
4.5 小结
第五章 接口:SLIP和环回
5.1 引言
5.2 代码介绍
5.3 SLIP接口
5.4 环回接口
5.5 小结
第六章 IP编址
6.1 引言
6.2 代码介绍
6.3 接口和地址小结
6.4 sockaddr_in结构
6.5 in_ifaddr结构
6.6 地址指派
6.7 接口ioctl处理
6.8 internet实用函数
6.9 ifnet实用函数
6.10 小结
第七章 域和协议
7.1 引言
7.2 代码介绍
7.3 domain结构
7.4 protosw结构
7.5 IP的domain和protosw结构
7.6 pffindproto和pffindtype函数
7.7 pfctlinput函数
7.8 IP初始化
7.9 sysctl系统调用
7.10 小结
第八章 IP:网际协议
8.1 引言
8.2 代码介绍
8.3 IP分组
8.4 输入处理:ipintr函数
8.5 转发:ip_forward函数
8.6 输出处理:ip_output函数
8.7 Internet检验和:in_cksum函数
8.8 setsockopt和getsockopt系统调用
8.9 ip_sysctl函数
8.10 小结
第九章 IP选项处理
9.1 引言
9.2 代码介绍
9.3 选项格式
9.4 ip_dooptions函数
9.5 记录路由选项
9.6 源站和记录路由选项
9.7 时间戳选项
9.8 ip_insertoptions函数
9.9 ip_pcbopts函数
9.10 一些限制
9.11 小结
第十章 IP的分片与重装
10.1 引言
10.2 代码介绍
10.3 分片
10.4 ip_optcopy函数
10.5 重装
10.6 ip_optcopy函数
10.7 ip_slowtimo函数
10.8 小结
第十一章 ICMP:Internet控制报文协议
11.1 引言
11.2 代码介绍
11.3 icmp结构
11.4 ICMP的protosw结构
11.5 输入处理:icmp_input函数
11.6 差别处理
11.7 请求处理
11.8 重定向处理
11.9 回答问题
11.10 输出处理
11.11 icmp_error函数
11.12 icmp_reflect函数
11.13 icmp_send函数
11.14 icmp_sysctl函数
11.15 小结
第十二章 IP多播
12.1 引言
12.2 代码介绍
12.3 以太网多播地址
12.4 ether_multi结构
12.5 以太网多播接收
12.6 in_multi结构
12.7 ip_moptions结构
12.8 多播的插口选项
12.9 多播的TTL值
12.10 ip_setmoptions函数
12.11 加入一个IP多播组
12.12 离开一个IP多播组
12.13 ip_getmoptions函数
12.14 多播输入处理:ipintr函数
12.15 多播输出处理:ip_output函数
12.16 性能的考虑
12.17 小结
第十三章 IGMP:Internet组管理协议
13.1 引言
13.2 代码介绍
13.3 igmp结构
13.4 IGMP的protosw结构
13.5 加入一个组:igmp_joingroup函数
13.6 igmp_fasttimo函数
13.7 输入处理:igmp_input函数
13.8 离开一个组:igmp_leavegroup函数
13.9 小结
第十四章 IP多播选路
14.1 引言
14.2 代码介绍
14.3 多播输出处理
14.4 mrouted守护程序
14.5 虚拟接口
14.6 IGMP
14.7 多播选路
14.8 多播转发:ip_mforward函数
14.9 清理:ip_mrouter_done函数
14.10 小结
第十五章 插口层
15.1 引言
15.2 代码介绍
15.3 socket介绍
15.4 系统调用
15.5 进程,描述符和插口
15.6 socket系统调用
15.7 getsock和sockargs函数
15.8 bind系统调用
15.9 listen系统调用
15.10 tsleep和wakeup函数
15.11 accept系统调用
15.12 sonewconn和soisconnected函数
15.13 connect系统调用
15.14 shutdown系统调用
15.15 close系统调用
15.16 小结
第十六章 插口I/O
16.1 引言
16.2 代码介绍
16.3 插口缓存
16.4 write,writev,sendto和sendmsg系统调用
16.5 sendmsg系统调用
16.6 sendit函数
16.7 sosend函数
16.8 read,readv,recvfrom和recvmsg系统调用
16.9 recvgsm系统调用
16.10 soreceive函数
16.11 recvit函数
16.12 soreceive代码
16.13 select系统调用
16.14 小结
第十七章 插口选项
17.1 引言
17.2 代码介绍
17.3 setsockopt系统调用
17.4 getsockopt系统调用
17.5 fcntl和ioctl系统调用
17.6 getsockname系统调用
17.7 getpeername系统调用
17.8 小结
第十八章 Radix树路由表
18.1 引言
18.2 路由表结构
18.3 选路插口
18.4 代码介绍
18.5 Radix结点数据结构
18.6 选路结构
18.7 初始化:route_init和rtable_init函数
18.8 初始化:rn_init和rn_inithead
18.9 重复键和掩码列表
18.10 rn_match函数
18.11 rn_search函数
18.12 小结
第十九章 选路请求和选路消息
19.1 引言
19.2 rtalloc和rtallocl函数
19.3 宏RTFREE和rtfree函数
19.4 rtrequest函数
19.5 rt_setgate函数
19.6 rtinit函数
19.7 rtredirect函数
19.8 选路消息的结构
19.9 rt_missmsg函数
19.10 rt_ifmsg函数
19.11 rt_newaddrmsg函数
19.12 rt_msg1函数
19.13 rt_msg2函数
19.14 sysctl_rtable函数
19.15 sysctl_dumpentry函数
19.16 sysctl_iflist函数
19.17 小结
第二十章 选路接口
20.1 引言
20.2 routedomain和protosw结构
20.3 选路控制块
20.4 raw_init函数
20.5 route_output函数
20.6 rt_xaddrs函数
20.7 rt_setmetrics函数
20.8 raw_input函数
20.9 route_usrreq函数
20.10 raw_usrreq函数
20.11 raw_attach,raw_detach和raw_disconnect函数
20.12 小结
第二十一章 ARP:地址解析协议
21.1 介绍
21.2 ARP和路由表
21.3 代码介绍
21.4 ARP结构
21.5 arpwhohas函数
21.6 arprequest函数
21.7 arpintr函数
21.8 in_arpinput函数
21.9 ARP定时器函数
21.10 arpresolve函数
21.11 arplookup函数
21.12 代理ARP
21.13 arp_rtrequest函数
21.14 ARP和多播
21.15 小结
第二十二章 协议控制块
22.1 引言
22.2 代码介绍
22.3 inpcb结构
22.4 in_pcballoc和in_pcbdetach函数
22.5 绑定,连接和分用
22.6 in_pcblookup函数
22.7 in_pcbbind函数
22.8 in_pcbconnect函数
22.9 in_pcbdisconnect函数
22.10 in_setsockaddr和in_setpeeraddr函数
22.11 in_pcbnotify,in_rtchange和in_losing函数
22.12 实现求精
22.13 小结
第二十三章 UDP:用户数据报协议
23.1 引言
23.2 代码介绍
23.4 UDP的protosw结构
23.5 udp_init函数
23.6 udp_output函数
23.7 udp_saveopt函数
23.8 udp_ctlinput函数
23.9 udp_usrreq函数
23.10 udp_sysctl函数
23.11 udp_input函数
23.12 实现求精
23.13 小结
第二十四章 TCP:传输控制协议
24.1 引言
24.2 代码介绍
24.3 TCP的protosw结构
24.4 TCP的首部
24.5 TCP的控制块
24.6 TCP的状态变迁图
24.7 TCP的序号
24.8 tcp_init函数
24.9 小结
第二十五章 TCP的定时器
25.1 引言
25.2 代码介绍
25.3 tcp_canceltimers函数
25.4 tcp_fasttimo函数
25.5 tcp_slowtimo函数
25.6 tcp_timers函数
25.7 重传定时器的计算
25.8 tcp_newtcpcb算法
25.9 tcp_setpersist函数
25.10 tcp_xmit_timer函数
25.11 重传超时:tcp_timers函数
25.12 一个RTT的例子
25.13 小结
第二十六章 TCP输出
26.1 引言
26.2 tcp_output概述
26.3 决定是否应发送一个报文段
26.4 TCP选项
26.5 窗口大小选项
26.6 时间戳选项
26.7 发送一个报文段
26.8 tcp_template函数
26.9 tcp_respond函数
26.10 小结
第二十七章 TCP的函数
27.1 引言
27.2 tcp_drain函数
27.3 tcp_drop函数
27.4 tcp_close函数
27.5 tcp_mss函数
27.6 tcp_ctlinput函数
27.7 tcp_notify函数
27.8 tcp_quench函数
27.9 TCP_REASS宏和tcp_reass函数
27.10 tcp_trace函数
27.11小结
第二十八章 TCP的输入
28.1 引言
28.2 预处理
28.3 tcp_dooptions函数
28.4 首部预测
28.5 TCP输入:缓慢的执行路径
28.6 完成被动打开或主动打开
28.7 PAWS:防止序号回饶
28.8 裁剪报文段使数据在窗口内
28.9 自连接和同时打开
28.10 记录时间戳
28.11 RST处理
28.12 小结
第二十九章 TCP的输入(续)
29.1 引言
29.2 ACK处理概述
29.3 完成被动打开和同时打开
29.4 快速重传和快速恢复的算法
29.5 ACK处理
29.6 更新窗口信息
29.7 紧急方式处理
29.8 tcp_pulloutofband函数
29.9 FIN处理
29.10 最后的处理
29.11 处理已接收的数据
29.12 实现求精
29.13 首部压缩
29.14 小结
第三十章 TCP的用户需求
30.1 引言
30.2 tcp_usrreq函数
30.3 tcp_attach函数
30.4 tcp_disconnect函数
30.5 tcp_usrclosed函数
30.6 tcp_ctloutput函数
30.7 小结
第三十一章 BPF:BSD分组过滤程序
31.1 引言
31.2 代码介绍
31.3 bpf_if结构
31.4 bpf_d结构
31.5 BPF的输入
31.6 BPF的输出
31.7 小结
第三十二章 原始IP
32.1 引言
32.2 代码介绍
32.3 原始IP的protosw结构
32.4 rip_init函数
32.5 rip_input函数
32.6 rip_output函数
32.7 rip_usrreq函数
32.8 rip_ctloutput函数
32.9 小结
结束语
附录A 部分习题的解答
附录B 源代码的获取
附录C RFC 1122的有关内容
参考文献
=================================== TCP/IP详解 卷3:TCP事务协议HTTPNNTP和UNIX域协议
译者序
前言
第一部分 TCP事务协议
第1章 T/TCP概述
1.1 概述
1.2 UDP上的客户-服务器
1.3 TCP上的客户-服务器
1.4 T/TCP上的客户-服务器
1.5 测试网络
1.6 时间测量程序
1.7 应用
1.8 历史
1.9 实现
1.10 小结
第2章 T/TCP协议
2.1 概述
2.2 T/TCP中的新TCP选项
2.3 T/TCP实现所需变量
2.4 状态变迁图
2.5 T/TCP的扩展状态
2.6 小结
第3章 T/TCP使用举例
3.1 概述
3.2 客户重新启动
3.3 常规的T/TCP事务
3.4 服务器收到过时的重复SYN
3.5 服务器重启动
3.6 请求或应答超出报文段最大长度MSS
3.7 向后兼容性
3.8 小结
第4章 T/TCP协议(续)
4.1 概述
4.2 客户的端口号和TIME_WAIT状态
4.3 设置TIME_WAIT状态的目的
4.4 TIME_WAIT状态的截断
4.5 利用TAO跳过三次握手
4.6 小结
第5章 T/TCP协议的实现:插口层
5.1 概述
5.2 常量
5.3 sosend函数
5.4 小结
第6章 T/TCP的实现:路由表
6.1 概述
6.2 代码介绍
6.3 radix_node_head结构
6.4 rtentry结构
6.5 rt_metrics结构
6.6 in_inithead函数
6.7 in_addroute函数
6.8 in_matroute函数
6.9 in_clsroute函数
6.10 in_rtqtimo函数
6.11 in_rtqkill函数
6.12 小结
第7章 T/TCP实现:协议控制块
7.1 概述
7.2 in_pcbladdr函数
7.3 in_pcbconnect函数
7.4 小结
第8章 T/TCP实现: TCP概要
8.1 概述
8.2 代码介绍
8.3 TCP的protosw结构
8.4 TCP控制块
8.5 tcp_init函数
8.6 tcp_slowtimo函数
8.7 小结
第9章 T/TCP实现:TCP输出
9.1 概述
9.2 tcp_output函数
9.2.1 新的自动变量
9.2.2 增加隐藏的状态标志
9.2.3 在SYN_SENT状态不要重传SYN
9.2.4 发送器的糊涂窗口避免机制
9.2.5 有RST或SYN标志时强制发送报文段
9.2.6 发送MSS选项
9.2.7 是否发送时间戳选项
9.2.8 发送T/TCP的CC选项
9.2.9 根据TCP选项调整数据长度
9.3 小结
第10章 T/TCP实现:TCP函数
10.1 概述
10.2 tcp_newtcpcb函数
10.3 tcp_rtlookup函数
10.4 tcp_gettaocache函数
10.5 重传超时间隔的计算
10.6 tcp_close函数
10.7 tcp_msssend函数
10.8 tcp_mssrcvd函数
10.9 tcp_dooptions函数
10.10 tcp_reass函数
10.11 小结
第11章 T/TCP实现:TCP输入
11.1 概述
11.2 预处理
11.3 首部预测
11.4 被动打开的启动
11.5 主动打开的启动
11.6 PAWS:防止序号重复
11.7 ACK处理
11.8 完成被动打开和同时打开
11.9 ACK处理(续)
11.10 FIN处理
11.11 小结
第12章 T/TCP实现:TCP用户请求
12.1 概述
12.2 PRU_CONNECT请求
12.3 tcp_connect函数
12.4 PRU_SEND和PRU_SEND_EOF请求
12.5 tcp_usrclosed函数
12.6 tcp_sysctl函数
12.7 T/TCP的前景
12.8 小结
第二部分 TCP的其他应用
第13章 HTTP:超文本传送协议
13.1 概述
13.2 HTTP和HTML概述
13.3 HTTP
13.3.1 报文类型:请求与响应
13.3.2 首部字段
13.3.3 响应代码
13.3.4 各种报文头举例
13.3.5 例子:客户程序缓存
13.3.6 例子:服务器重定向
13.4 一个例子
13.5 HTTP的统计资料
13.6 性能问题
13.7 小结
第14章 在HTTP服务器上找到的分组
14.1 概述
14.2 多个HTTP服务器
14.3 客户端SYN的到达间隔时间
14.4 RTT的测量
14.5 用listen设置入连接队列的容量
14.6 客户端的SYN选项
14.7 客户端的SYN重传
14.8 域名
14.9 超时的持续探测
14.10 T/TCP路由表大小的模拟
14.11 mbuf的交互
14.12 TCP的PCB高速缓存和首部预测
14.13 小结
第15章 NNTP:网络新闻传送协议
15.1 概述
15.2 NNTP
15.3 一个简单的新闻客户
15.4 一个复杂的新闻客户
15.5 NNTP的统计资料
15.6 小结
第三部分 Unix域协议
第16章 Unix域协议:概述
16.1 概述
16.2 用途
16.3 性能
16.4 编码举例
16.5 小结
第17章 Unix域协议:实现
17.1 概述
17.2 代码介绍
17.3 Unix domain和protosw结构
17.4 Unix域插口地址结构
17.5 Unix域协议控制块
17.6 uipc_usrreq函数
17.7 PRU_ATTACH请求和unp_attach函数
17.8 PRU_DETACH请求和unp_detach函数
17.9 PRU_BIND请求和unp_bind函数
17.10 PRU_CONNECT请求和unp_connect函数
17.11 PRU_CONNECT2请求和unp_connect2函数
17.12 socketpair系统调用
17.13 pipe系统调用
17.14 PRU_ACCEPT请求
17.15 PRU_DISCONNECT请求和unp_disconnect函数
17.16 PRU_SHUTDOWN请求和unp_shutdown函数
17.17 PRU_ABORT请求和unp_drop函数
17.18 其他各种请求
17.19 小结
第18章 Unix域协议:I/O和描述符的传递
18.1 概述
18.2 PRU_SEND和PRU_RCVD请求
18.3 描述符的传递
18.4 unp_internalize函数
18.5 unp_externalize函数
18.6 unp_discard函数
18.7 unp_dispose函数
18.8 unp_scan函数
18.9 unp_gc函数
18.10 unp_mark函数
18.11 性能(再讨论)
18.12 小结
附录A 测量网络时间
附录B 编写T/TCP应用程序
参考文献
缩略语
2023-03-05 23:32:47
57.52MB
TCPIP详解
1