在计算机与网络通信体系中,存在两套最容易让非专业用户甚至资深工程师产生认知混乱的度量衡常识:

  1. “硬盘缩水之谜”:花大价钱买来的 1TB 固态硬盘或手机,插到 Windows 电脑里一格式化,容量瞬间只剩“931 GB”,甚至一度引发多起集体诉讼;
  2. “千兆宽带缩水之谜”:运营商办理的“1000 Mbps 千兆光纤”,直觉换算 1000÷8=125 MB/s1000 \div 8 = 125\text{ MB/s},但无论用哪个测速工具或下载软件,速度极限永远被死死按在 117 ~ 118 MB/s 左右。

这并不是奸商克扣容量,也不是运营商暗中限速,而是国际标准制式(SI 十进制)与计算机物理架构(IEC 二进制)的百年标准博弈,以及计算机网络从以太网数据链路层到应用层的层层封包物理税

本文结合本站数据存储与带宽换算器以及速度单位换算器的实现原理,带你逐层揭开这一“数字账本”。


1. 1TB 为什么变成了 931 GiB?

问题的根源在于:同一个前缀(Kilo, Mega, Giga, Tera),在硬件厂商和操作系统眼里有着完全不同的数学定义。

两个对立的世界

硬件制造商 (SI 国际单位制, 10 的幂次):
  1 KB = 10³ = 1,000 Bytes
  1 MB = 10⁶ = 1,000,000 Bytes
  1 GB = 10⁹ = 1,000,000,000 Bytes
  1 TB = 10¹² = 1,000,000,000,000 Bytes

计算机底层 (IEC 国际电工委员会标准, 2 的幂次):
  1 KiB = 2¹⁰ = 1,024 Bytes
  1 MiB = 2²⁰ = 1,048,576 Bytes
  1 GiB = 2³⁰ = 1,073,741,824 Bytes
  1 TiB = 2⁴⁰ = 1,099,511,627,776 Bytes
  • 硬盘与闪存厂商的视角:采用十进制标准(SI)。当他们生产一块 1TB 的硬盘时,芯片上整整齐齐排布了 1,000,000,000,0001,000,000,000,000 个字节(Byte)。从法律和物理定义上,他们没有缺斤短两;
  • Windows 操作系统的视角:计算机内部总线、地址指针和寄存器都是基于二进制寻址(210=10242^{10} = 1024)。微软 Windows 在计算磁盘容量时,使用 102441024^4 来折算,但界面上却极其不严谨地继续使用“GB/TB”作为单位标签,而不是标准的“GiB/TiB”!

精确算账

Windows 显示容量=1,000,000,000,000 字节1024×1024×1024×1024 字节/TiB0.90949 TiB\text{Windows 显示容量} = \frac{1,000,000,000,000 \text{ 字节}}{1024 \times 1024 \times 1024 \times 1024 \text{ 字节/TiB}} \approx 0.90949 \text{ TiB}

换算为吉字节(GiB):

0.90949×1024931.32 GiB0.90949 \times 1024 \approx \mathbf{931.32 \text{ GiB}}

标称十进制 vs Windows 二进制阶梯折算表

在以 Windows 操作系统(二进制 10241024 进位)观察厂商标称十进制容量时,标称容量在系统里的“折减比例”随着单位量级逐级递增(折算系数为 1000n1024n\frac{1000^n}{1024^n},系统缩水率即 11000n1024n1 - \frac{1000^n}{1024^n}):

标称单位 (SI) 进阶幂次 (nn) Windows 系统单位 (IEC) 实际折算系数 (1000n1024n\frac{1000^n}{1024^n}) Windows 显示容量 (以 1 标称单位计) Windows 缩水率 (11000n1024n1 - \frac{1000^n}{1024^n}) 反向增幅 (1024n1000n1000n\frac{1024^n - 1000^n}{1000^n})
1 KB 1 KiB 0.9765625 0.9765625 KiB0.9765625\ \text{KiB} 2.34% (2.3438%) +2.40% (+2.4000%)
1 MB 2 MiB 0.9536743 0.9536743 MiB0.9536743\ \text{MiB} 4.63% (4.6326%) +4.86% (+4.8576%)
1 GB 3 GiB 0.9313226 0.9313226 GiB0.9313226\ \text{GiB} 6.87% (6.8677%) +7.37% (+7.3742%)
1 TB 4 TiB 0.9094947 0.9094947 TiB0.9094947\ \text{TiB} (931.32 GiB\approx \mathbf{931.32\ \text{GiB}}) 9.05% (9.0505%) +9.95% (+9.9512%)
1 PB 5 PiB 0.8881784 0.8881784 PiB0.8881784\ \text{PiB} (909.49 TiB\approx \mathbf{909.49\ \text{TiB}}) 11.18% (11.1822%) +12.59% (+12.5900%)

口径对比:在日常“买来的 1TB 为什么只剩 931 GiB”的语境下,以 Windows 二进制为分母所得的 9.05%(精确值为 9.0505%9.0505\%,相当于物理上少了 92.68 GiB92.68\ \text{GiB})是最直观的损失体感;而反向增幅 9.95%(精确值为 9.9512%9.9512\%)则是站在厂商十进制视角解释 1 TiB1\ \text{TiB}1 TB1\ \text{TB} 究竟物理上多容纳了多少字节。

