📄 一句话概括
套接字的实体是内存里的一块通信控制信息——对端地址、状态、缓冲都在里面;协议栈靠它记住每条连接的一切。
📝 本节和前面几节的关系
2.1.1 看到套接字挂在 TCP 层;本篇打开这块【控制信息】看看写了什么。
一、一块内存的故事
【连接】这种东西在物理世界并不存在—— 存在的只是两边内存里各自的一块记录。 记录里写:对端 IP/端口、本端端口、状态、收发缓冲。
二、为什么需要它
协议栈是【无记忆的工人】——每收到一个包, 全靠这块信息判断它是哪条连接的、收到哪一步了。
三、动手 Demo:套接字的实体
打开一块控制信息:
for f, v, w in [('对端 IP','172.20.1.1','connect'),
('对端端口','80','connect'),
('本端端口','51234','协议栈分配'),
('状态','ESTABLISHED','随阶段变')]:
print('%-10s %-16s %s' % (f, v, w))
实跑输出:
--------------------------------------------------------------------
套接字的实体
--------------------------------------------------------------------
打开一个套接字,里面记着什么:
字段 例子 谁写
----------------------------------------------------------
对端 IP 172.20.1.1 connect
对端端口 80 connect
本端端口 51234 协议栈自动分配
状态 ESTABLISHED 连接/断开时变
收发缓冲、ACK 待确认等 - TCP 层维护
----------------------------------------------------------
【套接字的实体就是通信控制信息】——一块内存,
协议栈靠它想起每条连接的来龙去脉。
1.4.2 说【创建套接字】——现在能说清:创建的就是这块内存。
30 秒实验
- 用 netstat -ano 找一条连接,对照本节的字段。
- 想想【拔网线】时这块内存发生了什么变化。
- 两条连接的控制信息会不会混——为什么不会。
常见误区
- 以为套接字是硬件或文件——它是纯内存结构。
- 以为连接断了控制信息就没了——还有等待期(2.4.2)。
自测三问(点开对答案)
1. 套接字的实体是什么? —— 内存里的通信控制信息。 2. 控制信息里至少记着什么? —— 对端地址、端口、状态、收发缓冲。 3. 协议栈靠它做什么? —— 判断包属于哪条连接、进行到哪步。- ☐ 下一节(2.1.3 调用socket时的操作)
相关笔记
- 创建套接字阶段 —— 应用程序视角的创建
- 调用socket时的操作 —— 一步一步看
- 🔌 网络是怎样连接的 · 索引