Old-School Networking / 2026 ・ No.02

古法网络入门

第2讲 物理层 ── 0 和 1 变成电、光和电波

发布

蓝色网线末端透明 RJ45 水晶头的侧面照。水晶头里排着橙、绿、蓝、棕及其白色条纹共 8 根线,连到前端的金色触点
网线末端的 RJ45 水晶头。透明的水晶头里排着 8 根颜色不同的线照片:Leon Brooks / Wikimedia Commons(Public domain,已裁切・缩小)

第 1 讲我们看到,一次申请变成 266 字节的数据包被运送出去。
这一讲是最底层的物理层。那 266 字节在网线上究竟是什么模样?
把比特变成信号的机制,网线、光纤和 Wi-Fi,集线器和交换机,以及“网速”的真正含义,我们用计算和实测来确认。

一

266 字节之下

新井物理层就是讲网线吧。插上就亮,亮了就通。还有什么可讲的?

古井那我问你。我们的线路是千兆。申请按钮比 10 兆线路的时候快几倍?

新井100 倍……对吧?

古井今天就来测一测。

全 12 讲路线图(当前位置:第 2 讲)

1 全景图 2 物理层 3 数据链路层 4 IP 地址 5 路由器 6 TCP 7 UDP・套接字 8 TLS 9 DNS 10 HTTP 11 开发者的网络 12 故障排查 当前位置 全景图 第1层 第2层 第3层 第4层 第5・6层 第7层 实战
  • 网线上的模样 ── Wireshark 看不到的前后字节,用计算确认校验用的 FCS
  • 把比特变成信号 ── 一个字节内比特的发送顺序,10BASE-T、100BASE-TX、1000BASE-T 的区别
  • 三条通道 ── 网线(铜线)、光纤(光)、Wi-Fi(电波)
  • “快”的真正含义 ── 把练习网络的“网线”改成 10 M、100 M、1 G 来测量
二

物理层的工作

一句话说,物理层的工作就是把 0 和 1 变成能送到对方的信号。铜线上是电压,光纤里是光的明暗,Wi-Fi 是电波的变化。接收方按固定的间隔读取信号,再还原成 0 和 1。

为此,物理层的标准规定得很细:连接器的形状和针脚排列,线缆的种类和长度,电压或光的波长,每一位用多少时间,以及接收方如何和发送方对准时钟。反过来,物理层不管内容。比特是 IP 还是 JSON,它都不在意。

说一下单位。线路的速度用 bps(bits per second,每秒多少比特)来算。文件大小用字节算,别忘了除以 8。即使是 1 Gbps 的线路,每秒最多也只能运 125,000,000 字节(约 125 MB)。

POINT

物理层=把比特变成信号运送的层。负责形状、材料、电和光的规定,不看内容。速度用 bps(比特)计,换算成字节要除以 8。

三

网线上的一帧

第 1 讲在 Wireshark 里看到的申请是 266 字节。但在网线上,前后还多了一点东西。

第 1 讲的 266 字节,在网线上是这样的

前导码 55 × 7 SFD d5 Wireshark 能看到的部分 02 00 00 00 01 01 … FCS ea 56 71 a2 间隔 (无信号) 第 1 讲的 266 字节 帧(第2层)= 266 + FCS 4 = 270 字节 在网线上是 7+1+266+4+12 = 290 字节的时间 前导码和间隔用于让接收方对准时钟、与下一帧分开 单位:字节(图的宽度不是实际比例)

开头的前导码是 0 和 1 交替排列的 7 字节(十六进制 55)。接收方听着它,把时钟对准发送方。接下来的 SFD(d5)表示“帧从这里开始”。最后的 FCS 是检查途中有没有损坏的 4 字节校验数,用 CRC-32 计算得出。帧之后,规定至少要留 12 字节的间隔。

FCS 由发送方的网卡附加,接收方的网卡检查后去掉,所以平常在 Wireshark 里看不到。于是,我用第 1 讲的 266 字节实际算了一下。

