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

服务器收包的前半程与客户端完全一样:PHY 还原信号、FCS 验伤、MAC 核对、中断通知 CPU、驱动上交协议栈——规矩不分主客。

📝 本节和前面几节的关系

6.2 开始走进服务器内部;先看最底层:包怎么进来。

一、五步收包

电(光)信号 -> PHY 还原成数字信号; FCS 校验,坏了就丢; MAC 地址核对,不是自己的丢(广播除外); 中断通知 CPU:有包裹; 网卡驱动把包上交协议栈。

二、与客户端无差别

2.5.10 讲的接收四道关,在这里一步不少—— 网卡不关心主人是客户端还是服务器。

三、动手 Demo:网卡把信号变回数字

服务器收包,前半程与 2.5.10 完全一样:

for s in ['电(光)信号 -> 还原成数字信号(PHY)',
      -> 校验 FCS(验伤)',
      -> 核对 MAC(是不是给我的)',
      -> **中断**通知 CPU 有包裹',
      -> 网卡驱动交给协议栈']:
    print(s)

实跑输出:

--------------------------------------------------------------------
网卡把信号变回数字
--------------------------------------------------------------------
  服务器收包,前半程与 2.5.10 完全一样:

    电(光)信号 -> 还原成数字信号(PHY)
      -> 校验 FCS(验伤)
      -> 核对 MAC(是不是给我的)
      -> **中断**通知 CPU 有包裹
      -> 网卡驱动交给协议栈

  服务器与客户端的网卡,干的活一模一样。

服务器的网卡通常更猛(万兆、多队列), 但处理流程与家用网卡毫无二致。

30 秒实验

  1. 对照 2.5.10 把四道关默写一遍。
  2. 查查什么是网卡多队列、为什么服务器需要。
  3. 解释中断是什么、为什么比轮询好。

常见误区

  1. 以为服务器收包流程特殊——与客户端完全一致。
  2. 以为坏包也会上交——FCS 不过关就地丢弃。
自测三问(点开对答案) 1. 收包五步的第一步? —— PHY 把信号还原成数字信息。 2. FCS 不过关怎么办? —— 直接丢弃。 3. CPU 怎么知道有包? —— 网卡发中断通知。

相关笔记