📄 一句话概括
close() 拆管道——Web 的一方先说完了就先关;四阶段走完,第一章的活交给了下一章。
📝 本节和前面几节的关系
数据走完了;本篇收尾——管道怎么拆、第一章怎么收。
一、谁先关
Web 的典型节奏:服务器发完响应就先 close; 浏览器收到关断通知后也 close 自己那头。 两边各自交还资源,管道消失。
二、第一章复盘
解析 URL(1.1)→ 查 IP(1.2~1.3)→ 委托四阶段(1.4)—— 浏览器侧的全部工作到此完成; 消息进了协议栈,下一章接手。
三、动手 Demo:断开,谁先说完谁先关
断开的时序与全书接力点:
for s in ['浏览器: 数据收齐 -> 可以关吗?',
'服务器: 我也发完了 -> close()',
'浏览器: 收到通知 -> close()',
'复盘: 解析URL -> 查IP -> socket四阶段 -> 交棒第二章']:
print(s)
实跑输出:
--------------------------------------------------------------------
断开,谁先说完谁先关
--------------------------------------------------------------------
Web 的典型节奏:请求-响应各一轮就完事。
浏览器: 数据收齐了 -> 服务器可以关吗?
服务器: 我也发完了 -> close()
浏览器: 收到关断通知 -> close()
断开不是拉闸断电:管道拆掉前,双方各自的套接字里
记着【这条管道不再用了】,协议栈把资源交还内存。
四阶段连起来复盘:socket -> connect -> write/read -> close
这就是应用程序看到的网络——一套普通函数调用,
复杂的全被协议栈兜住了。
教材把四连接断开简化成【一方先关】;TCP 层的四次挥手 细节 12 课 3.18 有展开,第二章也会回到协议栈内部。
30 秒实验
- 在 Python 里 close 掉 socket 再 write,看报错(管道已拆)。
- 用 netstat 看一次 HTTP 连接从建立到消失的状态变化。
- 把第一章四步用自己的话讲一遍——讲得出就是真懂了。
常见误区
- 以为断开是【断网】——只是这条管道不再用,网络还在。
- 以为必须客户端先关——谁先说完谁先关。
自测三问(点开对答案)
1. close 做的是什么? —— 拆管道、交还资源。 2. Web 场景谁先 close? —— 先发完的一方(典型是服务器)。 3. 第一章结束时,消息走到了哪一站? —— 交给了协议栈(第二章的起点)。- ☐ 下一章(第二章 用电信号传输TCP/IP数据)
相关笔记
- 数据收发操作概览 —— 四阶段的起点,与末篇呼应
- 对应用程序的数据进行可靠传输(TCP) —— 断开在 TCP 层的样子
- 🔌 网络是怎样连接的 · 索引