# 从第 1 讲的 266 字节(第 8 个,申请本身)计算附在网线末尾的 FCS
>>> import zlib
>>> frame = bytes.fromhex('020000000101 0200000001100800 4500 …')  # 266 字节
>>> hex(zlib.crc32(frame))
'0xa27156ea'
>>> fcs = zlib.crc32(frame).to_bytes(4, 'little')   # 在网线上按 ea 56 71 a2 的顺序附加
>>> hex(zlib.crc32(frame + fcs))
'0x2144df1c'   # 接收方的验算。没有损坏的话,总是这个值
# 如果途中只翻转 1 位,46851 变成了 56851……
>>> broken = frame.replace(b'46851', b'56851')
>>> hex(zlib.crc32(broken + fcs))
'0xce86b422'   # 值对不上 → 这一帧被丢弃(不会交给上层)

哪怕只错 1 位,验算的值就对不上,这一帧就会被悄悄丢弃。物理层和数据链路层只负责“不送坏掉的东西”,不负责重发。重发是第 6 讲 TCP 的工作。

第 1 讲的 14 个数据包字节数
Wireshark 看到的合计1,333
把太短的 2 个 ARP 填充到最少 60 字节+36
FCS(4 × 14)+56
前导码和 SFD(8 × 14)+112
间隔(12 × 14)+168
占用网线的时间(按字节计)1,705(约为看到的 1.28 倍)
四

把比特变成信号

把比特变成信号时,首先要注意发送顺序。Ethernet 按顺序从头发送字节,但一个字节内从低位开始发送。SFD 的 d5 用二进制写是 11010101,在网线上却是按 1,0,1,0,1,0,1,1 的顺序发出去的。

SFD(d5)和目的 MAC 第 1 个字节(02)的 16 位

d5(SFD) 02(目的 MAC 开头) 1 0 1 0 1 0 1 1 0 1 0 0 0 0 0 0 发送顺序 直接表示 1=高 0=低 曼彻斯特 10BASE-T 一个字节内从低位发送。曼彻斯特编码在每一位中间必定翻转

如果只是 1 为高、0 为低的“直接表示”,在 0 连续很长的地方,接收方很难数清到底持续了几位(时钟会慢慢偏移)。所以 10BASE-T 使用曼彻斯特编码,每一位的正中间一定翻转。接收方可以借这个翻转重新对准时钟。代价是,信号的变化速度要快一倍。

越快的标准,这方面的功夫越讲究。

标准速度使用的线信号的做法
10BASE-T10 Mbps2 对(发、收)曼彻斯特编码
100BASE-TX(1995 年)100 Mbps2 对把 4 位换成 5 位(4B5B),三级电压(MLT-3)。每秒 1.25 亿次
1000BASE-T(1999 年)1 Gbps全部 4 对,同时双向五级电压(PAM-5)。每对每秒 1.25 亿次
10GBASE-T(2006 年)10 Gbps全部 4 对十六级电压(PAM-16)。每秒 8 亿次,带纠错

1000BASE-T 和 100BASE-TX 一样是“每秒 1.25 亿次”变化,却快了 10 倍,是因为线多了一倍(4 对),每次承载的信息更多(五级),而且同一对线同时发送和接收。靠的是把自己发出信号的反射扣除掉的“回波消除”技术。

五

铜线:网线

最常见的通道是网线(双绞线)。里面有 8 根铜线,两根一组绞成 4 对。

RJ45 的 8 根线(T568B 配色)和各标准使用的线对

1 2 3 4 5 6 7 8 100BASE-TX 发送 接收 1000BASE-T ⇄ ⇄ ⇄ ⇄ 两根一组绞在一起。同样的噪声落在两根上,相减就抵消 1000BASE-T 用全部 4 对,同时收发(回波消除) 哪怕断一根,也可能降到 100 Mbps