趣味常识:苹果 macOS 自 2009 年的 OS X 10.6(Snow Leopard)起,全面将操作系统文件管理器的容量计算切换为 十进制(1000 进位)。因此同一块 1TB 固态硬盘插在 Mac 上会老老实实显示“1.00 TB”,而在 Windows 上则显示“931 GB”。


2. 为什么千兆宽带极限下载只有 118 MB/s?

我们常说的“千兆宽带”,运营商标称的速率是 1000 Mbps(Megabits per second,兆比特每秒)。 而下载软件显示的速率单位是 MB/s(MegaBytes per second,兆字节每秒)。

因为 1 字节(Byte)包含 8 个比特(bit),基础换算如下:

理论物理通道极限=1000 Mbps8=125 MB/s\text{理论物理通道极限} = \frac{1000 \text{ Mbps}}{8} = 125 \text{ MB/s}

但是,数据从服务器网卡发出,经过光纤抵达你的硬盘,必须经过计算机网络分层体系(OSI 模型)的层层包装。

拆解以太网帧的“每一粒米”

在经典的以太网(Ethernet v2)与 IPv4 环境下,每一个网络传输包的解剖图如下:

┌─────────────────────────────────────────────────────────────┐
│ 物理层前导码与帧间隔 (Preamble + SFD + IPG)        20 字节  │
├─────────────────────────────────────────────────────────────┤
│ 链路层以太网帧头 (Ethernet Header: MAC源/目标/Type) 14 字节  │
├─────────────────────────────────────────────────────────────┤
│ 网络层 IP 协议头 (IPv4 Header)                     20 字节  │
├─────────────────────────────────────────────────────────────┤
│ 传输层 TCP 协议头 (TCP Header,含时间戳选项)         32 字节  │
├─────────────────────────────────────────────────────────────┤
│ 应用层有效载荷 (TCP Payload / MSS)                 1448 字节 │
├─────────────────────────────────────────────────────────────┤
│ 链路层帧校验码 (Frame Check Sequence, FCS/CRC)      4 字节  │
└─────────────────────────────────────────────────────────────┘
  1. 标准 MTU(最大传输单元)1500 字节
  2. 扣除 IPv4 头部(20 字节)与标准带时间戳选项的 TCP 头部(32 字节)后,留给你的纯文件的有效载荷大小(MSS, Maximum Segment Size)只有: MSS=15002032=1448 字节\text{MSS} = 1500 - 20 - 32 = \mathbf{1448 \text{ 字节}}
  3. 但是在物理网线上,为了发送这 1500 字节的包,硬件必须额外附加:
    • 以太网报头(14 字节)+ CRC 校验(4 字节)= 18 字节;
    • 物理层前导同步码(Preamble 7 字节 + SFD 1 字节)= 8 字节;
    • 帧间隙(Inter-Packet Gap, IPG 最小 96 bit-time)= 12 字节;
    • 单帧占用的实际物理介质总开销 = 1500+18+8+12=1538 字节1500 + 18 + 8 + 12 = \mathbf{1538 \text{ 字节}}

传输效率终极推导

纯数据有效载荷与线缆总开销的比率:

ηEthernet=1448 字节1538 字节94.15%\eta_{\text{Ethernet}} = \frac{1448 \text{ 字节}}{1538 \text{ 字节}} \approx \mathbf{94.15\%}

将千兆线路的 125 MB/s 乘以该效率:

TCP 传输层理论极限=125 MB/s×94.15%=117.68 MB/s\text{TCP 传输层理论极限} = 125 \text{ MB/s} \times 94.15\% = \mathbf{117.68 \text{ MB/s}}

如果再加上:

  • TLS 1.3 加密记录头(Record Overhead):每 16 KB 数据额外消耗 20 字节;
  • HTTP/2 帧头:每个数据帧 9 字节;
  • TCP ACK 反向确认流量微小挤占与光纤传输误码微小重传;

在实际千兆家用宽带下,下载速度能够稳定在 114 ~ 118 MB/s 之间,就已经是达到了物理学与协议栈极限的满速状态!


3. 批量大数据传输的工程预估公式

在规划大数据同步、全量数据库迁移或大规模视频资源分发时,工程师往往需要精确测算“传完这批数据到底需要多久”。

千万不要用简单的 数据总量 / 标称带宽,一个严密的工程估算模型应该考虑如下变量:

Ttotal=Thandshake+S×(1+α)min(Bupload,Bdownload)+RTT×log2BDPIWT_{\text{total}} = T_{\text{handshake}} + \frac{S \times (1 + \alpha)}{\min(B_{\text{upload}}, B_{\text{download}})} + \text{RTT} \times \left\lceil \log_2 \frac{\text{BDP}}{\text{IW}} \right\rceil

其中:

  • SS:待传输文件的净字节数;
  • α\alpha:协议栈封包损耗系数(常规 HTTPS 取 1.061.081.06 \sim 1.08,含协议头与 TLS 开销);
  • BB:瓶颈带宽(需取发送端上行与接收端下行的最小值);
  • RTT\text{RTT}:往返延迟(跨国传输可能高达 180ms,TCP 慢启动阶段会额外消耗数个 RTT 才能拉满窗口);
  • BDP\text{BDP}:带宽时延积(Bandwidth-Delay Product)。

通过本站的数据单位换算器,可以快速在 bit、Byte、GiB、TiB 之间进行双向无损换算,并在底层算法中明确标识十进制(SI)与二进制(IEC)的精确系数差。