域名访问是如何找到正确的DNS并访问主机IP的?
2 个回答
## 首先域名是分层的:
互联网中的域名是有结构和规划的:
* 根域(`.`表示根域,根域名的服务器只用13台)
* 顶级域(com, edu, gov, org, cn, uk等等,一般为组织域和国家地区域,由域名分配组织ISO决定)
* 二级域(Microsoft, zhihu, douban,google等等,是自己申请的(需要购买))
* 三级域(www, NEWS等,三级域名是申请完二级域名后自己规定的)
`三级域名.二级域名.顶级域名`组成完整域名空间,此域名全球唯一。
## 下面是查询过程,以" http://www.zhihu.com"为例:
1. 当你在浏览器输入域名" http://www.zhihu.com"之后,浏览器会向本地DNS发送域名查询请求,本地DNS如果有对应的缓存则会找到对应IP并将IP返回,如果没有则会向根DNS服务器发送查询。
2. 根DNS服务器知道所有的顶级域(其中包括`com`)的DNS服务器的IP,会把域名对应的顶级域的DNS服务器IP返回,本地DNS服务器继续向顶级域的DNS服务器(本例中是`com`)发送查询。
3. 顶级域DNS服务器知道所有的二级域(其中包括`zhihu`)的DNS服务器的IP,会返回二级域DNS服务器IP,本地DNS服务器继续向二级域DNS服务器发送查询。
4. 二级域DNS服务器知道所有的三级域(其中包括`www`)的主机对应的IP,它会返回正确的Web服务器IP给本地DNS服务器。
5. 本地DNS服务器告知你Web服务器IP,之后你的电脑会通过IP与路由器找到Web服务器。
购买网络主机时,网络主机的服务公司会告诉你他们的DNS服务器地址,而你注册域名后,需要告诉你的注册商你的DNS服务器是什么(即互联网上DNS服务器的IP或主机名)。
之后你注册的域名就可以使用了,你的本地DNS服务器可能不知到这个域名,但请求会传到根DNS服务器,根DNS服务器知道谁知道所有.com映射的主机名和IP,这是注册商帮你做的,这样信息就会在互联网上散播并缓存。
讲下自己的理解
1.0.1 先解释下是如何找到正确的DNS的,比如我本机想访问 http://www.wangsu.com,流程是先找本机的DNS映射,没有找到再找根域DNS服务器,顶级域,二级域,三级域找出 http://www.wangsu.com的IP。
图片引用自: https://zhuanlan.zhihu.com/p/38499577
1.0.2 再拆细点讲下什么DNS?是怎么找本机DNS上映射的?
DNS即Domain领域 name名称 system系统,即为域名 系统。其实本质上就是服务器IP和域名的一个映射,可以简单理解为如下的对应关系。
当我们访问 http://www.baidu.com的时候,其实是要输入百度IP才能访问的,可谁记得住这么一串东西,所以就得有个DNS服务器帮我们记着,当我们输入 http://www.baidu.com的时候,每次电脑都去它那里拿,找到原来是182.61.200.7这个。
https://boxer.baidu.com/scheme?source=1023315k&channel=1023315l (二维码自动识别)
本地DNS映射其实就是上面的HOST文件,当我们请求 http://www.baidu.com的时候,它就先去找本地的HOST看有没有百度的映射,我先ping了百度,把182.61.200.7写进了HOST,这个时候电脑就不会请求其他DNS服务器了,直接就拿到IP请求服务器了,这个过程就是做了DNS的工作。
所以也可以将映射改成127.0.01.1本机回环地址,怎么都是请求不到的。
1.0.3 而另一个同学回答最后一段不是很理解, 为什么网络主机的服务公司会告诉你他们的DNS服务器地址的,说下把我VPS的IP解析到自己的域名是怎么样的。也只是拿到网络主机提供商提供的VPS IP, 把域名和IP地址的对应关系写到DNS服务器上,域名解析这步是域名的提供商帮我做的,Save之后就开始解析,我把三个三级域名都写到了一个IP。
1.0.4 即当我访问三个中任意一个域名的时候,都能从域名DNS服务器中找到该域名的IP,从而打开页面。