DNS (Domain Name System)原理入门。
什么是 DNS
由于 IP 不容易记忆,所以我们偏好让用户用域名(Domain Name)来访问服务器,但是数据包要传递必须用到 IP 。因此我们用 域名系统 来做 Domain Name 和 IP 的转换。
除了 好记忆 的原因,使用域名也比较有弹性,服务器的 IP 位置可能会变动(例如换不同服务商的机房就一定会变动IP地址),但是通过 DNS 就可以 保持域名不变。
DNS 机制就是一个对照表,对照某域名查询它的 IP 地址是什么(你可以把它想象成一本巨大的电话本)。
在我们本机电脑上就有一个对照表的档案文件,就是 /etc/hosts
,你可以编辑它,写下域名和 IP 地址的对应。
但是,本机不可能预先存好全世界域名的对照表,因此我们会用 DNS 协议来做即时线上查询。
域名(Domain Name)
我们先认识一下域名的组成:
一个域名组成是 sub-domain.second-level-domain(your-domain).top-level-domain
。
例如 test.51world.win
其中 .win
就是 top-level
、51world
是 second-level
,而 test
是 sub-domain
。这个 sub-domain
可以是空的,因此 51world.win
是合法的域名(即本博客主页)。
全世界的 top-level-domain
是由 互联网号码分配局 IANA 所管理的,所有的 top-level-domain
的列表请参考 Root Zone Database,每个 top-level-domain
会分配给不同国家的非营利组织进行管理,例如管理 .cn
的单位是 中国互联网络信息中心(CNNIC)。
一般个人或公司会向这些非营利组织进行购买和登记,例如 xxx.com
是登记在负责管理 .com
域名的 VeriSign Global Registry Services 组织。不过实际上我们不会直接跟 VeriSign Global Registry Services 购买,而是透过 域名注册商 进行购买。在这些域名注册商的网站上(如 Namecheap、Godaddy 或 阿里云-万网 等),你可以一次选购各种不同的域名。
买到自己的 second-level-domain
后,你就可以自行设定管理你的 sub-domain
,例如 test1.51world.win
和 test2.51world.win
指向不同的 IP 地址,是不同的网站服务器。
DNS 如何查询
一般用户是如何进行 DNS 查询的呢?在操作系统中可以设置偏好的 DNS 服务器,通常会使用 ISP 默认提供的 DNS 服务器,也可以自己指定,例如:
- 阿里 DNS
http://www.alidns.com
- 国内 114dns 的
114.114.114.114
- Google 的
8.8.8.8
在 Mac 中的设定:
查询的流程:
先从客户端偏好的 DNS 开始查询;如果 DNS 找不到纪录,则该 DNS 会从根域名服务器(root nameserver)开始查询,直到找到负责该域名的 DNS 服务器为止 … 在第一次查询后,那台客户端偏好的 DNS 就会缓存起来。举例:
查询test.51world.win
时,如果客户端偏好的 DNS 没有纪录;
就会去问根域名服务器(root nameserver).win
域名是谁管理的,它会回答出负责.win
的nameserver
;
然后该 DNS 再去问.win
的nameserver
,51world.win
是哪台 DNS 负责的;
再进一步,然后再去问那一台test.51world.win
对应的 IP 是什么。
whois 指令
可以查询是谁注册了这个域名。不过,注册者可以选择关闭联络信息,所以不一定可以查到。
nslookup 指令
可以简单查询 DNS:
Non-authoritative answer
的意思是这个答案不是从负责51world.win
域名的主机回传,而是直接从客户端偏好的 DNS 服务器 8.8.8.8 的缓存纪录回答的;
相反,Authoritative
的意思就是这个答案是从负责51world.win
域名的 DNS 主机回传的。
dig 指令
也可查询 DNS,提供更详细的数据:
假设从根域名服务器开始查询:
DNS 记录分不同类型,如:
-A
:一笔 IPv4 纪录,某个 subdomain 指向某一个 IPv4 地址
-AAAA
:一笔 IPv6 纪录
-MX
:邮件服务器(如 xxx.com 的邮件服务器和网站不是同一台服务器,很多公司会把邮件服务器改用 Google Apps,这在 DNS 设定中就可以指定 MX 记录:dig -t mx xxx.com
)
-CNAME
:别名,可以设定某个 subdomain 指向另一个地址(不一定是同一个主域名)
DNS 相关情境
了解 DNS 机制的话,就可以理解以下现象:
故障排除
有时网络故障,浏览器无法连接,但可以 ping
ip address
。这时候可以优先检查是否是 DNS 坏了,可以换一台电脑再试试看。
黄牛哄抬域名物价
其实购买一个域名一年并不贵。但是一些热门的网址,很多网络黄牛会预先注册保留起来。如果你要买则需要花更贵的价钱才能买到。
你也可以根据商标走法律程序,不过很多域名是跨国的,所以处理起来并不容易。
钓鱼网站
钓鱼网站,就是利用网址名字长得很像,然后 UI 画面也弄成几乎一样骗你输入帐号密码。
例如:你的 Gmail 收到重新设定密码的邮件,然后链接指向 g00gle.com/forget_password
,画面长的跟 google
一模一样。没有注意网址的话,很可能就不小心输入自己的帐号密码。
域名忘记续约
购买域名需要定期续约,一年、三年、五年等。大公司可能因为交接失败,造成域名失效的现象层出不穷,例如:
DNS 污染
身为网站主,是无法控制用户偏好使用哪个 DNS 服务器的。在一个理想信任的网络环境中,如果用户的 DNS 不知道答案,它会一层一层去询问。但是在一个受管制的网络环境,DNS 可以被控制回答不正确的 IP ,进而限制一般用户无法顺利浏览,甚至回答钓鱼网站的 IP。这就是 DNS 污染。(据说苹果 iCloud 因为此原因导致各种被锁,让人火大)
Geo-based(基于地理位置) 或 Round-Robin(轮询调度)
查询 DNS 时,不一定总回答同一个 IP:
有些网站会在不同国家有服务器,但希望网址是一样的。这时可以根据用户不同的地理位置,回答不同的 IP。(Geo-based)
超高流量的网站,则可以回答不同台服务器的 IP ,来分散流量到不同服务器。(Round-Robin)
拓展阅读
网络概论(一) :网络 概念初识。
网络概论(二) :DNS 原理入门。
网络概论(三) :HTTP (Hypertext Transfer Protocol-超文本传输协议)入门。