Hosts与DNS入门科普:编程新手必学网络基础

编程狮(w3cschool.cn) 2026-04-29 17:23:22 浏览数 (34)
反馈

当你在浏览器里输入 w3cschool.cn 就能打开网页,当你在本地开发时输入 localhost:3000 就能访问自己写的项目,你有没有想过,这背后到底是谁在帮你把这些好记的域名,转换成电脑能看懂的 IP 地址?

答案就是:HostsDNS

这两个东西是计算机网络最基础的概念之一,也是每个编程新手迟早都会碰到的知识点。不管是本地开发测试、解决网站访问慢的问题,还是排查网络故障,你都需要搞懂它们。今天这篇文章,编程狮就用最通俗的语言,把这两个概念讲透,再教你怎么用它们解决实际问题。

一、Hosts:你电脑里的 “私人通讯录”

我们先从更简单的 Hosts 讲起。

你可以把 Hosts 理解成你电脑本地的一个私人小本本,上面你可以手动写下:“如果有人要找 myapp.local 这个名字,就直接去 127.0.0.1 这个地址,不用去问别人。”

1.1 Hosts 的本质是什么?

Hosts 其实就是一个纯文本文件,没有后缀名,里面的内容非常简单,每一行都是一条规则,格式是:

IP地址  域名

比如:

127.0.0.1  myapp.local
0.0.0.0  ads.example.com
192.168.1.1 w3cschool.cn

  • 第一行意思是:当你访问 myapp.local 的时候,直接指向你自己电脑的本地 IP 127.0.0.1
  • 第二行意思是:把广告域名 ads.example.com 指向一个无效地址,这样就能屏蔽这个广告网站了。

图:Windows 系统默认的 Hosts 文件内容

图:Windows 系统默认的 Hosts 文件内容

1.2 Hosts 文件藏在哪里?

这个文件在不同系统里的位置不一样,但作用完全相同:

操作系统 Hosts 文件路径
Windows C:\Windows\System32\drivers\etc\hosts
macOS /etc/hosts
Linux /etc/hosts

⚠️ 注意:修改这个文件需要管理员 /root 权限,普通用户是改不了的。

二、DNS:互联网的 “公共电话簿”

讲完了私人小本本,我们再来讲讲整个互联网的 “公共电话簿”——DNS。

如果说 Hosts 是你自己写的通讯录,那 DNS 就是整个互联网共享的、自动更新的超级大电话簿。它的作用和 Hosts 一样:把域名转换成 IP 地址,只不过它是分布式的,存放在全世界的服务器上。

2.1 为什么需要 DNS?

在互联网早期,整个网络只有几台电脑,大家就靠 Hosts 文件来记录地址。但随着互联网越来越大,全世界有几十亿台设备,总不能让每个人都手动维护一个包含所有网站地址的文件吧?

于是 DNS 就诞生了。它就像一个查号台,当你要访问一个域名的时候,你去问 DNS 服务器:“请问 w3cschool.cn 的 IP 地址是多少?”,DNS 服务器就会告诉你答案。

2.2 DNS 解析的完整流程

当你输入一个网址,DNS 是怎么一步步查到 IP 的?整个过程其实比你想象的要复杂,我们用一张图来看:

图:DNS 递归查询的完整流程

整个过程是这样的:

  1. 你电脑先问本地的 DNS 递归服务器:“www.w3cschool.cn 的 IP 是啥?”
  2. 递归服务器如果不知道,就去问根域名服务器:“你知道 www.w3cschool.cn 的 IP 吗?”
  3. 根服务器说:“我不清楚,不过 .cn 的服务器在这个地址,你去问它。”
  4. 递归服务器又去问 .cn 的顶级域名服务器:“那你知道 www.w3cschool.cn 的 IP 吗?”
  5. .cn 服务器说:“我也不清楚,不过 w3cschool.cn 的权威服务器在这个地址,你去问它。”
  6. 最后递归服务器问 w3cschool.cn 的权威服务器,权威服务器说:“www.w3cschool.cn 的 IP 是 180.101.50.242
  7. 递归服务器把这个结果告诉你,同时缓存下来,下次别人再问就不用重新查了。

