📄 一句话概括
收到 SYN=1 的连接包:查有无套接字在监听该端口——有就复制一个新套接字、写进四元组、回 SYN+ACK;监听的不干活,新的专门陪客。
📝 本节和前面几节的关系
6.2.2 把包交给了 TCP;本篇看最特殊的一类包——连接包。
一、四步处理
查有没有套接字在监听这个端口; 有——复制一个新套接字(6.1.3 的 accept 复制在这里发生); 把四元组(双方 IP+端口)写进新套接字; 回 SYN+ACK,握手继续。
二、分工格局
监听套接字只管【在门口等】,不传输数据; 新套接字绑定四元组,专门陪这一位客—— 这就是一台 80 端口能同时服务无数客人的秘密。
三、动手 Demo:连接包的处理
收到 SYN=1 的连接包,TCP 模块做四件事:
for s in ['1. 查有没有套接字在监听这个端口',
2. 有 -> **复制**一个新套接字',
3. 把四元组(双方 IP+端口)写进新套接字',
4. 回 SYN+ACK,握手继续']:
print(s)
实跑输出:
--------------------------------------------------------------------
连接包的处理
--------------------------------------------------------------------
收到 SYN=1 的连接包,TCP 模块做四件事:
1. 查有没有套接字在监听这个端口
2. 有 -> **复制**一个新套接字
3. 把四元组(双方 IP+端口)写进新套接字
4. 回 SYN+ACK,握手继续
监听的套接字不干活,新套接字专门陪这位客。
没有监听者时回 RST——【此路不通】; 这就是扫端口能探出开放服务的原理。
30 秒实验
- 用四元组解释 80 端口为什么不怕满员。
- 想想 SYN 洪水攻击打击的是哪一步。
- 对照 2.2.3 复习三次握手。
常见误区
- 以为一个端口只能服务一个客人——四元组区分客人。
- 以为监听套接字会陪客聊天——它只管等。
自测三问(点开对答案)
1. 连接包进来先查什么? —— 有无套接字监听该端口。 2. 复制新套接字写进什么? —— 四元组(双方 IP+端口)。 3. 没监听者时回什么? —— RST。- ☐ 下一节(6.2.4 TCP 模块如何处理数据包)
相关笔记
- 连接操作的实际过程 — 客户端侧的握手
- TCP 模块如何处理数据包 — 握完手之后的包
- 🔌 网络是怎样连接的 · 索引