为什么要绞?两根线上分别传“正”和“负”方向相反的信号,接收方读取两根线的差。外来噪声会同样落在绞在一起的两根线上,相减就抵消了。绞的密度(以及屏蔽)的不同,就是网线“类别”的不同。

类别主要用途长度参考
Cat5e(超五类)1000BASE-T,2.5G、5GBASE-T(2016 年)100 m
Cat6(六类)同上。10GBASE-T 距离短时可用100 m(10G 到 55 m)
Cat6A(超六类)10GBASE-T100 m
Cat8(八类)25G、40GBASE-T(数据中心内)30 m

家里或办公室,如果现在要买,选 Cat6A 就不会有问题。无论哪一类,连接长度基本都是最长 100 m。更远的地方,就用下面的光纤。

六

光:光纤

光纤把光关在头发丝那么细的玻璃里运送。不用电,所以抗噪声,能传得很远。楼与楼之间、数据中心内部、直到海底光缆,长距离几乎都是光。

黑色背景上卷放着黄色和橙色的光纤跳线,两端各有两个蓝色或米色的小方形 LC 连接器
光纤跳线。黄色是单模,橙色是多模。末端的小方块是 LC 连接器照片:Christophe Finot / Wikimedia Commons(CC BY-SA 3.0,已裁切・缩小)
种类线缆颜色(常见例子)传输距离(1 Gbps 的例子)
多模(光的通道粗)橙色(OM1、OM2),水蓝色(OM3、OM4)1000BASE-SX 为 220〜550 m
单模(光的通道细)黄色1000BASE-LX 为 5 km

在交换机一侧,用叫 SFP 的可插拔部件在光和电之间转换。同一台交换机,换插不同的 SFP,就能接多模、单模,甚至铜线。

银色细长的金属部件(SFP+ 模块)。标签上写着 LR-LINK、10G/850nm/MM/300M,前面的黑色口插两根光纤
插在交换机口上用来接光纤的 SFP+ 模块。标签上的 10G/850nm/MM/300M 意思是“10 Gbps、波长 850 nm、多模、最远 300 m”照片:Dmitry Nosachev / Wikimedia Commons(CC BY-SA 4.0,已裁切・缩小)

玻璃里的光,速度约为真空中的三分之二。前进 1 公里约需 5 微秒。这个数字在第九章还会用到。

七

电波:Wi-Fi

Wi-Fi 是用电波运送比特的物理层(数据链路层的规则也一起在 IEEE 802.11 中规定)。每一代都这样变快。

名称标准频段标准上的最大值
Wi-Fi 4802.11n2.4、5 GHz600 Mbps
Wi-Fi 5802.11ac5 GHz6.9 Gbps
Wi-Fi 6/6E802.11ax2.4、5 GHz(6E 还有 6 GHz)9.6 Gbps
Wi-Fi 7802.11be2.4、5、6 GHz约 23 Gbps

日本从 2022 年 9 月 2 日起,6 GHz 频段中的 5925〜6425 MHz 可以用于无线局域网。Wi-Fi 7 的认证于 2024 年 1 月开始。

不过,表里的数字是“所有条件都齐备时的理论最大值”。电波在空中由大家共用,同一时刻只能有一台在说话(半双工)。墙壁和距离会让信号变弱,还会和邻居的 Wi-Fi 冲突。对速度要求高的设备、固定在桌上的电脑,用网线连接最可靠。

八

集线器与交换机

把多根网线汇在一起的盒子有两种。老式的集线器(hub),会把某个口进来的信号原样送到其他所有口,是物理层的设备。

从前后拍摄的米色旧集线器两张照片。左边一面排着 8 个 RJ45 口,右边一面有 10BASE2 的圆形同轴口和 10BASE5 的梯形口,写着 BUFFALO SPORTS HUB LHB-8L
1994 年前后的 8 口集线器(Melco 的 LHB-8L)。左边是 10BASE-T 的口,右边是同轴电缆用的 10BASE2 和 10BASE5 口。把两张照片左右并排照片:Asanagi / Wikimedia Commons(CC0,已裁切・缩小)

