公众号旧文
为什么互联网最终选择 主机名→DNS→IP
我们每天使用互联网时,几乎都默认了一件事:
访问一个服务,用的是名字; 真正建立连接时,用的是 IP。
看起来理所当然,但这其实是一个被无数现实问题逼出来的设计结果。
互联网最终选择了:
主机名 → DNS → IP
不是历史包袱,而是一次极其成功的工程抽象。
一、IP 从来就不是身份
很多人下意识会把 IP 当成一台机器。
但从设计之初,IP 的定位就非常明确:
IP 描述的是位置,而不是身份。
IP 解决的问题只有一个:
- 数据包该往哪走
它并不关心:
- 你是谁
- 你是不是那台机器
- 你是否值得被信任
一句话说清楚:
IP 是“在哪”,不是“是谁”。
二、身份必须稳定,但位置一定会变
现实网络中,变化是常态:
- 家宽重拨,IP 就换
- 云服务器迁移、扩容、缩容
- 多机房、多活、容灾
- CDN、Anycast
- NAT、CGNAT
- 容器、虚拟机、弹性调度
如果身份直接等于 IP,会发生什么?
每一次变化,都是一次对整个世界的通知。
这是一个根本无法规模化的系统。
三、DNS 的真正作用:解耦,而不是“翻译”
表面上看,DNS 做的是:
把名字解析成 IP
但这只是表象。
DNS 真正完成的是一件更重要的事情:
把「身份」和「位置」彻底解耦。
于是,互联网被自然拆成了三层:
| 层级 | 负责什么 |
|---|---|
| 主机名 | 我是谁 |
| DNS | 我现在指向哪里 |
| IP | 数据怎么过去 |
这种分层允许:
- IP 随意变化
- 路由随时调整
- 实现可以推倒重来
而对外的身份保持不变。
四、为什么是主机名,而不是 IP?
主机名表达的是:
一个明确的节点身份
它不关心:
- 底层是物理机还是虚拟机
- 是否更换网络
- 是否走直连或中继
它只回答一个问题:
“你要找的是谁?”
而不是:
“你现在住在哪?”
五、名字是长期契约,IP 只是实现细节
没有人会对一个 IP 建立长期信任。
但人们会信任:
- 一个名字
- 一个域
- 一个背后的组织
- 一段历史和责任
所以可以非常笃定地说:
域名 / 主机名是长期契约,IP 只是当前实现。
六、现代系统,其实在重复这个选择
今天我们看到的:
- Kubernetes Service
- 内网服务发现
- Consul / etcd
- Tailscale MagicDNS
本质上都在做同一件事:
用名字代表身份,用映射应对变化。
互联网当年的选择,并没有过时, 反而一次次被验证是正确的。
七、总结
互联网最终选择:
主机名 → DNS → IP
不是为了方便人类记忆, 而是为了允许系统无限变化,而身份保持稳定。