资讯动态

彻底搞懂bit、Byte、KB、MB:网络带宽与存储容量换算详解

发布时间:2026/9/24 22:32:57 来源:尧图企业网站定制
1. 先看一个每天都在发生的单位乌龙我有个朋友打电话来问家里刚升了 1000M 宽带下载文件怎么最高只跑到 110MB/s 左右是不是运营商偷工减料了这不是第一次有人问我这种问题了几乎每个搞过网络或者运维的人都被亲戚朋友问过同样的事。问题的根源不是运营商黑心而是大家把“M”后面的单位搞混了。运营商说的 1000M完整写法是 1000Mbps这里的 b 是 bit也就是“比特”而下载软件里显示的是 MB/s这里的 B 是 Byte也就是“字节”。两者之间差着一个 8 倍的关系。其实这种单位混乱不只出现在宽带场景。买硬盘时标称 1TB插到电脑上显示 931GB买手机 128GB可用空间却只有 110GB 上下跑模型时看显存4090 明明是 24GB任务管理器里却是 24564MiB写脚本监控网卡流量日志里速率一会儿是 93MB/s一会儿又是 745Mbps看的人都晕。几乎所有和计算机存储、网络、串口、视频码流打交道的人都会在单位换算上栽过跟头。这篇文章不是教科书我想把 K、KB、Kb、b、B 这一整套单位系统的底层逻辑讲透包括为什么会有 1000 和 1024 两种标准厂商和操作系统为什么“打架”网络带宽怎么换算视频码流怎么算存储以及我在实际工程里踩过的单位相关的坑。无论你是刚学编程的学生、做开发的程序员还是日常需要买硬盘、调路由器的普通用户这套单位关系搞清楚之后很多“灵异事件”都会瞬间变得合理。2. bit 和 Byte信息世界的“原子”与“分子”2.1 比特是物理世界里的一个开关bit 的全称是 binary digit中文叫“比特”或“位”。它是计算机信息的最小单位取值只有 0 和 1。物理层面一个 bit 可以是一根导线上的高电平和低电平也可以是内存颗粒里一个电容是否充电还可以是固态硬盘里一个浮栅晶体管里存的电子多少。总之它就是“开”或者“关”两种状态。理解 bit 的一个很好类比是摩斯电码。摩斯电码里只有“点”和“划”两种符号但通过排列组合可以表达全部字母和数字。计算机里的 bit 也是同理两个 bit 可以表示 4 种状态00、01、10、11三个 bit 可以表示 8 种状态n 个 bit 可以表示 2 的 n 次方种状态。CPU 位数、数据总线宽度、内存地址线数量这些说的其实都是“多少个 bit 在同时参与工作”。正是因为它描述的是物理信号所以凡是涉及传输速率的地方几乎都习惯用 bit 做单位。比如宽带网速、路由器无线速率、串口波特率、摄像头码流它们衡量的是“每秒钟能传多少个 0 或 1”自然用 bit/s也就是 bps。2.2 字节为什么是 8 位Byte中文叫“字节”简写为 B它是计算机存储和处理数据的基本单位。一个 Byte 等于 8 个 bit。这个“8”不是随便定的有历史原因也有工程原因。早期计算机有 4 位、6 位、7 位、8 位等不同字长。ASCII 码最初用 7 位就能表示 128 个字符覆盖英文字母、数字和常用符号。但 7 位在硬件上不整齐而且为了做奇偶校验需要额外一个 bit于是 8 位成了事实标准。8 位还可以正好凑成 2 的 3 次方与二进制的天然结构对齐。后来的 CPU 以 8 位为一个“字节”作为寻址最小单位内存地址的每一格存储一个字节文件大小、数据结构大小的统计也都以字节为最小单位。现在你看到的大量技术名词都隐含了字节这个单位32 位操作系统能寻址 4GB 内存这里的 32 位是 bit但计算出来的 4GB 是字节一个 UTF-8 编码的中文字符占 3 个字节Redis 的字符串长度统计默认返回字节数数据库里 varchar(255) 里的 255 是字符实际存储占用可能需要 255 个字节以上。所以文件大小、内存容量、磁盘分区、数据库占用空间这些静态存储量优先用 Byte 描述。2.3 一张表记住 b 和 B 的关系很多人记不住大写小写我提供一个已经用了很多年的方法大写 B 身材“大”对应字节 Byte小写 b 身材“小”对应比特 bit。一个字节等于 8 个比特所以 1B 8b。下面是核心换算关系表符号英文名称中文名称换算关系典型使用场景bbit比特 / 位最小信息单位网络带宽、码流、波特率BByte字节1 B 8 b文件大小、内存、存储Kbkilobit千比特1 Kb 1024 b 128 B网速描述KBKilobyte千字节1 KB 1024 B文件大小Mbmegabit兆比特1 Mb 1024 Kb运营商带宽MBMegabyte兆字节1 MB 1024 KB 8 Mb下载速度、存储看到表格你会发现Kb 和 KB 就是差一个大小写但数值上差了 8 倍。所以写文档、写代码、看监控数据时丢掉单位前缀就是事故的起点。3. K 为什么时而 1000 时而 1024厂商、系统和标准的三方博弈3.1 二进制的天然亲和寻址和内存“K”这个字母来自希腊词缀 kilo本意是 1000。但是计算机世界从一开始就跑在二进制上内存地址按 2 的幂设计。2 的 10 次方是 1024和 1000 很接近于是早期计算机工程师很自然地用 K 来表示 10241KB 1024B1MB 1024KB。这样换算内存容量非常方便因为地址线增加 10 根容量就翻 1024 倍比算十进制小数舒服得多。今天你在所有跟内存相关的地方看到的 K、M、G本质上都应该是 1024 进制。DDR5 内存条标称 4800MT/s这是速率但容量“8GB”实际是 8GiBJava 虚拟机参数 -Xmx4g 里的 g 也是 2 的 30 次方字节Linux 的 free 命令默认显示单位是 KiB 和 MiB含义清清楚楚。操作系统里查看文件属性Windows 资源管理器显示的 KB、MB本质是 KiB、MiBWindows 只是没标全。所以你会发现一个 1GB 的 U 盘文件在 Windows 里显示为 976MB或者在另一个工具里显示为 953.67MiB一堆数字全是同一个文件。它们都没有错只是用了不同进制。3.2 商业世界的十进制硬盘和云盘硬盘厂商不用 1024而用 1000是为了让标称容量看起来更大。1TB 硬盘如果按二进制标注应该写成 931GiB但厂商写的是 1,000,000,000,000 字节 1TB看起来“大”了不少。这不算虚假宣传因为国际单位制 SI 里 k、M、G 本来就是十进制的硬盘作为物理设备用十进制标注在贸易中完全合规。系统显示容量用的又是二进制于是“缩水”现象出现了。云盘和云服务器也延续了这种商业习惯。阿里云、腾讯云的云盘容量按 GB 计费这里的 GB 基本指 1,000,000,000 字节。你买了一台 100GB 系统盘的服务器在 Linux 下用 df -h 看大概率是 93GiB 左右。所以做容量规划时如果谁能给你预留 8%~10% 的余量不是因为他保守是因为他在帮你还这笔“进制债”。3.3 国际标准术语KiB、MiB 与 GB 的正确标注为了终结这种混乱国际电工委员会IEC在 1998 年定义了二进制前缀KiBKibibyte、MiBMebibyte、GiBGibibyte、TiBTebibyte分别对应 2 的 10、20、30、40 次方字节。而 k、M、G 严格留给十进制。也就是说位1 kbit 1000 bit1 Kibit 1024 bit字节1 kB 1000 B1 KiB 1024 B兆字节1 MB 1,000,000 B1 MiB 1,048,576 B。Linux 很多工具已经遵循这套标注ls -lh 显示的是二进制但写成 Mfree 则明确显示为 MiBdf 的 -h 显示的是 GiB 缩写但系统往往显示为“G”却不加 i。真正较真的项目会在文档里写“MiB”而不是“MB”。这带来了一个很反直觉的事实代码里字符串“1000MB”到底是多少字节必须看上下文。是网络流量那可能是 1,000,000,000 字节。是云硬盘大小也是。是内存那一定是 1,048,576,000 字节左右。是数据库 buffer大概率是二进制。不弄清楚方案和预算都会翻车。3.4 1TB 硬盘“缩水”的完整计算我们拿最常见的 1TB 机械硬盘举例。厂商的 1TB 1,000,000,000,000 字节。系统以 GiB 为显示单位1GiB 1024^3 字节 1,073,741,824 字节。计算过程1,000,000,000,000 / 1,073,741,824 931.3225746154785 GiB所以一块 1TB 硬盘在 Windows 资源管理器里显示约 931GB在 Linux 里显示约 931G这个“少了 69GB”不是坏盘也不是虚标而是进制差异。同理512GB 固态硬盘系统显示约 476GB2TB 显示约 1.81TB。接受这个事实后买盘、装机、做存储规划都不会再被误导。4. 网络带宽、下载速度、码流和程序日志里的实际换算4.1 运营商说的 1000M 到了下载软件里为什么是 100 多 MB/s宽带的单位 Mbps Megabit per second是每秒兆比特。运营商宣传的 1000M完整写是 1000Mbps 1,000,000,000 bit/s注意这里一般是十进制。下载软件显示的是 MB/s是每秒兆字节。两者换算1000 Mbps 1000 / 8 125 MB/s 理论峰值为什么实际跑不到 125MB/s因为下载速度还受 TCP/IP 协议头部开销、线路信号衰减、光猫路由性能、Wi-Fi 无线协商速率、对方服务器限速等多方面影响。有线的宽带测速能跑到 110~118MB/s已经说明设备链路状态很好了。如果是 Wi-Fi那更复杂因为 2.4GHz 和 5GHz 有大量无线协议开销家里路由器标称 AX3000指的是 2.4GHz 574Mbps 加 5GHz 2402Mbps 的总理论速率真实单设备跑 700~900Mbps 都算正常。这个场景的关键公式就一个Mbps 除以 8 等于 MB/s。所以 100M 宽带理论下载是 12.5MB/s300M 是 37.5MB/s500M 是 62.5MB/s1000M 是 125MB/s。如果哪天下载速度不对劲先用这个公式算一下理论上限再排查服务器和设备能省下很多无用功。4.2 监控摄像头码流估算真香公式很多人不知道视频监控项目里最大头的成本不是设备是录像存储。而存储容量完全取决于码流码流单位又是 Mbps。一个典型 400 万像素高清摄像头主码流 H.265 编码大概 4Mbps全天 24 小时录像存储占用可以这样估算4 Mbps 4,000,000 bit/s 每秒字节数 4,000,000 / 8 500,000 B/s 500 KB/s这里用十进制K 一天容量 500 KB × 3600 秒 × 24 小时 43,200,000 KB 43.2 GB十进制 ≈ 40.22 GiB也就是说一颗 4Mbps 的摄像头一天大约占 40GB 存储空间。如果换成 8Mbps 的 4K 摄像头一天就是 80GB。这比很多人拍脑袋估的 20GB 要多得多不做预算会直接被存储成本打爆。反过来如果规定了存储容量和保存天数也能反推允许的最大码流。比如 1TB 硬盘想存 7 天 4 路录像单路码流不能超过多少这种题目在监控行业笔试里很常见其实就是一个单位换算应用题会了就不慌。4.3 代码和日志中的单位踩坑复盘我自己的一个真实翻车经历发生在写网卡流量监控脚本时。需求是统计内网某台机器每秒钟收发多少数据。Linux 的 /proc/net/dev 返回的是字节数bytes接口文档写得很清楚。但我当时参考了网上另一段代码里面把数值当成了 bit又乘了 8导致最终面板上的速率比真实值大了 8 倍。业务方看到“12MB/s”的突发流量很紧张实际只有 1.5MB/s。事后复盘问题就出在“看到数值就换不看单位来源”。从底层接口拿到的数据要么是字节要么是包数量极少有底层直接给比特的。而监控展示层却习惯用 bit/s这就成了 bug 温床。我现在给自己定了一条纪律接口返回原始字节数内部存储也全用字节只有到最后展示环节才根据前端需要换算成KB/MB或kbps/Mbps。任何函数和方法名里都强制带上单位后缀比如 getBytesPerSecond()而不是 getSpeed()。代码里展示文件大小也一样。Java 的 File.length() 返回 long 类型的字节数Python 的 os.path.getsize() 也是字节数Go 的 FileInfo.Size() 也是字节数。把这些原始值转成人类可读字符串时建议单独封装一个方法并且明确参数 binary 是 true 还是 false。不要为了让数字好看就默认用 1000 进制否则用户看到的“1GB”实际只有 953MiB又会产生新一轮误解。4.4 串口波特率和传输效率的附加题除了网络串口通信里也有类似的单位坑。常见的波特率 115200单位是 bps也就是每秒最多传 115200 个 bit。如果一帧数据里有 1 位起始位、8 位数据位、1 位停止位有的还有校验位那么有效数据速率是多少有效速率 115200 × (8 / 10) 92160 bit/s 11520 B/s ≈ 11.25 KiB/s你看同样是 115200 波特率因为协议开销实际有效字节速率只有理论比特速率的 80%。这在老式嵌入式设备调试、GPS 串口数据读取、工业传感器上传里都容易算错。把单位彻底搞清楚之后这种题直接心算就能出结果。5. 一张速查表加三条工程铁律彻底终结单位混乱5.1 常见带宽到下载速度速查表下面这个表我常贴在工位上也用很久了分享给你运营商带宽理论下载速度实际体验参考有线50Mbps6.25 MB/s5~6 MB/s100Mbps12.5 MB/s10~11.5 MB/s300Mbps37.5 MB/s30~35 MB/s500Mbps62.5 MB/s50~58 MB/s1000Mbps125 MB/s90~118 MB/s“实际体验参考”是为了让读者大概心里有底不用当精确值。真正的瓶颈往往是服务器带宽、磁盘速度、Wi-Fi 信号而不是运营商端口。5.2 判断单位归属的万能三步法我总结了一个三步判断法遇到任何和“K、M、G”有关的数字先走这三步看这个数字描述的是“状态量”还是“速率量”。静态存储文件、内存、磁盘容量用 Byte每秒传输带宽、码流、波特率用 bit。看字母大小写。大写 B 是字节小写 b 是比特。如果写成了 KBps 和 Kbps请马上警惕这俩差 8 倍。看进制上下文。凡和内存、文件系统、软件语言默认值相关的 K 都是 1024凡和网络速率、硬盘标称、云盘计费相关的 K 基本都是 1000协议标准如果写“Mbps”里的 M 是十进制 1,000,000写“MiB”里的 Mi 是二进制 1,048,576。只要这三步走了绝大多数单位错误都能在写进方案之前被拦住。5.3 三条工程铁律最后三条铁律是我在项目文档、代码 review、运维告警中反复用的所有接口和日志必须写明单位而且统一使用字节作为内部事实源。接口别返回值不带单位要么叫 bytes 要么叫 bits夹在中间的最难排查。内部存储用字节展示层再做换算能避免 8 倍、1.024 倍两层错误。容量采购和方案设计里明确标注是 GB 还是 GiB。向云厂商买磁盘、规划大数据集群、估算日志存储量时先确认计费单位是十进制还是二进制。一般云盘计费是十进制 1GB 1,000,000,000 B但 Hadoop 的块大小、HDFS 容量、Kafka 的日志段大小很多配置默认按二进制 GiB 解读。不确认清楚扩容计划会差 7.3%。给非技术人员解释时永远用“下载速度”而不是“宽带速率”。你跟家人说“1000M 宽带理论下载 125MB/s”他们听不懂你说“千兆宽带最快能跑 100MB 每秒左右1GB 电影大概 10 秒下完”他们立刻明白。这不是单位问题是表达问题但表达顺了误解就少了。我以前也以为这些单位是入门知识不值得认真对待。直到有一次线上告警因为一个脚木把 bytes 当 bits导致告警提前 8 倍触发半夜被叫起来处理才发现最基础的东西才最伤人。单位不是八股文它是工程里真正的“一刻也不能放松”的细节。最后再分享一个小技巧遇到任何换算先写带单位的算式再代入数字。比如 100Mbps 的“100M”先写成 100,000,000 bit/s再除 8写成 12,500,000 B/s最后转成 12.5 MB/s。全程带单位走能拦截掉一半以上的低级错误。这套方法我到现在还在用也推荐你养成这个习惯。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