📚 第二章 TCP/IP基础知识
📄 一句话概括

物理层没有「报文」这个概念,只有连续的信号。 所以它的指标是「一个比特占多久」,它的故障是「误码」而不是「丢包」。

📝 本节和前面几节的关系

2.4.1 讲的是分层模型,这一节讲最底下那一层。 这一节会算四个速率下的比特时间,数字差好几个数量级。

一、这一层只管发比特

物理层不做任何「理解」:

它做吗 动作 对比
做 把比特变成信号 电压、光、电磁波
不做 看地址 链路层才看
不做 查错 链路层算 CRC
不做 分包 它只有连续的位流

第四行是理解物理层的关键:线上没有「包」,只有连续的信号。 所谓「帧」是链路层事后划分出来的——物理层只负责把这些位一个个送出去。 所以物理层没有「丢包」这个说法,只有「误码」。 第三行解释了一个现象:CRC 是网卡(链路层)算的,不是物理层算的。 所以线上出现一个比特翻转,物理层不知道,链路层算 CRC 才发现,然后把整帧丢掉。 这就是「物理层出错,表现为链路层丢帧」的原因。

二、比特时间

速率越高,一个比特占的时间越短:

速率 1 比特多少纳秒 1500 字节发完
10 Mbps 100.00 1200 微秒
100 Mbps 10.00 120 微秒
1000 Mbps 1.00 12 微秒
10000 Mbps 0.10 1.2 微秒

第二列是「一个比特占多久」:10 Mbps 时一个比特占 100 纳秒, 10 Gbps 时只占 0.1 纳秒——差一百倍。 这个数决定了收发器的时钟精度要求。 第三列是「一个满帧占多久」:10 Mbps 下 1500 字节要占线路 1.2 毫秒, 10 Gbps 下只要 1.2 微秒。 这个数决定了「一台设备能同时处理多少路」。 注意单位在变:低速时用微秒,高速时用纳秒。 这不是为了好看,是因为「1.2 微秒」写成「0.0012 毫秒」太难读。 工程上换单位往往意味着「量级变了」。

三、物理层的故障长什么样

三种典型表现,和上面几层完全不同:

现象 原因 怎么查
CRC 错计数涨 误码 换线、查接头
速率协商降级 线材不达标 看端口协商结果
链路反复 up/down 接触不良、供电 查物理连接

第一行是最常见的:网卡统计里有一个「CRC 错误」计数,它涨就说明物理层有问题。 这时候上面几层看到的都是「丢包」,但根因在最底下。 所以「丢包排查」的第一步应该是看 CRC 计数,不是先怀疑路由。 第二行那个「协商降级」很隐蔽:千兆网卡协商成了百兆,网络还能用,只是慢。 原因常常是网线只有四芯(百兆线)或者水晶头压得不好。 所以「换了根线网速变快」不是玄学。 第三行那个「反复 up/down」是最容易定位的:因为它会在系统日志里留下明确记录。 看到这种日志,直接查物理连接就行,不用往上找。

四、动手 Demo:物理层只有一件事——把比特发出去

算四个速率下的比特时间与满帧时间。 单位从微秒跨到纳秒,这就是量级变化。

for mbps in (10, 100, 1000, 10000):
    ns = 1000.0 / mbps
    tx = 1500 * 8 / (mbps * 10 ** 6) * 1e6
    print('%-8d Mbps  %7.2f 纳秒/比特  %8.2f 微秒/帧'
          % (mbps, ns, tx))

实跑输出:

--------------------------------------------------------------------
物理层只有一件事——把比特发出去
--------------------------------------------------------------------
**物理层没有「报文」这个概念,只有信号。**所以它的指标是「一个比特占多长时间」。

  速率           1 比特多少纳秒     1500 字节发完多少微秒
  --------------------------------------------------------
  10 Mbps        100.00             1200.00
  100 Mbps       10.00              120.00
  1000 Mbps      1.00               12.00
  10000 Mbps     0.10               1.20

**第二列是「一个比特占多久」,第三列是「一个满帧占多久」**:
**10 Mbps 下,一个 1500 字节的帧要占线路 1.2 毫秒**;**10 Gbps 下只要 1.2 微秒。**
**这两个数决定了设备的时间精度要求**:**10 Gbps 的网卡,时钟抖动超过几百皮秒就会误码。**
**所以高速链路对晶振的要求比低速链路苛刻几个数量级。**
**物理层的问题表现也和上面几层不同**:
**它不会「丢包」,它只会「误码」**——**一个比特翻了,CRC 就会发现,然后整帧被丢**。
**在网卡统计里这体现为「CRC 错」,不是「丢包」。**

10 Mbps 时 100 纳秒一个比特,10 Gbps 时 0.1 纳秒:正好差一千倍,因为速率差一千倍。 「微秒/帧」这一列从 1200 降到 1.2:10 Mbps 下一个满帧占线路 1.2 毫秒, 换算成微秒就是 1200。 所以表里第三列的单位是微秒,不是毫秒。 这两个数在实际工程里各有用处:「纳秒/比特」决定收发器的时钟要求; 「微秒/帧」决定交换机的缓存深度——因为「存一个帧再转发」至少要缓存这么多时间的数据。

30 秒实验

  1. 算一下 400 Gbps 下 1 比特占多少皮秒。
  2. 算一下:10 Gbps 链路上,1 毫秒能传多少字节?
  3. 想一下:为什么「线越长,能跑的速率越低」?

常见误区

  1. 以为物理层会「丢包」。 它只会「误码」,丢帧是链路层算 CRC 之后做的。
  2. 以为速率协商是软件问题。 协商结果取决于线材与接头,千兆变百兆常常是网线只有四芯。
  3. 以为「换了根线变快」是玄学。 它是物理层的直接改善,CRC 错减少、协商速率回升。
自测三问(点开对答案) 1. 物理层做什么、不做什么? —— **只做「把比特变成信号」。** 不看地址、不算 CRC、不分包,线上只有连续的位流。 2. 10 Mbps 与 10 Gbps 下,一个比特各占多长时间? —— **10 Mbps 是 100 纳秒,10 Gbps 是 0.1 纳秒**,正好差一千倍。 3. 物理层出问题,上面几层看到的是什么? —— **「丢包」与「CRC 错误计数上涨」。**所以排查丢包的第一步应该看 CRC 计数,而不是先怀疑路由。

下一节往上一层:网络接口层(数据链路层)。

相关笔记