人人都能学编程
English 开始学习
核心 · 计算机网络第 2 课 / 共 6 课免费阅读

DNS 域名解析 · 计算机网络

shop.example.com 这样的名字是怎么变成地址的?

课程目录

为什么需要它

人用名字,网络用数字。DNS 是互联网的电话簿,负责把名字翻译成数字,你发出的几乎每个请求都要经过它。工程师之间有句玩笑「问题总出在 DNS」,因为太多故障都是从这里开始的。

直觉理解

访问 shop.example.com 时,你的电脑会问 DNS 解析器:「这个名字的 A 记录是什么?」答案是一个 IPv4 地址,附带一个 TTL,表示这个答案可以缓存多久。

常见的记录类型:

类型把名字映射到……
A一个 IPv4 地址
AAAA一个 IPv6 地址
CNAME另一个名字(别名)
MX这个域名的邮件服务器
TXT任意文字,常用来证明你拥有某个域名

在终端里,dig 域名 直接向 DNS 提问,curl 网址 发出一个 HTTP 请求。

定义

DNS 记录

One entry in DNS: a name, a type (A, CNAME, MX…), a value and a TTL.
DNS 里的一条记录:名字、类型(A、CNAME、MX……)、值和 TTL。

TTL 生存时间

Time to live: how many seconds a resolver may cache an answer. After changing a record, old answers can linger until the TTL runs out.
生存时间:解析器可以缓存这个答案多少秒。改了记录之后,旧答案可能会一直存在,直到 TTL 用完。

示例

先问 DNS,再问服务器

在互动课里运行

dig 查到地址;curl 取回网页。

dig +short shop.example.com
dig shop.example.com
curl https://shop.example.com
逐步执行
  1. L1+short 只打印答案。203.0.113.10
  2. L2完整的答案:名字、TTL(300 秒)、类型 A、地址。
  3. L3知道地址后,HTTP 请求返回了网页。<h1>Shop</h1>

一个不存在的名字

在互动课里运行

名字打错了:DNS 里没有记录,curl 连开始都开始不了。

dig +short shopp.example.com
curl https://shopp.example.com

这个例子故意以报错结束:重点是学会读报错信息。

逐步执行
  1. L1什么答案都没有。
  2. L2Could not resolve host:问题出在 DNS,不在服务器。

常见错误

以为修改会立刻生效

改了记录之后,解析器会一直用旧答案,直到 TTL 过期。计划迁移前一天先把 TTL 调低。

先怪服务器

「Could not resolve host」说明 DNS 失败了;根本还没联系到服务器。重启任何东西之前,先用 dig 检查名字。

小测验

1. 哪种记录类型把 www.example.com 指向另一个名字 example.com?

  1. ACNAME
  2. BMX
  3. CA
查看答案

答案:A

CNAME 是别名:一个名字指向另一个名字。

2. 这段代码会输出什么?

dig +short api.example.com
dig +short mail.example.com
  1. A
    203.0.113.20
    203.0.113.30
  2. B
    203.0.113.30
    203.0.113.20
  3. C
    203.0.113.10
    203.0.113.20
查看答案

答案:A

每个名字都有自己的 A 记录。

动手练习

3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。

  1. 预测输出读出答案

    准确写出这些命令打印的内容。

  2. 改需求修好拼写错误

    这个健康检查在到达服务器之前就失败了。找出原因,修好命令,让它打印健康检查的 JSON。

  3. 从零写先查再取

    打印 shop.example.com 的地址(只要地址),然后用 curl -I 只获取 https://shop.example.com 的响应头。

在互动课里练这一课

打开互动课,这些例子都能直接改、直接运行,练习题提交马上判题。免费开始,不用注册。

互动课按顺序解锁:前面的课还没学,会先带你到课程地图。

本课术语

术语中文英文定义
DNS域名系统The system that turns names like example.com into IP addresses.
Resolver解析器The DNS server that looks names up for your computer.
TTL生存时间How long an answer may be cached.