第 11 章 网络编程
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。覆盖24个正式目录坐标。
直觉起点
、、、、共同构成本页的观察坐标。从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 先预测下一状态,再运行最小样本;最终输出正确并不证明中间制品、地址、资源和并发关系都正确。
六阶段因果链
1. 解析主机服务
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“第11章 网络编程”的学习不能停在定义:先在“解析主机服务”阶段写出输入和预测,再推进到“创建套接字”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
2. 创建套接字
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.1 客户端服务器编程模型”的学习不能停在定义:先在“创建套接字”阶段写出输入和预测,再推进到“建立连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
3. 建立连接
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.2 网络”的学习不能停在定义:先在“建立连接”阶段写出输入和预测,再推进到“收发可靠字节流”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
4. 收发可靠字节流
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.3 全球IP因特网”的学习不能停在定义:先在“收发可靠字节流”阶段写出输入和预测,再推进到“解析 HTTP”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
5. 解析 HTTP
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.3.1 IP地址”的学习不能停在定义:先在“解析 HTTP”阶段写出输入和预测,再推进到“关闭连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
6. 关闭连接
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.3.2 因特网域名”的学习不能停在定义:先在“关闭连接”阶段写出输入和预测,再推进到“解析主机服务”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
核心机制深挖
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 本页不把系统描述成若干孤立名词,而把每个概念放回“解析主机服务 → 创建套接字 → 建立连接 → 收发可靠字节流 → 解析 HTTP → 关闭连接”的状态机。输入包括源码、位模式、目标制品、地址、文件或网络字节;状态包括程序计数器、寄存器、缓存与页表、内核对象和同步关系;输出必须同时说明正常值、资源所有权和下一阶段可以依赖的承诺。
本页签发的不变量是:网络字节序、地址长度、监听与已连接套接字角色明确;应用协议能处理分段到达、错误输入、半关闭和资源释放。。不变量必须在转换前后都成立。只展示一次成功运行最多证明样本可用,不能证明边界安全;因此每项机制都配正常、边界、失败和恢复四条轨迹,并把“谁检测、谁清理、谁重试、谁向上报告”写进证据账本。
运行 echo 与 TINY,抓取 DNS、connect、accept、RIO 和 HTTP 事务的时序,再比较静态文件和 CGI 动态内容路径。 运行前先把预期写成状态快照,运行后逐字段比较。计时实验需要预热、重复和稳定输入;地址实验要记录位宽与权限;并发实验要记录同步边而非依赖偶然调度。这样才能把现象还原成可复查的因果链。
注入解析失败、端口占用、客户端提前断开、畸形请求和慢发送,验证服务器返回受控错误并关闭所有连接资源。 故障移除后必须用完全相同的输入重放,确认制品、机器状态、外部输出和清理结果一起恢复。若只修正最终输出,却留下描述符、子进程、堆块、锁或错误映射,验收仍然失败。
中文第三版采用 x86-64、Linux 和 Y86-64 教学处理器。现代 CPU、内核和工具链会改变微结构、默认安全机制与性能数值,但固定宽度表示、指令语义、缓存局部性、符号重定位、进程地址空间、字节流接口和同步不变量仍然成立。现代对照必须标明差异,不能覆盖原书问题身份。
正式目录逐项讲解
第11章 网络编程
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“第11章 网络编程”的学习不能停在定义:先在“解析主机服务”阶段写出输入和预测,再推进到“创建套接字”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.1 客户端服务器编程模型
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.1 客户端服务器编程模型”的学习不能停在定义:先在“创建套接字”阶段写出输入和预测,再推进到“建立连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.2 网络
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.2 网络”的学习不能停在定义:先在“建立连接”阶段写出输入和预测,再推进到“收发可靠字节流”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.3 全球IP因特网
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.3 全球IP因特网”的学习不能停在定义:先在“收发可靠字节流”阶段写出输入和预测,再推进到“解析 HTTP”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.3.1 IP地址
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.3.1 IP地址”的学习不能停在定义:先在“解析 HTTP”阶段写出输入和预测,再推进到“关闭连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.3.2 因特网域名
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.3.2 因特网域名”的学习不能停在定义:先在“关闭连接”阶段写出输入和预测,再推进到“解析主机服务”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.3.3 因特网连接
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.3.3 因特网连接”的学习不能停在定义:先在“解析主机服务”阶段写出输入和预测,再推进到“创建套接字”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4 套接字接口
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.4 套接字接口”的学习不能停在定义:先在“创建套接字”阶段写出输入和预测,再推进到“建立连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.1 套接字地址结构
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.4.1 套接字地址结构”的学习不能停在定义:先在“建立连接”阶段写出输入和预测,再推进到“收发可靠字节流”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.2 socket函数
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.4.2 socket函数”的学习不能停在定义:先在“收发可靠字节流”阶段写出输入和预测,再推进到“解析 HTTP”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.3 connect函数
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.4.3 connect函数”的学习不能停在定义:先在“解析 HTTP”阶段写出输入和预测,再推进到“关闭连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.4 bind函数
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.4.4 bind函数”的学习不能停在定义:先在“关闭连接”阶段写出输入和预测,再推进到“解析主机服务”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.5 listen函数
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.4.5 listen函数”的学习不能停在定义:先在“解析主机服务”阶段写出输入和预测,再推进到“创建套接字”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.6 accept函数
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.4.6 accept函数”的学习不能停在定义:先在“创建套接字”阶段写出输入和预测,再推进到“建立连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.7 主机和服务的转换
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.4.7 主机和服务的转换”的学习不能停在定义:先在“建立连接”阶段写出输入和预测,再推进到“收发可靠字节流”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.8 套接字接口的辅助函数
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.4.8 套接字接口的辅助函数”的学习不能停在定义:先在“收发可靠字节流”阶段写出输入和预测,再推进到“解析 HTTP”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.4.9 echo客户端和服务器的示例
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.4.9 echo客户端和服务器的示例”的学习不能停在定义:先在“解析 HTTP”阶段写出输入和预测,再推进到“关闭连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.5 Web服务器
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.5 Web服务器”的学习不能停在定义:先在“关闭连接”阶段写出输入和预测,再推进到“解析主机服务”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.5.1 Web基础
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.5.1 Web基础”的学习不能停在定义:先在“解析主机服务”阶段写出输入和预测,再推进到“创建套接字”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.5.2 Web内容
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.5.2 Web内容”的学习不能停在定义:先在“创建套接字”阶段写出输入和预测,再推进到“建立连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.5.3 HTTP事务
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.5.3 HTTP事务”的学习不能停在定义:先在“建立连接”阶段写出输入和预测,再推进到“收发可靠字节流”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.5.4 服务动态内容
从 IP 地址、域名和连接端点进入套接字接口,再以 echo 与 TINY Web 服务器贯通客户端服务器模型、HTTP 静态与动态内容。 对“11.5.4 服务动态内容”的学习不能停在定义:先在“收发可靠字节流”阶段写出输入和预测,再推进到“解析 HTTP”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.6 综合:TINY Web服务器
把字节流接口与应用协议分层,循环处理短计数、分段到达、EOF 和错误返回;每个描述符与连接都要有明确所有者。 对“11.6 综合:TINY Web服务器”的学习不能停在定义:先在“解析 HTTP”阶段写出输入和预测,再推进到“关闭连接”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
11.7 小结
这一小结不是术语列表,而是检查本章不变量“网络字节序、地址长度、监听与已连接套接字角色明确;应用协议能处理分段到达、错误输入、半关闭和资源释放。”是否已由正常、边界、失败和恢复四类样本共同支持。 对“11.7 小结”的学习不能停在定义:先在“关闭连接”阶段写出输入和预测,再推进到“解析主机服务”并记录机器可见状态。实验固定源码、工具链、输入和环境,只改变一个条件;若实际轨迹偏离预测,就保存首个分叉、责任接口与恢复结果。
状态与失败矩阵
| 观察层 | 正常轨迹 | 边界样本 | 失败证据 | 恢复条件 |
|---|---|---|---|---|
| 表示与制品 | 位宽、格式、符号明确 | 溢出、截断、缺失定义 | 字节、节与重定位位置 | 使用同一可追溯制品重放 |
| 机器与存储 | 指令和地址映射有效 | 冒险、未命中、缺页 | 首个寄存器或地址分叉 | 重置到已知机器状态 |
| 进程与资源 | 所有权和生命周期闭合 | 短计数、信号、容量 | 系统调用和资源快照 | 逆序清理后重试 |
| 通信与并发 | 协议和同步边完整 | 断连、交错、竞争 | 字节流、锁与进度图 | 相同输入可重复通过 |
先预测:如果在“建立连接”注入失败,哪一个状态字段应最先变化,后续哪一阶段必须停止提交副作用?完成预测后再操作实验控件。
可重放实验记录
trace = []
for stage in ["解析主机服务", "创建套接字", "建立连接", "收发可靠字节流", "解析 HTTP", "关闭连接"]:
expected = predict(stage, state)
actual = execute(stage, state)
trace.append({ stage, expected, actual, owner, cleanup })
stop_at_first_divergence(expected, actual)book: 深入理解计算机系统
edition: 中文第三版-2016-12
page: cap-11-network-programming
formal_scope: 第 11 章 网络编程
sample: normal | boundary | failure | recovery
predict_before_run: true
capture_first_divergence: true
replay_same_input: truefreeze source, toolchain, input, and environment
record bytes, addresses, machine state, resources, and synchronization
change exactly one condition
stop at the first divergent boundary
remove the fault and replay the same input
verify output and cleanup together常见误区与故障注入
四类样本与验收
| 样本 | 注入方式 | 必查证据 | 通过条件 |
|---|---|---|---|
| 正常 | 固定源码、工具链和输入 | 全阶段状态与输出 | 与预测一致 |
| 边界 | 极值、空输入、低容量 | 范围、终止与资源状态 | 不越界不泄漏 |
| 失败 | 错地址、缺依赖、断连或竞争 | 首个错误与责任层 | 失败被隔离 |
| 恢复 | 删除故障后重放 | 制品、状态、输出和清理 | 回到受控结果 |
练习
小结
- 客户端服务器:连接“解析主机服务”的输入与状态。
- IP 地址:连接“创建套接字”的责任接口。
- 套接字:连接“建立连接”的边界条件。
- HTTP 事务:连接“收发可靠字节流”的失败传播。
- TINY:连接“解析 HTTP”的恢复证据。
- 24个正式目录坐标已进入本页或全书运行链,不以泛化主题替代原书章节。
- 最终输出只是证据之一,制品、机器状态、资源和清理共同决定是否通过。