我就从 域名 → DNS → CDN → ESA 这条链路开始看看一个网站的上线,特别是在国内的网络环境下,如何保证用户能够快速、稳定地访问。不过本篇只会有域名和DNS,后续会补上CDN(这部分太多了)。
本文的部分内容和供图来自阿里云的 帮助文档 ↗
域名(Domain Name)#
概念#
域名就是互联网的“门牌号”,让人们可以用 文字 来访问网站,而不用记一长串 IP 地址。
举例:seeridia.top 其实只是一个名字,它背后最终会对应到服务器的 IP(例如 172.31.49.252 )。
域名属于 ICANN 统一管理,注册商(阿里云、腾讯云、Namecheap 等)相当于“代理商”。
关键知识点#
-
域名层级
- 顶级域名(TLD):
.com,.cn,.top等 - 二级域名:
seeridia.top - 子域名:
api.seeridia.top,cdn.seeridia.top
注意:每一级域名都可以单独做解析配置。
- 顶级域名(TLD):
-
域名注册与所有权
注册域名后,获得一定年限的使用权。必须定期续费,否则可能被别人抢注。
-
域名系统依赖 DNS
域名本身只是名字,必须依赖 DNS(域名系统)才能解析成 IP 地址,否则浏览器没法访问。
DNS(Domain Name System)#
作用:把人类可读的域名(seeridia.top)转换成计算机可用的 IP 地址(172.31.49.252)
类比:就像电话簿,把“张三的名字”查成“张三的电话号码”
位置:DNS 位于整个访问链路的最开始,用户输入网址时,浏览器必须先通过 DNS 得到 IP 才能发起请求
解析流程#
- 用户在Web浏览器中输入
example.com, 向本地域名服务器发起查询请求。若本地域名服务器存在缓存的解析数据,则直接将域名对应的IP地址返回给Web浏览器,跳至步骤9。若本地域名服务器没有查到缓存的解析数据,则继续步骤2。 - 本地域名服务器向根域名服务器进行查询。
- 根域名服务器将
.com顶级域名服务器的地址,返回给本地域名服务器。 - 本地域名服务器向
.com顶级域名服务器发起example.com的查询请求。 .com顶级域名服务器将为example.com提供权威解析的权威域名服务器地址,返回给本地域名服务器。- 本地域名服务器向权威域名服务器发起查询请求。
- 权威域名服务器将域名
example.com对应的 IP 地址,返回给本地域名服务器。 - 本地域名服务器最后把查询的 IP 地址响应给 Web 浏览器。
- Web 浏览器通过 IP 地址访问网站服务器。
- 网站服务器返回网页信息。
相关概念#
-
递归与迭代查询(非递归)查询
-
递归查询:DNS 客户端(如你的电脑或手机)向 DNS 服务器发出请求,并要求该服务器必须返回最终结果。如果该服务器没有缓存答案,它就必须自己去“代表客户端”向其他服务器查询,直到获得最终的 IP 地址,然后返回给客户端。
例如:你访问
www.example.com,你的电脑向本地 DNS 服务器(如 8.8.8.8)发送一个递归查询请求,如果 8.8.8.8 没有缓存,它会自己去一步步查(通过迭代方式),最终把结果返回给你。本地域名服务器(递归 DNS 服务器),主要来源:
- ISP(网络服务提供商):如电信、联通、移动等提供的 DNS 服务器。
- 公共 DNS 服务:如 Google DNS(8.8.8.8)、Cloudflare(1.1.1.1)、阿里 DNS(223.5.5.5)、腾讯 DNS(119.29.29.29)
- 企业/校园内部 DNS:公司或学校自建的 DNS 服务器
-
迭代查询: DNS 服务器不会替客户端继续查询,而是返回一个“可能知道答案”的其他 DNS 服务器地址,让客户端(或上游服务器)自己去问下一个服务器。
-
-
TTL(Time To Live)
- 本地域名服务器(递归 DNS 服务器)在拿到 IP 后,会把这个结果缓存起来,TTL 就代表域名解析结果可缓存的最长时间,缓存时间到期后本地域名服务器则会删除该解析记录的数据,删除之后,如有用户请求域名,则会重新进行递归查询/迭代查询的过程。
- 比如 TTL=600 → 递归 DNS 缓存 10 分钟,10 分钟后才会重新问权威 DNS。
- TTL 太长:改配置要等很久才生效。
- TTL 太短:查询太频繁,延迟增加。
-
DNS 缓存
- 本地 DNS 缓存:浏览器和操作系统会缓存 DNS 解析结果,减少重复查询。
- 递归 DNS 缓存:递归 DNS 服务器会缓存查询结果,减少对权威 DNS 的请求。
记录类型#
| 类型 | 作用 | 示例 | 使用场景 |
|---|---|---|---|
| A | 把域名解析到 IPv4 地址 | seeridia.top → 203.0.113.10 | 网站直连服务器,最常见的解析方式 |
| AAAA | 把域名解析到 IPv6 地址 | seeridia.top → 2400:3200::1 | 网站支持 IPv6 访问 |
| CNAME | 把域名解析到另一个域名(别名) | www.seeridia.top → seeridia.top cdn.seeridia.top → cdn.edgeone.com | CDN/ESA 接入、统一指向一个目标域名 |
| MX | 指定邮件服务器 | seeridia.top → mail.seeridia.top (优先级 10) | Gmail/Outlook 企业邮箱,自建邮箱 |
| TXT | 存放文本信息(验证/策略) | seeridia.top TXT "v=spf1 include:_spf.google.com ~all" | 域名验证、邮件安全(SPF/DKIM/DMARC) |
| NS | 指定权威 DNS 服务器 | seeridia.top → ns1.dnsprovider.com | 决定谁负责解析该域名(域名商 / DNS 服务商),一般用于将子域名交给其他 DNS 服务商解析 |
另外,还有一些其他类型的记录,如 SRV(服务定位)、PTR(反向解析)、CAA(签发证书)等,但不常用。
CNAME 与 重定向 并不同
CNAME 其实是说:这个域名其实是另一个域名的别名
对比项 CNAME 记录 HTTP 重定向 (301/302) 发生位置 DNS 层(浏览器还没发请求) HTTP 层(浏览器已经访问服务器) 返回内容 返回另一个域名,继续解析 IP 返回新的 URL,让浏览器重新请求 用户是否可见 对用户不可见,用户输入的域名不变 用户地址栏会跳转到新的 URL 使用目的 域名别名、接入 CDN、统一解析 网站迁移、SEO、内容跳转