接在集线器上的设备,就等于所有人共用一条线。两台同时发送,信号就会冲突,所以要先听线路是否空闲,冲突了就等一会儿再重发,靠这样的规则(CSMA/CD)互相谦让。

集线器是大家共用,交换机是每个口一条专用道

集线器 发给所有人 A B C D ✕ 同时发送就会冲突(半双工) 交换机 只发往目的口 A B C D 每个口收发同时进行(全双工)

现在的交换机会看目的 MAC 地址,只送到对方所在的口(第 3 讲详述)。每个口的通道是分开的,不会冲突。同时收发的全双工成了理所当然,冲突的担心基本成了历史。

蓝色金属外壳的 5 口交换机(Netgear 千兆交换机)。插着黄色和红色网线,红色网线所在口上方的灯亮着绿色
5 口交换机。红色网线上方的灯,表示已经连通(链路建立)。黄色网线另一头没接任何东西,所以灯不亮照片:Simon A. Eugster / Wikimedia Commons(CC BY-SA 3.0,已裁切・缩小)

口上方的灯,是物理层“已连通”的标志(链路)。插上网线后,两端设备会互相告知自己能用的速度和方式(自动协商),选出最快的组合。所以灯亮起来要花一点时间。

新井集线器我听说过,但没见过。

古井我年轻的时候,哪个办公室都有。有人传个大文件,整层楼都变慢。古法的“大家的网线”。

九

粗细与长度

回到开头的问题。1 Gbps 的线路比 10 Mbps 快几倍?我在第 1 讲的练习网络里,在路由器两侧加了“每秒最多多少比特”的阀门,把网线速度改成 10 M、100 M、1 G 来测量(用的是 Linux 的 tc 功能)。

# 在路由器两侧的口上加一个“每秒最多 10 兆比特”的阀门(tbf)
$ tc qdisc add dev lan0 root tbf rate 10mbit burst 15kb latency 100ms
$ tc qdisc add dev wan0 root tbf rate 10mbit burst 15kb latency 100ms
# 100 Mbps、1 Gbps 也一样。去掉就恢复原状

测了两件事:下载 500 万字节的文件,以及和第 1 讲一样的一次申请(POST)。

实测:改变网线速度时

下载 500 万字节(3 次的中位数) 10 Mbps 4.175 秒 100 Mbps 0.416 秒 1 Gbps 0.042 秒 一次申请 POST(31 次的中位数) 10 Mbps 1.21 毫秒 100 Mbps 1.07 毫秒 1 Gbps 1.03 毫秒 快 100 倍,大文件传输快 100 倍;小小的申请几乎不变

大文件下载和速度成正比,4.175 秒 → 0.416 秒 → 0.042 秒,正好快了 100 倍(实际速度是 9.6、96.3、951.2 Mbps,因为有头部,比线路速度略低)。但申请只从 1.21 → 1.07 → 1.03 毫秒,只快了 1.2 倍。因为 266 字节即使在 10 Mbps 下,大约 0.2 毫秒就流完了。

线路的“快”有两种含义

粗细=带宽 长度=延迟 每秒能传多少位(bps) 决定大文件要多久 第一个比特到达所需的时间 光纤里 1 公里 ≈ 5 微秒 带宽可以花钱加粗,光速却改变不了 小小的 API 调用快不快,多半取决于“长度”

线路的快慢有粗细(带宽)和长度(延迟)两种。这个练习网络在一台机器里,“长度”几乎为 0;但在真实网络中,光是光传播的时间就要这么多(按光纤中每公里约 5 微秒计算的理论下限)。

从东京出发(直线距离)单程往返一次申请所需的 3 次往返(DNS、TCP、HTTP)
大阪(约 400 km)2 ms4 ms12 ms
新加坡(约 5,300 km)27 ms53 ms159 ms
纽约(约 10,800 km)54 ms108 ms324 ms

