🔌 第六章 请求到达Web服务器,响应返回浏览器
📄 一句话概括

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

  1. 用四元组解释 80 端口为什么不怕满员。
  2. 想想 SYN 洪水攻击打击的是哪一步。
  3. 对照 2.2.3 复习三次握手。

常见误区

  1. 以为一个端口只能服务一个客人——四元组区分客人。
  2. 以为监听套接字会陪客聊天——它只管等。
自测三问(点开对答案) 1. 连接包进来先查什么? —— 有无套接字监听该端口。 2. 复制新套接字写进什么? —— 四元组(双方 IP+端口)。 3. 没监听者时回什么? —— RST。

相关笔记