目录
dns解析过程
迭代与递归
dns解析过程
当在浏览器的搜索栏输入URL(统一资源定位符)时,浏览器的解析过程
完整解析
当在浏览器输入某一IP地址时
(1)浏览器查看查看缓存表里有没有对应的域名解析记录,查看是否能够命中
(2)同时查看本地文件主机文件里有没有对应记录 windows中(c:\windows\system32\drivers\etc\hosts)Linux中(/etc/hosts)
(3)浏览器为了进行域名解析,会调用解析器,若用c语言代码来表示会有这样的代码段
gethostbyname("www.baidu.com") #后跟需要解析对应IP的域名
解析器(代码,程序)可以帮助浏览器调用系统的网络功能,然后解析器就相当于DNS客户端,向DNS服务器查询IP地址,则解析器就会向本地DNS服务器发送请求,如何向我们的DNS服务器取得联系呢?
可以在电脑的网络设置里查询到自己的DNS服务地址
也就是说电脑里存在这个本地DNS服务器IP地址,可以直接联系,在实际生活中 最近的DNS服务器往往是家里的路由器,而本地服务器(路由器)一般有ISP(中国电信,中国联通等等)管理,本地dns服务器收到请求后会先查看自己的缓存,如果有,就会返回对应的IP地址,并且会标注非权威(non-authoritative) 因为本地域名服务器不像.com等控管域名,若是.com等管控域名返回对应的ip则会标记为(authoritative)
接下来步骤由本地dns服务器独立完成,在这里用cmd命令行模仿一下后面的迭代查询过程
假设www.baidu.com 在本地中没有被缓存,我们模仿下后面如何查询到对应的IP地址
nslookup
set type=ns ###设置查询类型,为名称服务器(name server)
. ###查询根服务器的域名
查询出根服务器的域名共13个,接下来需要知道对应的IP地址才可以进行通话,于是
set type=a ###设置查询对应的IP地址格式为IPV4
b.root-servers.net. ###得到b域名对应的IP地址
于是我们就和这个b根域名服务器建立会话,进行联系
server 199.9.14.201 ###与b服务器建立会话连接
set type=ns ###设置在根域名服务器下的查询模式
com. ###向根域名服务器自选com域名服务器的IP地址
此时gtld表示(通用顶级域名) 从这么多个顶级域名服务器选取一个b继续询问二级域名信息
这里可以看到baidu.com.的域名服务器有五个,为ns1,2,3,4,7 接下来与ns2这个域名服务器建立会话
这里有个cannoical name 也为cname 常常表示为域名的跳转 也就是访问www.baidu.com会跳转到www.a.shifen.com. 于是想要得到www.baidu.com对应的IP地址则
就这样得到了我们最后的结果 也就是www.baidu.com对应的IP地址,然后本地dns服务器得到这个IP地址后会返回给我们的解析器,当然也会把对应的解析记录给缓存起来,解析器接着把地址给浏览器,最后浏览器就可以通过IP地址去进行网页的连接了 这就是整个解析过程
迭代与递归
递归查询是浏览器与本地dns服务器之间采用递归,而迭代查询则是由本地dns服务器与三层服务器用的是迭代查询
递归查询与迭代查询类似于a学生问题
递归查询:a学生问b学生,b学生不知道问老师,老师回答b学生,b学生回答老师
在这个过程中a学生只问了一次
迭代查询: a学生问b学生,b学生不知道,a学生又问老师,老师解答a学生
这个过程中全程是a学生在问
而a学生就类似于本地域名服务器