从浏览器输入域名开始分析DNS解析过程( 四 )


举个例子,假设我们有一个网站 www.example.com,它的 IP 地址是 192.168.0.1,同时我们还希望用户能够通过 example.com 访问该网站 。我们可以在 DNS 中添加一个 CNAME 记录,将 example.com 指向 www.example.com 。这样,当用户输入 example.com 时,DNS 服务器会返回 www.example.com 的 IP 地址 192.168.0.1,从而使用户能够访问我们的网站 。

从浏览器输入域名开始分析DNS解析过程


在DNS解析过程中,如果输入的域名没有CNAME记录,DNS权威服务器会查找该域名对应的IP地址并返回 。但是如果该域名有CNAME记录,DNS权威服务器会先将域名重定向到CNAME指向的域名,然后继续解析该域名的IP地址 。这个过程也被称为“CNAME链” 。
因此,添加了www的CNAME记录会将没有www前缀的域名重定向到添加了www前缀的域名,这样访问者就可以通过www前缀来访问网站了 。
6. 为什么输入baijiahao.baidu.com可以访问,加上www.之后变成www.baijiahao.baidu.com就无法访问?一般来说,两个域名的DNS解析的结果可能不同,指向的是不同的服务器 。当访问"baijiahao.baidu.com"时,域名对应的IP可以被解析出来 。但是在URL中加上"www."之后,请求的域名变为"www.baijiahao.baidu.com",这个域名的DNS解析结果可能不同于"baijiahao.baidu.com",如果该域名未被配置,则无法访问该站点 。
玩过云服务器配置过域名解析的就会知道,从请求的结果来看,就是www.baijiahao.baidu.com没配置对应IP 。
这个配置需要在域名所有权者的DNS解析控制面板中进行 。具体的配置方式可能会因不同的DNS服务提供商而有所不同,但通常可以通过添加DNS记录来配置子域名 。
在这个例子中,百度作为域名所有者,他们可能会在他们的DNS解析控制面板中添加一个名为"www"的CNAME记录,将其指向"baijiahao.baidu.com",类似于重定向,这样当用户在浏览器中输入"www.baijiahao.baidu.com"时,DNS服务器就会返回指向"baijiahao.baidu.com"的IP地址,从而使用户能够访问该网站 。或者添加一个名为"www.baijiahao.baidu.com"的"A"记录,然后IP配置的和"baijiahao.baidu.com"的IP地址一样,这样不管访问"www.baijiahao.baidu.com"还是"baijiahao.baidu.com"都解析为同一个IP 。
各位可以在命令行ping www.baidu.com和ping baidu.com,会发现IP不一样,也许就是配置了两个不同的A记录 。
从浏览器输入域名开始分析DNS解析过程


7. 在浏览器输入abc.coc这种不符合规范的域名后,执行过程是怎样的?假设输入的域名是abc.coc,这个域名显然不符合域名规范,应该是 abc.com 或 abc.cn 等等 。
首先,本地和递归DNS服务器会检查DNS缓存是否存在该域名的解析记录,由于这是一个不存在的域名,本地和递归DNS服务器缓存中肯定没有相关记录,因此会向根域名服务器发送查询请求 。
根域名服务器无法解析该域名,因为 .coc 不是一个合法的顶级域名,因此根域名服务器会返回一个“域名不存在”的错误信息给递归DNS服务器 。
递归DNS服务器收到根域名服务器的响应后,会将“域名不存在”的错误信息返回给客户端,客户端显示无法解析该域名 。
需要注意的是,由于 abc.coc 不符合域名规范,大部分浏览器或操作系统会在输入时就进行格式校验,当输入的字符串无法被识别为域名,就会变成搜索操作 。
8. DNS解析是TCP还是UDP?DNS解析使用的是UDP协议,因为DNS查询通常只需要发送小量的数据,而UDP协议是无连接、不可靠的,但是比TCP更快速和轻量级 。当然,对于一些特殊情况下的DNS解析,也可能使用TCP协议,比如DNS数据包超过了UDP报文最大长度时,会使用TCP进行分片传输 。如果 DNS 查询包的大小超过 512 字节,或者查询返回的响应包的大小超过 512 字节,则必须使用 TCP 协议 。

推荐阅读