📡 第一章 网络硬件通用基础知识
📄 一句话概括

OSI 七层是「分层」这件事的说明书,不是协议本身。 它真正好用的地方只有两个:出问题时能说清「哪一层」,画设备时能说清「它插在哪一层」。

📝 本节和前面几节的关系

上一节把协议列成了五要素里的第四样,这一节把它拆开。 这一节是全书的坐标系:后面每讲一台设备,第一句都是「它在第几层」。 交换机在第二层,路由器在第三层,L3 交换机跨二三层,防火墙要看模式。

一、七层、四层、五层:三个版本别打架

教材、RFC、工程现场用的层数并不统一,这是初学最容易混乱的地方。

OSI 七层:物理、数据链路、网络、传输、会话、表示、应用。 教科书版本,好处是分得细,坏处是会话层与表示层在 TCP/IP 里没有独立对应。

TCP/IP 四层:网络接口、网际、传输、应用。工程上真正实现的是这个。

五层:把网络接口拆成物理与数据链路,这是国内教材最常用的折中。

一句话记住关系:七层是「概念地图」,四层是「实现清单」,五层是教学用的「折中版本」。 讲设备插在哪一层,一律按七层说,因为设备的分类(L2/L3/L4 负载均衡)就是按七层编号叫的。

二、每层管什么:一句话版

物理层:0 和 1 怎么变成电平和光。管线、管接口、管引脚。 数据链路层:一段链路内怎么把帧送到隔壁。管 MAC 地址、管冲突、管交换机。 网络层:跨网段怎么走。管 IP 地址、管路由表、管路由器。 传输层:端到端可靠不可靠。管端口号、管重传、管防火墙的会话。 会话/表示/应用:一次对话怎么维持、数据怎么编码、业务怎么定义。

判断设备在哪一层,看它认什么地址:认 MAC 就是二层,认 IP 就是三层,认端口号就是四层。 这是最靠得住的一条经验。

三、封装:每层加几个字节

数据从上往下走,每层加自己的头,这叫封装。头是有成本的。 TCP 20 字节、IP 20 字节、以太网头 14 加校验 4 共 18 字节,加起来 58 字节。

58 字节固定开销意味着什么:传 46 字节的小包,一半以上带宽在送头; 传 1460 字节(以太网 MTU 下 TCP 的典型值),头只占 3.8%。 这就是「大包效率高」的算术来源,也是语音、游戏这类小包业务费带宽的原因。

MTU 为什么是 1500:以太网帧上限 1518,减掉 18 字节头就是 1500。 这个数字被 IP 继承下来,变成全互联网的默认值。 改 MTU 要全链路一致,否则会出现「小包能通、大包不通」这种最烦人的故障。

四、这一节在全书里的位置

书里把它放在第一章第二节,位置很像「补课」,实际是后面所有分类的地基。

第二章讲 L2 交换机,就是「只认 MAC 地址的设备」。 第三章讲路由器,就是「认 IP 地址的设备」。 第四章讲 L3 交换机,就是「两种都认,但用硬件干三层活」。 第五章讲防火墙,就是「按会话与端口做判断,还可能看到应用层」。

七层模型背不下来不要紧,能回答「这设备认什么地址」就够了。

五、动手 Demo:七层各加几个字节,封装效率差多少

这段把「封装」算成一张表:每层加多少、合计多少、不同载荷下效率多少。

layers = [(u"4 传输层", u"TCP 头", 20), (u"3 网络层", u"IP 头", 20),
          (u"2 数据链路层", u"以太网头 14 + FCS 4", 18)]
oh = sum(c for _, _, c in layers)
for pay in (46, 100, 500, 1460):
    print(pay, pay + oh, 100.0 * pay / (pay + oh))

实跑输出:

--------------------------------------------------------------------
OSI 七层各自加了几个字节,封装效率怎么算
--------------------------------------------------------------------
  层               加什么                   字节
  --------------------------------------------------
  7 应用层         HTTP 请求                0
  6 表示层         编码、加密               0
  5 会话层         会话管理                 0
  4 传输层         TCP 头                   20
  3 网络层         IP 头                    20
  2 数据链路层     以太网头 14 + FCS 4     18
  1 物理层         前导 8 + 帧间隙         0

**三层头加起来 58 字节**(TCP 20 + IP 20 + 以太 18)。

**同样 58 字节的头,装多少数据,效率差得很远:**
  数据字节     整帧字节     效率
  -----------------------------------
  46           104          44.2%
  100          158          63.3%
  500          558          89.6%
  1460         1518         96.2%

**小包吃亏。** 46 字节的包有五成半带宽在送头;1460 字节只有 3.8% 是头。
这就是为什么批量传文件快、语音通话费带宽——**同样的比特率,包越小头越多**。

58 字节是固定开销,不随载荷变。所以效率只跟包大小有关。

表里最后两行最能说明问题:46 字节的包效率 44%,1460 字节 96%。 差了不止一倍。同样 1 Gbit/s 的链路,跑小包只能送出 0.55 Gbit/s 的有效数据。 这就是为什么规格书里的「包转发率」永远按最小帧算——那是设备的最坏情况。

30 秒实验

  1. 抓一个你自己的包(浏览器开发者工具看 Content-Length),算它被封装后的效率。
  2. 把 MTU 从 1500 改成 1400,想清楚哪些业务会受影响、为什么会出现「小包通大包不通」。
  3. 给家里每个设备标一个层号:光猫、路由器、交换机、AP、防火墙。

常见误区

  1. 把 OSI 七层当成实现标准。真正实现的是 TCP/IP 四层,七层是描述用的地图。
  2. 以为层数越高的设备越强。L3 交换机不一定比 L2 交换机贵,看的是端口与芯片。
  3. 忽略封装开销。算带宽时只看净荷,会低估三成以上的需求。
自测三问(点开对答案) 1. 怎么最快判断一台设备在第几层? —— 看它认什么地址:认 MAC 是二层,认 IP 是三层,认端口号是四层。 2. 58 字节的开销是怎么来的? —— TCP 头 20 加 IP 头 20 加以太网头 14 与 FCS 4,共 58。 3. 为什么 MTU 是 1500? —— 以太网帧上限 1518 减 18 字节头;这个值被 IP 继承成默认值。

下一节:从 OSI 下来,看 LAN 这一层的标准是谁定的、802 后面那些编号各管什么。

相关笔记