DNS服务器解析域名查询IP地址原理 域名服务器ip地址查询

背景我们都知道应用程序向最近的DNS服务器根据域名查询IP地址,DNS服务器就会返回该域名的IP地址;
但是他的一个实现流程是怎样的呢?
而机器又是怎么知道DNS服务器的ip地址的呢?
服务器如何请求DNS服务器解析域名其实每台电脑可以自己手动设置一个DNS服务器的地址,当然也可以让电脑自动获取,比如电脑自己预先设置好的DNS服务器ip地址,知道了ip地址就可以根据之前讲的访问百度服务器的方式访问DNS服务器;
而服务器是如何发送请求给DNS服务器的?我们的计算机上有相应的DNS客户端,相当于DNS客户端的部分,我们称之为DNS解析器 。
【DNS服务器解析域名查询IP地址原理 域名服务器ip地址查询】DNS解析器其实是利用操作系统的层面提供的Socket库,来进行网络相关的一些常见的操作,比如说发送请求到DNS服务器去查询ip地址;
Socket库是在加州大学伯克利分校开发的 UNIX 系操作系统 BSD 中开发的 C 语言库,互联网中所使用的大多数功能都是基于 Socket 库来开发的 。因此,BSD 之外的其他操作系统以及 C 语言之外的其他编程语言也参照 Socket库开发了相应的网络库 。可以说,Socket 库是网络开发中的一种标准库 。
当解析器被调用时,程序的控制流程会转移到解析器内部 。如下图:

DNS服务器解析域名查询IP地址原理 域名服务器ip地址查询


当控制流程转入解析器,解析器生成需要发送给DNS服务器的查询消息,然后委托给操作系统内部的协议栈来执行,(解析器本身不具备网络收发数据的功能) 。协议栈执行发送消息的操作,通过网卡将消息发送给DNS服务器 。如果DNS服务器找到该服务器,则会将IP地址写入响应消息返回给客户端,然后再经过协议栈传递给解析器,最后经解析器取出消息取出IP地址,传给应用程序 。至此,完成了向DNS服务器查询IP地址的任务 。
协议栈操作系统内部的网络控制软件,也叫“协议驱动”“TCP/IP驱动”等 。域名服务器世界上有这么多机器,所以怎么可能都在一台DNS服务器上呢?所以世界上有数万台DNS服务器,很多很多,提供DNS的查询服务,在查找ip地址的时候,几万台DNS服务器如何大接力呢?
首先需要对域名服务器划分层级,每级存储的信息和职责都不一样;
根域名服务器:根域名服务器是最高层的域名服务器,也是最重要的域名服务器 。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址 。一般情况下,根域名服务器不直接把待查询的域名直接转换成IP地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查找,全世界有13台根域DNS服务器;
顶级域名服务器:管理在该顶级域名服务器注册的所有的二级域名 。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应该找的域名服务器的IP地址) 。
权限域名服务器:负责一个区中的域名服务器,保存该区中所有主机的域名到IP地址的映射 。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应该找哪一个权限域名服务器 。
DNS服务器解析域名查询IP地址原理 域名服务器ip地址查询


域名解析步骤1、每台DNS服务器都有缓存的功能,先去缓存中查询是否可以根据域名解析出来ip;
2、任何一台DNS服务器上都有根域DNS服务器的地址,访问根域DNS服务器开始一层一层去找,如:百度域名(www.baidu.com);

推荐阅读