整个过程看起来要查好多服务器,但其实整个过程只需要几十毫秒,快到你完全感觉不到。

三、它们是怎么配合工作的?优先级谁更高?

现在你知道了,Hosts 是本地的手动配置,DNS 是网络的自动查询。那当你访问一个域名的时候,电脑会先查哪个?

答案是:Hosts 的优先级永远比 DNS 高!

整个查询顺序是这样的:

浏览器缓存 → 系统缓存 → Hosts文件 → DNS服务器查询

也就是说:

  1. 电脑首先会看你浏览器里有没有缓存过这个域名的 IP,有就直接用。
  2. 如果没有,再看系统的 DNS 缓存里有没有。
  3. 如果还没有,就去查 Hosts 文件,如果你在这里配置了,就直接用你配置的 IP,根本不会去问 DNS 服务器
  4. 只有 Hosts 里也没有,电脑才会去发起 DNS 查询,去网上找这个域名的 IP。

这就是为什么 Hosts 这么有用 —— 它可以强制让某个域名指向你想要的 IP,完全绕过 DNS 的解析结果。

四、编程新手必学:Hosts 与 DNS 的常见应用

搞懂了原理,我们来看看,作为编程新手,这些东西到底能帮你做什么?

4.1 本地开发:用自定义域名代替 localhost

这应该是开发者用 Hosts 最多的场景了。

你有没有发现,本地开发的时候,你总是要输入 localhost:3000 或者 127.0.0.1:8080 这样的地址?又长又难记,而且如果你的项目要测试子域名,比如 api.myapp.com,用 localhost 根本做不到。

这时候 Hosts 就派上用场了!你只需要在 Hosts 里加一行:

127.0.0.1  myapp.local
127.0.0.1  api.myapp.local

然后你就可以直接在浏览器里输入 http://myapp.local 访问你的本地项目了,甚至不用加端口(如果你用了 Nginx 反向代理的话)。

这样做的好处太多了:

  • 地址更像生产环境,测试起来更真实
  • 可以测试子域名功能,比如多租户系统
  • 不用记一堆端口号,一个项目一个域名,清晰明了
  • Cookie、LocalStorage 这些也能正常按域名隔离

💡 小提示:本地开发推荐用 .local.test.localhost 这些保留后缀,不要用真实的 .com 域名,避免不小心把线上网站给改了。

4.2 加速访问:解决 GitHub 等网站访问慢的问题

很多开发者都碰到过,访问 GitHub 特别慢,clone 代码、下载依赖都卡得要死。这很多时候不是你的网不好,而是 GitHub 的 CDN 域名被 DNS 解析到了很远的服务器上。

这时候你就可以通过修改 Hosts,手动把 GitHub 的域名指向一个更快的 IP 地址,绕过 DNS 的解析,就能大幅提升访问速度。

网上有很多现成的 GitHub Hosts 配置,你只需要把它们复制到你的 Hosts 文件里就行了。

4.3 屏蔽广告和恶意网站

你还可以用 Hosts 来屏蔽广告!

很多广告网站的域名,比如各种追踪、弹窗广告的域名,你只需要把它们指向 0.0.0.0 或者 127.0.0.1,这样你的电脑就永远访问不到这些广告网站了,浏览器里的广告就会自动消失。

网上有很多整理好的 Hosts 广告屏蔽列表,比如 hosts 项目,下载下来直接用,就能帮你屏蔽掉几十万条广告和恶意域名。

4.4 测试上线前的域名切换

当你要把网站从旧服务器迁移到新服务器的时候,DNS 修改完需要等全球同步,这个过程可能要几个小时甚至一天。

这时候你就可以先在自己的电脑上修改 Hosts,把域名指向新服务器的 IP,先自己测试一下新服务器上的网站能不能正常访问,没问题了再去改 DNS 解析,这样就能避免上线出问题。

五、踩坑必看:常见问题与解决方案

用 Hosts 和 DNS 的时候,新手很容易碰到各种问题,这里我把最常见的几个问题和解决方法都整理好了。

5.1 修改了 Hosts 文件,保存不了?

问题现象:打开 Hosts 文件,改完之后点保存,提示 “拒绝访问” 或者 “没有权限”。

