文件大小和网速的单位

1. 文件存储单位

  • bit (比特 / 位):计算机中最小的数据单位,只能表示 0 或 1。可以想象成一个开关,要么开,要么关。英文缩写是小写 b
  • Byte (字节):计算机中最基本的存储和计量单位。它由 8 个比特组成。英文缩写是大写 B。 1 个大B 等于 8 个 小b。
    • b ⇒ bit (比特)
    • B ⇒ Byte (字节)
    • 1 B = 8 b

1.1 1000 还是 1024?

当 Byte 变大后,就引入了 K, M, G, T 等前缀。问题就出在这里,存在两套换算标准。

操作系统 & 程序员标准 (二进制换算)

计算机底层是二进制的,所以内存、CPU缓存和操作系统在计算文件大小时,都习惯使用 2 的幂次方,因为这样最符合计算机的结构。

  • 1 KB (Kilobyte) = 1024 Bytes (2¹⁰ B)
  • 1 MB (Megabyte) = 1024 KB (2²⁰ B)
  • 1 GB (Gigabyte) = 1024 MB (2³⁰ B)
  • 1 TB (Terabyte) = 1024 GB (2⁴⁰ B)

硬盘/U盘制造商标准 (十进制换算)

制造商为了生产和计算方便(也为了让容量数字看起来更大),采用了我们日常生活中更熟悉的国际单位制(SI)十进制标准。

  • 1 KB (Kilobyte) = 1000 Bytes (10³ B)
  • 1 MB (Megabyte) = 1000 KB (10⁶ B)
  • 1 GB (Gigabyte) = 1000 MB (10⁹ B)
  • 1 TB (Terabyte) = 1000 GB (10¹² B)

1.2 1TB 硬盘在电脑上只有 931GB?

这就是上述两种标准冲突的直接体现。

  • 硬盘厂商的“1TB”:
    • 1 TB = 1,000 GB = 1,000,000 MB = 1,000,000,000 KB = 1,000,000,000,000 Bytes
  • Windows 操作系统的解读方式:
    • Windows 看到这 1,000,000,000,000 Bytes 的硬盘后,会用它自己的“1024”标准来换算给用户看。
    • 1,000,000,000,000 Bytes ÷ 1024 (换算成KB) ÷ 1024 (换算成MB) ÷ 1024 (换算成GB) ≈ 931.32 GB

新的二进制前缀标准

补充知识:KiB, MiB, GiB
为了解决这种混乱,国际电工委员会(IEC)提出了一套新的二进制前缀标准:

  • 1 KiB (Kibibyte) = 1024 B

  • 1 MiB (Mebibyte) = 1024 KiB

  • 1 GiB (Gibibyte) = 1024 MiB

这个标准非常清晰,KB/MB/GB 应该只用于十进制。但在实际中,Windows 系统仍然使用 KB/MB/GB 来表示二进制单位,导致混淆持续存在。而 Linux、macOS 等系统在某些地方已经开始使用 KiB/MiB/GiB 这种更精确的写法。

2. 网络速率单位

网络单位用来衡量数据传输的速率 (Speed),即每秒钟能传输多少数据。网络传输的本质是把数据打成一个个 0 和 1 的信号在线缆中传递,所以它的基础单位是 bit (比特),而不是 Byte。单位是 bps (bits per second,比特每秒)。

  • 1 bps:表示每秒钟可以传输 1 个 bit。

2.1 Mbps vs MB/s

这里的混淆点同样源于 b 和 B,以及一个相对统一的换算标准。(所以大概是一个8倍的关系)

网络速率的换算标准:统一使用“1000进制” 。与存储领域不同,网络领域在定义速率时,几乎全部统一使用十进制标准。

  • 1kbps | 1 Kbps (Kilobits per second) = 1,000 bps
  • 1 Mbps (Megabits per second) = 1,000 Kbps = 1,000,000 bps
  • 1 Gbps (Gigabits per second) = 1,000 Mbps = 1,000,000,000 bps

为什么我的 100M 宽带,下载速度只有 12.5MB/s?

  • 运营商说的“100M”宽带:

    • 这里的“M”指的是 Mb (Megabits),单位是 Mbps。
    • 所以 100M 宽带的完整写法是 100 Mbps (100 Megabits per second)。
    • 按照换算:100 Mbps = 100,000,000 bits per second。
  • 我们电脑上下载软件时显示的速度:

    • 下载的是文件,文件大小是用 Byte 计算的,所以下载速度的单位是 MB/s (Megabytes per second)。
  • 换算关系:

    • 我们知道 1 Byte = 8 bits
    • 所以,要将 bits per second 换算成 Bytes per second,只需要除以 8。
    • 理论下载速度 = 100 Mbps ÷ 8 = 12.5 MB/s
  • 更严谨一些

    • 我们知道,在 Windows 等操作系统中,1 MB = 1024 KB = 1024 * 1024 Bytes = 1,048,576 Bytes。

      所以,精确的下载速度应该是: 12,500,000 Bytes/s / 1,048,576 ≈ 11.92 MB/s

    • 为什么大家普遍都说 “100M 宽带下载速度是 12.5MB/s”,而不是更精确的 11.92MB/s 呢?

      “除以8”这个口诀非常简单易记,便于快速心算。这个误差在实际网络波动中几乎可以忽略不计。

