Old-School Networking / 2026 ・ No.02
古法网络入门
第2讲 物理层 ── 0 和 1 变成电、光和电波
发布
第 1 讲我们看到,一次申请变成 266 字节的数据包被运送出去。
这一讲是最底层的物理层。那 266 字节在网线上究竟是什么模样?
把比特变成信号的机制,网线、光纤和 Wi-Fi,集线器和交换机,以及“网速”的真正含义,我们用计算和实测来确认。
266 字节之下
新井物理层就是讲网线吧。插上就亮,亮了就通。还有什么可讲的?
古井那我问你。我们的线路是千兆。申请按钮比 10 兆线路的时候快几倍?
新井100 倍……对吧?
古井今天就来测一测。
全 12 讲路线图(当前位置:第 2 讲)
- 网线上的模样 ── 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)。
物理层=把比特变成信号运送的层。负责形状、材料、电和光的规定,不看内容。速度用 bps(比特)计,换算成字节要除以 8。
网线上的一帧
第 1 讲在 Wireshark 里看到的申请是 266 字节。但在网线上,前后还多了一点东西。
第 1 讲的 266 字节,在网线上是这样的
开头的前导码是 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 位
如果只是 1 为高、0 为低的“直接表示”,在 0 连续很长的地方,接收方很难数清到底持续了几位(时钟会慢慢偏移)。所以 10BASE-T 使用曼彻斯特编码,每一位的正中间一定翻转。接收方可以借这个翻转重新对准时钟。代价是,信号的变化速度要快一倍。
越快的标准,这方面的功夫越讲究。
| 标准 | 速度 | 使用的线 | 信号的做法 |
|---|---|---|---|
| 10BASE-T | 10 Mbps | 2 对(发、收) | 曼彻斯特编码 |
| 100BASE-TX(1995 年) | 100 Mbps | 2 对 | 把 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 配色)和各标准使用的线对
为什么要绞?两根线上分别传“正”和“负”方向相反的信号,接收方读取两根线的差。外来噪声会同样落在绞在一起的两根线上,相减就抵消了。绞的密度(以及屏蔽)的不同,就是网线“类别”的不同。
| 类别 | 主要用途 | 长度参考 |
|---|---|---|
| Cat5e(超五类) | 1000BASE-T,2.5G、5GBASE-T(2016 年) | 100 m |
| Cat6(六类) | 同上。10GBASE-T 距离短时可用 | 100 m(10G 到 55 m) |
| Cat6A(超六类) | 10GBASE-T | 100 m |
| Cat8(八类) | 25G、40GBASE-T(数据中心内) | 30 m |
家里或办公室,如果现在要买,选 Cat6A 就不会有问题。无论哪一类,连接长度基本都是最长 100 m。更远的地方,就用下面的光纤。
光:光纤
光纤把光关在头发丝那么细的玻璃里运送。不用电,所以抗噪声,能传得很远。楼与楼之间、数据中心内部、直到海底光缆,长距离几乎都是光。
| 种类 | 线缆颜色(常见例子) | 传输距离(1 Gbps 的例子) |
|---|---|---|
| 多模(光的通道粗) | 橙色(OM1、OM2),水蓝色(OM3、OM4) | 1000BASE-SX 为 220〜550 m |
| 单模(光的通道细) | 黄色 | 1000BASE-LX 为 5 km |
在交换机一侧,用叫 SFP 的可插拔部件在光和电之间转换。同一台交换机,换插不同的 SFP,就能接多模、单模,甚至铜线。
玻璃里的光,速度约为真空中的三分之二。前进 1 公里约需 5 微秒。这个数字在第九章还会用到。
电波:Wi-Fi
Wi-Fi 是用电波运送比特的物理层(数据链路层的规则也一起在 IEEE 802.11 中规定)。每一代都这样变快。
| 名称 | 标准 | 频段 | 标准上的最大值 |
|---|---|---|---|
| Wi-Fi 4 | 802.11n | 2.4、5 GHz | 600 Mbps |
| Wi-Fi 5 | 802.11ac | 5 GHz | 6.9 Gbps |
| Wi-Fi 6/6E | 802.11ax | 2.4、5 GHz(6E 还有 6 GHz) | 9.6 Gbps |
| Wi-Fi 7 | 802.11be | 2.4、5、6 GHz | 约 23 Gbps |
日本从 2022 年 9 月 2 日起,6 GHz 频段中的 5925〜6425 MHz 可以用于无线局域网。Wi-Fi 7 的认证于 2024 年 1 月开始。
不过,表里的数字是“所有条件都齐备时的理论最大值”。电波在空中由大家共用,同一时刻只能有一台在说话(半双工)。墙壁和距离会让信号变弱,还会和邻居的 Wi-Fi 冲突。对速度要求高的设备、固定在桌上的电脑,用网线连接最可靠。
集线器与交换机
把多根网线汇在一起的盒子有两种。老式的集线器(hub),会把某个口进来的信号原样送到其他所有口,是物理层的设备。
接在集线器上的设备,就等于所有人共用一条线。两台同时发送,信号就会冲突,所以要先听线路是否空闲,冲突了就等一会儿再重发,靠这样的规则(CSMA/CD)互相谦让。
集线器是大家共用,交换机是每个口一条专用道
现在的交换机会看目的 MAC 地址,只送到对方所在的口(第 3 讲详述)。每个口的通道是分开的,不会冲突。同时收发的全双工成了理所当然,冲突的担心基本成了历史。
口上方的灯,是物理层“已连通”的标志(链路)。插上网线后,两端设备会互相告知自己能用的速度和方式(自动协商),选出最快的组合。所以灯亮起来要花一点时间。
新井集线器我听说过,但没见过。
古井我年轻的时候,哪个办公室都有。有人传个大文件,整层楼都变慢。古法的“大家的网线”。
粗细与长度
回到开头的问题。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)。
实测:改变网线速度时
大文件下载和速度成正比,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 毫秒就流完了。
线路的“快”有两种含义
线路的快慢有粗细(带宽)和长度(延迟)两种。这个练习网络在一台机器里,“长度”几乎为 0;但在真实网络中,光是光传播的时间就要这么多(按光纤中每公里约 5 微秒计算的理论下限)。
| 从东京出发(直线距离) | 单程 | 往返一次 | 申请所需的 3 次往返(DNS、TCP、HTTP) |
|---|---|---|---|
| 大阪(约 400 km) | 2 ms | 4 ms | 12 ms |
| 新加坡(约 5,300 km) | 27 ms | 53 ms | 159 ms |
| 纽约(约 10,800 km) | 54 ms | 108 ms | 324 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 | |
|---|---|---|
| Mac | ifconfig 里 media: 那一行 | 按住 option 键点菜单栏的 Wi-Fi 图标(Tx Rate) |
| Windows | PowerShell 的 Get-NetAdapter(LinkSpeed) | netsh wlan show interfaces |
| Linux | ethtool eth0(Speed、Duplex) | iw dev wlan0 link |
物理层的故障,从其他层看就是“有点慢”“时不时断”。常见的列在这里。
| 症状 | 常见原因 | 确认方法 |
|---|---|---|
| 灯不亮 | 网线断了、没插到底、对方没开电源 | 换一根网线、换一个口试试 |
| 应该是 1 Gbps 却只有 100 Mbps | 8 根中有一根断了、老式 Cat5 网线 | 用上表查看链路速度。换网线 |
| 时快时慢、时不时断 | 网线损伤或噪声,导致 FCS 对不上的帧被丢弃 | ethtool -S 或 netstat -i 的错误计数 |
| 只有 Wi-Fi 慢 | 距离、墙壁、拥挤(周围的 Wi-Fi) | 靠近测、换到 5 GHz 或 6 GHz、和有线比较 |
“连不上”时,先看灯和链路速度。物理层是否可疑,很多时候换一根网线就知道了(第 12 讲汇总)。
结 — 一页总结与下一讲
- 物理层把比特变成信号来运送,不看内容。速度以 bps 计,换算成字节要除以 8。
- 在网线上,266 字节前面有前导码和 SFD,后面有 FCS 和间隔,共占 290 字节的时间。
- FCS(CRC-32)对不上的帧会被悄悄丢弃。重发是 TCP 的工作。
- 一个字节内从低位开始发送。越快的标准,线越多、电平级数越多、同时收发。
- 网线是双绞线,最长 100 m,远距离用光纤,Wi-Fi 是共用的电波。
- 集线器大家共用,交换机每个口都是全双工。
- 线路快 100 倍,大文件快 100 倍,小小的申请只快 1.2 倍。小通信的快慢取决于“长度(延迟)”。
新井1.2 倍……我还以为换成千兆,一切都会快 100 倍。
古井路再宽,远了也要花时间。下一讲是帧上的收件人——MAC 地址和交换机。还记得第 1 讲里,电脑一开始就“问所有人”吗?
参考
- Wikipedia — Ethernet frame
- Wikipedia — Manchester code
- Wikipedia — Fast Ethernet (100BASE-TX)
- Wikipedia — Gigabit Ethernet (1000BASE-T, SX, LX)
- Wikipedia — 10 Gigabit Ethernet (10GBASE-T)
- Wikipedia — 2.5GBASE-T and 5GBASE-T
- Cabling Installation & Maintenance — TIA Category 8 standard approved
- Wikipedia — Wi-Fi 7
- ITmedia PC USER —「Wi-Fi 6E」ついに解禁(2022-09-02)
- tc-tbf(8) — Linux manual page
FCS 是用 Python 的 zlib.crc32,从第 1 讲的记录(申请的数据包 266 字节)计算出的值。速度实测是在与第 1 讲相同的云端练习网络(Linux 网络命名空间)中,用 tc 的 tbf 给路由器两侧的口加上限,于 2026 年 10 月 24 日用 curl 进行的(下载取 3 次、申请取 31 次的中位数)。这是在虚拟网线上的测量,没有经过真实网线的信号。各距离的延迟,是根据光纤中的光速计算的理论下限。照片来自 Wikimedia Commons,作者和许可证标在各照片下方。登场人物均为虚构。
古法网络入门 第2讲 — 物理层 / 2026.10