实际的线缆不是直的,途中的路由器也要等待,所以真实值比这还大。线路再粗,光速也不会变。想让小小的 API 调用变快,就减少往返次数,或把服务器放近一点。这是做后端时会起作用的思路。

顺便查了一下第 1 讲以来练习网络的“网线”,它是这样自称的。

# 用 ethtool 查看第 1 讲练习网络里电脑一侧的“网线”
$ ethtool eth0
    Speed: 10000Mb/s
    Duplex: Full
    Auto-negotiation: off
    Port: Twisted Pair
    Link detected: yes
$ ethtool -i eth0
    driver: veth
# veth=只存在于软件里的虚拟网线。速度和“双绞线”都只是名义上的

新井它说自己是“双绞线、10 千兆”……

古井那是只存在于软件里的虚拟网线,既没有铜也没有光。所以这次加了阀门,让它像真的一样。测量时,也要确认测的东西是不是真的。

十

在自己的电脑上确认

自己的电脑以什么速度连接,可以这样查看。

有线(网线)Wi-Fi
Macifconfig 里 media: 那一行按住 option 键点菜单栏的 Wi-Fi 图标(Tx Rate)
WindowsPowerShell 的 Get-NetAdapter(LinkSpeed)netsh wlan show interfaces
Linuxethtool eth0(Speed、Duplex)iw dev wlan0 link

物理层的故障,从其他层看就是“有点慢”“时不时断”。常见的列在这里。

症状常见原因确认方法
灯不亮网线断了、没插到底、对方没开电源换一根网线、换一个口试试
应该是 1 Gbps 却只有 100 Mbps8 根中有一根断了、老式 Cat5 网线用上表查看链路速度。换网线
时快时慢、时不时断网线损伤或噪声,导致 FCS 对不上的帧被丢弃ethtool -S 或 netstat -i 的错误计数
只有 Wi-Fi 慢距离、墙壁、拥挤(周围的 Wi-Fi)靠近测、换到 5 GHz 或 6 GHz、和有线比较
POINT

“连不上”时,先看灯和链路速度。物理层是否可疑,很多时候换一根网线就知道了(第 12 讲汇总)。

结 — 一页总结与下一讲

  1. 物理层把比特变成信号来运送,不看内容。速度以 bps 计,换算成字节要除以 8。
  2. 在网线上,266 字节前面有前导码和 SFD,后面有 FCS 和间隔,共占 290 字节的时间。
  3. FCS(CRC-32)对不上的帧会被悄悄丢弃。重发是 TCP 的工作。
  4. 一个字节内从低位开始发送。越快的标准,线越多、电平级数越多、同时收发。
  5. 网线是双绞线,最长 100 m,远距离用光纤,Wi-Fi 是共用的电波。
  6. 集线器大家共用,交换机每个口都是全双工。
  7. 线路快 100 倍,大文件快 100 倍,小小的申请只快 1.2 倍。小通信的快慢取决于“长度(延迟)”。

新井1.2 倍……我还以为换成千兆,一切都会快 100 倍。

古井路再宽,远了也要花时间。下一讲是帧上的收件人——MAC 地址和交换机。还记得第 1 讲里,电脑一开始就“问所有人”吗?

参考

FCS 是用 Python 的 zlib.crc32,从第 1 讲的记录(申请的数据包 266 字节)计算出的值。速度实测是在与第 1 讲相同的云端练习网络(Linux 网络命名空间)中,用 tc 的 tbf 给路由器两侧的口加上限,于 2026 年 10 月 24 日用 curl 进行的(下载取 3 次、申请取 31 次的中位数)。这是在虚拟网线上的测量,没有经过真实网线的信号。各距离的延迟,是根据光纤中的光速计算的理论下限。照片来自 Wikimedia Commons,作者和许可证标在各照片下方。登场人物均为虚构。

古法网络入门 第2讲 — 物理层 / 2026.10

← 返回文章列表