原因:Hosts 文件是系统文件,修改它需要管理员权限,你直接双击打开的记事本是普通权限,所以改不了。

解决方法

  • Windows:右键点击记事本,选择 “以管理员身份运行”,然后通过记事本的 “文件→打开”,找到 Hosts 文件的路径,打开修改完再保存。
  • macOS/Linux:在终端里用 sudo 命令编辑,比如 sudo nano /etc/hosts,输入密码之后就能修改了。

Windows 下以管理员身份编辑 Hosts 文件

图:Windows 下以管理员身份编辑 Hosts 文件

5.2 修改了 Hosts,但是不生效?

问题现象:Hosts 改完了,但是访问域名还是原来的 IP,没变。

原因:DNS 缓存!你的系统或者浏览器把之前的解析结果缓存下来了,没读新的 Hosts 配置。

解决方法:清空 DNS 缓存,不同系统的命令不一样:

Windows 系统:

打开 CMD(命令提示符),输入:

ipconfig /flushdns

然后重启一下浏览器就好了。

macOS 系统:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Linux 系统:

不同发行版不太一样,常用的:

# 如果用systemd-resolved
sudo systemd-resolve --flush-caches


# 如果用nscd
sudo service nscd restart

💡 小技巧:改完之后可以用 ping 你的域名 来测试,比如 ping myapp.local,如果显示的 IP 是你配置的,那就说明生效了。

5.3 网站打不开,提示 “DNS 服务器未响应”?

问题现象:其他网站都能打开,就某个网站打不开,或者所有网站都打不开,提示 DNS 错误。

解决方法

  1. 先清 DNS 缓存:就是上面说的那个命令,很多时候清完就好了。
  2. 换 DNS 服务器:如果是运营商的 DNS 出问题了,你可以手动把 DNS 改成公共 DNS:
    1. 阿里 DNS:223.5.5.5223.6.6.6
    2. Cloudflare DNS:1.1.1.11.0.0.1
    3. Google DNS:8.8.8.88.8.4.4
  3. 检查 Hosts 文件:看看是不是不小心把这个网站的域名给写错了,或者被恶意软件改了 Hosts。

5.4 访问网站,跳转到了奇怪的广告页面?

问题现象:输入正确的网址,却跳到了别的广告网站,这很可能是DNS 劫持

原因:运营商或者某些恶意软件,把你的 DNS 解析结果给篡改了,把正常的域名指向了广告服务器。

解决方法

  1. 手动修改 DNS 服务器,用上面说的公共 DNS,不要用运营商默认的。
  2. 修改 Hosts 文件,把这个网站的正确 IP 写进去,强制绕过劫持的 DNS。

六、新手实操:怎么修改 Hosts 文件?

最后,我们来一步一步教你怎么修改 Hosts 文件,非常简单。

Windows 系统步骤:

  1. 点击开始菜单,找到 “记事本”,右键点击,选择 “以管理员身份运行”。
  2. 在记事本里,点击 “文件”→“打开”,把路径粘贴进去:C:\Windows\System32\drivers\etc\
  3. 右下角的文件类型选择 “所有文件”,这样就能看到hosts文件了,点击打开。
  4. 在文件的最后一行,加上你要配置的规则,比如 127.0.0.1 myapp.local
  5. 按 Ctrl+S 保存。
  6. 打开 CMD,输入 ipconfig /flushdns 清缓存,搞定!

macOS/Linux 系统步骤:

  1. 打开终端。
  2. 输入命令:sudo nano /etc/hosts,输入你的电脑密码。
  3. 用方向键移动到文件最后,加上你的配置。
  4. 按 Ctrl+O,然后按回车保存,再按 Ctrl+X 退出。
  5. 输入清缓存的命令,搞定!

总结

Hosts 和 DNS,一个是本地的手动 override,一个是全局的自动查询,它们一起构成了互联网域名解析的基础。

对于编程新手来说,搞懂这两个东西,不仅能帮你理解网络访问的原理,更能解决你日常开发中碰到的各种实际问题:本地开发的自定义域名、GitHub 访问慢、广告屏蔽、网络故障排查...

0 人点赞