🔌 第二章 用电信号传输TCP/IP数据
📄 一句话概括

协议栈上下分层:TCP/UDP 管收发、IP 管装包选路、网卡驱动和网卡管信号——套接字不占层,是挂在 TCP 层上的【端口面板】。

📝 本节和前面几节的关系

第一章从应用程序视角交了棒;本篇推开协议栈的门,看清里面站着的都是谁。

一、四个成员

从上到下:应用程序(写消息)→ TCP/UDP(管收发)→ IP(管装包与选路)→ 网卡驱动+网卡(管电信号)。 上一层只把活交给下一层,从不过问更下面的事。

二、套接字挂在哪

套接字不是第五层——它是 TCP 层对应用程序开放的 一排接口位:应用程序拿描述符插上去操作。

三、动手 Demo:协议栈的分层站位

一张站位表看清四层与面板:

for a, b, c in [('上','应用程序(浏览器)','写消息'),
               ('v','TCP / UDP','收发管理、可靠传输'),
               ('v','IP','装包、选路、ARP'),
               ('下','网卡驱动 + 网卡','变电信号')]:
    print('%-3s %-18s %s' % (a, b, c))

实跑输出:

--------------------------------------------------------------------
协议栈的分层站位
--------------------------------------------------------------------
  协议栈上下四层,各管一段:

  层     成员                   职责
  -------------------------------------------------
  上     应用程序(浏览器)     写消息
  ↓      TCP / UDP              收发管理、可靠传输
  ↓      IP                     装包、选路、ARP
  下     网卡驱动 + 网卡        变电信号(光信号)
  -------------------------------------------------

  套接字不占层——它是 TCP 层挂出来的一排【端口面板】,
  应用程序插头插上去,四阶段的活都从面板走。

【分层】是网络世界的总原则——12 课的架构章讲过一遍, 这里第一次落到一台机器内部。

30 秒实验

  1. 说出一次 write 调用会先后经过哪四层。
  2. 想想为什么【可靠传输】放在 TCP 而不是 IP。
  3. 对照 12 课 1.6 的分层模型,找出对应关系。

常见误区

  1. 以为套接字是独立一层——它是 TCP 层的接口面板。
  2. 以为网卡也是【软件】——它是物理设备,驱动才管软件侧。
自测三问(点开对答案) 1. 协议栈从上到下四个成员是什么? —— 应用程序、TCP/UDP、IP、网卡驱动+网卡。 2. 套接字挂在哪一层? —— 不占层,挂 TCP 层上。 3. 上一层的规矩是什么? —— 只交活给下一层,不过问更下面。

相关笔记