📄 一句话概括
委托协议栈发消息分四阶段——创建套接字、连接、收发、断开;套接字是管道两端的接口,一切从【建一个】开始。
📝 本节和前面几节的关系
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 秒实验
- 在 Python 里用 socket 模块把四阶段各调一遍(对本地回环地址)。
- 只调 socket() 不 connect,看能不能 write(不能)。
- 想想为什么【建管道】要单独立一个阶段。
常见误区
- 以为 write 直接把数据写上网络——先过协议栈再出门。
- 以为四阶段是 HTTP 规定——它是 Socket API 的通用形状。
自测三问(点开对答案)
1. 四阶段按序是什么? —— 创建套接字、连接、收发、断开。 2. 应用程序操作套接字靠什么? —— 描述符。 3. 管道的另一端是谁? —— 服务器的套接字。- ☐ 下一节(1.4.2 创建套接字阶段)
相关笔记
- 对应用程序的数据进行可靠传输(TCP) —— 管道里跑的协议
- 创建套接字阶段 —— 第一阶段展开
- 🔌 网络是怎样连接的 · 索引