文件大小和网速的单位
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
- Windows 看到这
新的二进制前缀标准
补充知识: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
是小写,而 M
和 G
是大写,这恰恰是最规范、最正确的写法。
尽管 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版(谢希仁)