IPv4 全部地址写入文件,究竟占用多少空间?实测与 AI 计算差异全解析
你是否想过,如果把全球所有 IPv4 地址一行一个写进文件,这个文件会有多大?
IPv4 地址范围从 0.0.0.0 到 255.255.255.255,总共包含约 42.9 亿个独立 IP。之前我写过一个简单的 Python 程序,把这海量 IP 全部打印了出来,并保存成文件。

这段代码大概是 2022 年写的,那时候人工智能还只能聊聊天,写代码也局限在简单任务上。当时手动写了一个生成 IP 段的脚本,把整个 IPv4 地址空间遍历了一遍,输出成文本。

ip_range.py 的源码如下:
#!python3
import sys
def ip2int(ip): lis = ip.split('.') return int("%02x%02x%02x%02x" % (int(lis[0]), int(lis[1]), int(lis[2]), int(lis[3])), 16)
def int2ip(num): hexIP = str('%08x' % num) return str("%i.%i.%i.%i" % (int(hexIP[0:2], 16), int(hexIP[2:4], 16), int(hexIP[4:6], 16), int(hexIP[6:8], 16)))
def ip2hex(ip): lis = ip.split('.') return str("%02x%02x%02x%02x" %(int(lis[0]), int(lis[1]), int(lis[2]), int(lis[3])))
def ip_range(ip1, ip2): for x in range(ip2int(ip1),ip2int(ip2)+1): yield int2ip(x)
if __name__ == '__main__': begin = sys.argv[1] end = sys.argv[2] for i in ip_range(begin, end): print(i)
使用起来也很直接,指定起始和结束 IP 就能逐行输出:

生成的全量 IPv4 文件体积如下,实际测量结果一目了然:

现在当然可以直接问 AI,它能迅速给出估算值。但这件事最有意思的地方在于,人工智能也会犯低级错误——甚至连简单的加法都能算错。
IPv4 地址空间计算
总数
IPv4 地址由 32 位二进制组成,总数是 2³²,也就是 4,294,967,296 个,大约 42.9 亿个。

存储空间
每个 IP 写成 “x.x.x.x” 的形式,并换行,各部分的字符数构成如下:
| 部分 | 字符数 |
|---|---|
| 3 段 1 至 3 位数字 + 点号“.” | 最多 12 个字符(例如 255.255.255.255) |
换行符 \n | 1 字节 |
但不同 IP 长度并不固定,像 0.0.0.0 只有 7 个字符,因此不能简单乘以最大长度。需要精确计算。
更精细的存储空间分析
每个 IP 格式为 a.b.c.d\n,各部分字节数如下:
| 组成 | 计算方式 | 字节数 |
|---|---|---|
| 数字部分 | 单段 0-255 的字符总和为 658,4 段 × 256³ 组合 | 44,157,632,512 |
| 3 个点号 | 2³² × 3 | 12,884,901,888 |
| 换行符(Linux) | 2³² × 1 | 4,294,967,296 |
| 合计 | 61,337,501,696 |
换算一下,这个纯文本文件在 Linux 下大约需要 61.3 GB(约等于 57.1 GiB)。
Windows 系统下的换行是 \r\n,占 2 个字节,比 Linux 多 1 字节。重新计算对比:
| 组成 | Linux(\n) | Windows(\r\n) |
|---|---|---|
| 数字部分 | 44,157,632,512 | 44,157,632,512 |
| 点号 | 12,884,901,888 | 12,884,901,888 |
| 换行符 | 4,294,967,296 | 8,589,934,592 |
| 合计 | 61,337,501,696 | 65,632,436,000 |
所以在 Windows 下,文件大约为 65.6 GB(61.1 GiB)。

在 Windows 环境中,AI 推算的字节数是 65,632,436,000,而我实际统计的结果是 65,632,468,992,两者相差 32,992 字节。
根据 AI 的逻辑,IPv4 总个数为 4,294,967,296,这个值与我的实际统计完全一致:

点号的个数和换行符 \r\n 的个数是确定不变的,唯独各 IP 地址中数字字符的总数是需要核对的。AI 提供的公式到底准不准确?
单靠公式难以直接验证,于是我又写了程序实际遍历计算了一遍。


起初以为是 AI 的计算逻辑本身有误,结果却发现,只是它在做加法时算错了!

我重新手动加了一遍,最终确认就是人工智能把几个数简单相加时出了错,而不是算法出了问题。

而关于数字字符总数的推导逻辑是这样的:
所有 IPv4 地址(去掉点号和换行)中,数字字符的总数为 44,157,632,512 个字符,约 441.6 亿。
具体计算方法
先计算单段 0 到 255 的字符总和:
- 1 位数(0-9):10 个 × 1 字符 = 10
- 2 位数(10-99):90 个 × 2 字符 = 180
- 3 位数(100-255):156 个 × 3 字符 = 468
- 合计:658 个字符
四段字符总数 =
4 × 658 × 256³= 44,157,632,512。
其原理是每一段独立存在,比如 a 段的每一种取值都会在 b、c、d 段的组合中出现 256³ 次,因此乘以 256³。同理,四段乘 4,就能得出全量数字字符的总长度。
下面的图表直观展示了哪些地址段会占据更多字符空间:


经过实际文件统计和理论推算的交叉验证,最终可以确定:一个包含全部 IPv4 地址的纯文本文件,在 Linux 下约占用 61.3 GB,在 Windows 下则因为换行符占用翻倍,达到约 65.6 GB。而 AI 在加法上的小失误,也从侧面提醒我们,即便面对看似简单的存储问题,亲手验证依然很有必要。