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

委托协议栈发消息分四阶段——创建套接字、连接、收发、断开;套接字是管道两端的接口,一切从【建一个】开始。

📝 本节和前面几节的关系

1.3 拿到 IP 了;本篇进入本章最后一节——把消息真正送出去的委托流程。

一、四阶段一张图

创建套接字(socket)→ 连接(connect)→ 收发(write/read)→ 断开(close)。 应用程序按顺序调这四个入口,其余全是协议栈的活。

二、套接字是什么

一根看不见的管道,两端各有一个口; 应用程序拿着【描述符】操作自己那头, 对面那头是服务器的套接字。

三、动手 Demo:委托协议栈的四阶段

四个阶段、四个函数、四句职责:

for ph, fn, do in [('1 创建套接字','socket()','建通信口,返回描述符'),
                 ('2 连接','connect()','把管道接到服务器'),
                 ('3 收发','write/read','塞数据、取数据'),
                 ('4 断开','close()','拆管道交还资源')]:
    print('%-8s %-14s %s' % (ph, fn, do))

实跑输出:

--------------------------------------------------------------------
委托协议栈的四阶段
--------------------------------------------------------------------
  从拿到 IP 到通信结束,四阶段一张图:

  阶段             调用的函数           干了什么
  ---------------------------------------------------------------
  1 创建套接字     socket()             建一个通信口,返回描述符
  2 连接           connect()            把管道接到服务器那边
  3 收发           write() / read()     塞数据、取数据
  4 断开           close()              拆管道,交还资源
  ---------------------------------------------------------------

  套接字是抽象的【管道口】——应用程序拿描述符操作它,
  真正的协议细节全在协议栈里。

这套形状 2026 年仍是所有 TCP 编程的入口—— 语言再新(Go、Rust、Node),底层还是这四步。

30 秒实验

  1. 在 Python 里用 socket 模块把四阶段各调一遍(对本地回环地址)。
  2. 只调 socket() 不 connect,看能不能 write(不能)。
  3. 想想为什么【建管道】要单独立一个阶段。

常见误区

  1. 以为 write 直接把数据写上网络——先过协议栈再出门。
  2. 以为四阶段是 HTTP 规定——它是 Socket API 的通用形状。
自测三问(点开对答案) 1. 四阶段按序是什么? —— 创建套接字、连接、收发、断开。 2. 应用程序操作套接字靠什么? —— 描述符。 3. 管道的另一端是谁? —— 服务器的套接字。

相关笔记