kbps 还是 Kbps

kbps 在学术和标准上更严谨(正确的写法),但 Kbps 在实际应用中更常见且清晰。

  • k (小写) → 表示 1000,遵循 SI 标准。
  • K (大写) → 在计算机存储领域,通常特指 1024。

网络单位的 k 是小写,而 MG 是大写,这恰恰是最规范、最正确的写法。

尽管 Kbps 中的 K 不符合 SI 对 kilo 的定义,但它已经成为网络通信领域一个根深蒂固、被广泛接受的事实标准。

KB、kB、kb、Kb

  • KB:文件单位,1024 Bytes。
  • kB: 文件单位,1000 Bytes
  • Kb:网络传输单位,1000 bits,“千比特”。
  • kb: 网络传输单位,同上,也可以写成 kbps 或者 Kb,不容易混淆。
  • kbps: 千比特每秒(kilobits/s),网络带宽单位。
  • KB/s: 千字节每秒(kilobytes/s),文件传输速度。

2.2 场景计算

存储和速率的计算

15G的数据块以 5G 的速率传送,需要多少时间? 都换算成b(同单位),再进行计算。

解: 15 * 2^30 * 8 比特的数据块 以 5 * 10^9 bps 的速率传送,两个相除就是时间。

= 128849018880/5000000000 = 25.76980378秒

100兆宽带下载 10G 电影

以一个10 G电影为例,下载下来需要多久?

文件换算成M, 10G*1024 = 10240M ,速度换算成M, 100/8 = 12.5M。

需要多少时间:10240/12.5 = 819.2秒 = 13.65分钟

注意:这个不是精确的,因为单位不一样。参考上面的 1000 和 1024。

3. 思考问题

3.1 带宽是指什么,为什么国外的很大

带宽 (Bandwidth):就是公路的车道数量。车道越多,同一时间能通过的汽车就越多。带宽越大,单位时间内能传输的数据量就越大。

100 Mbps 的带宽,它决定了你的理论最大下载速率是 100 Mbps / 8 ≈ 12.5 MB/s。带宽是“量”的概念,不是“快”的概念。

  • kbps: 千比特每秒(kilobits/s),网络带宽单位。
  • KB/s: 千字节每秒(kilobytes/s),文件传输速度。

欧美有大量的一级(Tier 1)网络运营商,它们之间通过互联网交换中心(IXP)进行免费或极低成本的流量对等交换(Peering)。这就像一个四通八达、高度协同的路网,建设和维护成本被大量参与者分摊了。

国内云服务商购买多线BGP带宽,通过BGP路由协议实现智能选路,整合电信、联通、移动等多家运营商线路,为用户自动选择最优路径。这种多线整合的带宽质量最好,成本也最高。

3.2 int 能表示多大

1个字节(8个bit)可以存-128-127,也就是一个8位一共能表示2的8次方,最大能表示255。

int32

4 字节 = 4 * 8 = 32 比特 (bits)。 总共可以表示 2³² 个不同的数字。2³² = 4,294,967,296 (约 42.9 亿)。

int32占4个字节(32个bit),-2147483648 to 2147483647 ,一共能表示2的32次方。

int64

8 字节 = 8 * 8 = 64 比特 (bits)。总共可以表示 2⁶⁴ 个不同的数字。2⁶⁴ ≈ 1.844 × 10¹⁹ (一个巨大无比的数字,超过 1800 京,一京等于 1 亿亿)

int64占8个字节(64个bit) : -9223372036854775808 to 9223372036854775807 , 一共能表示2的64次方。

3.3 1KB 究竟有多大

我们又常说一个文件多少多少 K,其中 1K = 1024Byte = 1024*8 bit。1K字节表示的二进制位数为8192位,一共能表示2的8192次方。

ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。

所以1Kb一般能存储1024个字母,或 512 个汉字(gbk编码)。

3.4 tcp 的 MTU 多大

TCP 运行在 传输层,它有一个相关的概念叫做 MSS (Maximum Segment Size, 最大分段大小)。MTU (Maximum Transmission Unit, 最大传输单元):这是数据链路层(如以太网)和网络层(IP)的概念。

以太网 (Ethernet) 的 MTU:目前全球互联网上最通用的标准是 1500 字节。在一个标准的以太网环境中,TCP 的 MSS 计算如下: MSS = 1500 - 20 - 20 = 1460 字节

  • 对于公共互联网:1500 字节的 MTU 是一个历经时间考验的、为了兼容性和稳定性而做出的经典妥协。它在今天依然非常合理,并且在可预见的未来不太可能改变。
  • 对于高性能局域网:1500 字节的 MTU 已不合理,它限制了性能。在数据中心、存储网络等场景下,使用 9000 字节的巨型帧才是标准和推荐的做法。

4. 参考资料

  • 计算机网络第7版(谢希仁)