少于 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.1127.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
  • 所以需要分成两行

留下评论