Ubuntu etc hosts 中的127.0.0.1与127.0.1.1 主机名
参考链接
https://lists.debian.org/debian-user/2025/04/msg00113.html https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_hostname_resolution https://serverfault.com/questions/363095/why-does-my-hostname-appear-with-the-address-127-0-1-1-rather-than-127-0-0-1-in https://serverfault.com/questions/925136/difference-between-127-0-0-1-and-127-0-1-1
问题
查看了从ubuntu-base构建的根文件系统,hosts文件内容是这样的
$ cat /etc/hosts
127.0.0.1 localhost rk3588
# 格式: IP地址 规范主机名(Canonical Name) 别名(Aliases)
而其他根文件系统,内容是这样的
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 rk3588
也就是localhost和rk3588这个主机名是分开两行的
- 127.0.0.1和127.0.1.1有什么区别呢?
- 为什么要分开成两行?
127.0.0.1 和 127.0.1.1的区别
127.0.0.1 和 127.0.1.1 都属于 IPv4 的环回地址段(127.0.0.0/8),本质都是“本机自己”:
- 整个
127.0.0.0/8网段都保留给环回(loopback)使用 - 发往这个网段的包不会离开本机,也不会上物理网卡
- 操作系统内核直接在本机内部“收”这些包
所以从协议层面看:
👉 127.0.0.1 和 127.0.1.1 在功能上是等价的,都是本机
127.0.0.1:标准“本机地址”
- IPv4 环回段的标准规范地址
- 几乎所有系统都会把它绑定到
lo(loopback)接口 /etc/hosts中通常都有:
127.0.0.1 localhost
127.0.1.1:Debian/Ubuntu 的“主机名专用地址”
在 Debian / Ubuntu 及其衍生系统中,/etc/hosts 常看到:
127.0.0.1 localhost
127.0.1.1 your-hostname
这是 Debian 安装程序的一个约定设计。
为什么要分开成两行
根据参考文档,大致是以下的原因,但是这个原因笔者也不十分确定:
- Ubuntu很多程序底层几乎所有网络 API 都是围绕”地址(address)”设计的,而不是围绕”主机名(hostname)”设计的,所以程序要把 hostname 解析成 IP
- 程序不仅想知道主机名,还想知道自己的完整身份,也就是FQDN(FQDN 是 Fully Qualified Domain Name 的缩写,中文叫完全限定域名,有时也叫绝对域名。它是指在 DNS 体系中唯一、无歧义地标识一台主机或域的完整域名,包含了从主机名到根域(.)的全部层级信息。)
- FQDN的获取流程是这样的:获取主机名 -> 主机名解析到IP地址 -> IP地址反查得到FQDN
- 如果不分行,主机名绑到 127.0.0.1,也就是 127.0.0.1 localhost rk3588,根据以上流程:
- 主机名是 rk3588
- 解析 rk3588 → 得到 127.0.0.1
- 反向解析 127.0.0.1 → 全世界标准都是返回 localhost
- 结论:程序认为本机的 FQDN 就是 localhost
- 所以需要分成两行
留下评论