由ping百度引发的思考
问题概述
在检查linux网络是否与外网连通时,发现ping www.baidu.com
会转为ping www.a.shifen.com
,而ping baidu.com
是指向正常的域名以及IP地址。裸域名(无三级域名)baidu.com
与www.baidu.com
的子域名之间的解析是否有不同?
DNS的分级查询过程
域名解析时,先查询本地HOST文件,HOST文件无再向本地域名服务器发出DNS请求。本地DNS查询本地缓存,若无则向根域名服务器发出递归查询请求(根域名->顶级域名->授权域名)或是本地进行迭代查询。使用dig +trace baidu.com
命令可以跟踪DNS迭代查询过程。
从DNS返回的结果入手
使用命令dig www.baidu.com
可以发现,DNS返回了一个CNAME(Canonical Name,规范名称记录,返回另一个域名,即当前查询的域名是另一个域名的跳转),将www.baidu.com
映射到www.a.shifen.com
。另外两条A记录返回域名指向的IP地址。通过这两个IP地址均可访问百度首页(不支持SSL证书,显示不安全),但对于curl -v www.a.shifen.com
,则会返回302(资源临时转移),并会跳转到提示错误的页面。
对于dig baidu.com
,DNS返回了2条IP地址记录。使用curl -v
可知,baidu.com
解析出的IP对应的是一个跳转页面,使用浏览器访问http://220.181.38.148/
网页会跳转到http://www.baidu.com/
。然后网站后端依据url地图的设定,http请求将转为https。可以看到最终访问的网站IP为14.215.177.39
,也就是www.a.shifen.com
对应的IP地址。
小结
依据上述的实验结果可知,baidu.com
是指向一个存有跳转页面的服务器的域名,跳转到www.baidu.com
。而后访问www.baidu.com
时,因为CDN借助CNAME将访问的地址代理到对应的CDN服务器,故DNS请求解析将得到www.a.shifen.com
对应的多个IP地址,最终由14.215.177.39
这台缓存服务器给我们提供了服务。www.a.shifen.com
是一个CNAME名。