🔌 第一章 浏览器生成消息
📄 一句话概括

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 秒实验

  1. 在 Python 里 close 掉 socket 再 write,看报错(管道已拆)。
  2. 用 netstat 看一次 HTTP 连接从建立到消失的状态变化。
  3. 把第一章四步用自己的话讲一遍——讲得出就是真懂了。

常见误区

  1. 以为断开是【断网】——只是这条管道不再用,网络还在。
  2. 以为必须客户端先关——谁先说完谁先关。
自测三问(点开对答案) 1. close 做的是什么? —— 拆管道、交还资源。 2. Web 场景谁先 close? —— 先发完的一方(典型是服务器)。 3. 第一章结束时,消息走到了哪一站? —— 交给了协议栈(第二章的起点)。

相关笔记