DNS服务器查询IP地址

简单来说就是应用程序向最近的DNS服务器查询即可。该DNS服务器就会返回该服务器的IP地址。

向DNS服务器发送查询,然后接受服务器返回的响应消息,换句话说,对于DNS服务器,我们的计算机上有相应的DNS客户端,相当于DNS客户端的部分称之为解析器。

解析器实际上是一段程序,包含在操作系统中的socket库中,Socket库包含的程序组件可以让其他的应用程序调用操作系统的网络功能,而解析器就是这个库中的一种程序组件。

Socket 库是在加州大学伯克利分校开发的 UNIX 系操作系统 BSD 中开发的 C 语言库,互联网中所使用的大多数功能都是基于 Socket 库来开发的。因此,BSD 之外的其他操作系统以及 C 语言之外的其他编程语言也参照 Socket 库开发了相应的网络库。可以说,Socket 库是网络开发中的一种标准库。

解析器的用法非常简单,Socket库中的程序都是标准组件,只需要在应用程序中调用即可。如下图:这里写图片描述
那么应用程序调用解析器时候,解析器内部是如何工作的呢,当解析器被调用,程序的控制流程会转移到解析器内部。如下图:

这里写图片描述

当控制流程转入解析器,解析器生成需要发送给DNS服务器的查询消息,然后委托给操作系统内部的协议栈来执行,(解析器本身不具备网络收发数据的功能)。协议栈执行发送消息的操作,通过网卡将消息发送给DNS服务器。如果DNS服务器找到该服务器,则会将IP地址写入响应消息返回给客户端,然后再经过协议栈传递给解析器,最后经解析器取出消息取出IP地址,传给应用程序。至此,完成了向DNS服务器查询IP地址的任务。

同样,可能会有疑问,向DNS服务器发送消息时候,自然也需要知道DNS服务器的IP地址。只不过这个IP地址是作为TCP/IP协议的一个设置项目实现配置好的,不需要再去查询了。

上面介绍了解析器的工作流程,下面了解一下DNS服务器的工作

DNS服务器的基本工作就是接受来自客户端的查询消息,返回相应内容,查询消息包含下面三种信息:

1、 域名

2、Class 最早设计DNS方案时,DNS在互联网意外的其他网络中应用也考虑到了,而Class就是用来识别网络的信息,目前仅剩下互联网,因此Class永远值为IN

3、记录类型,表示域名对应何种类型的记录,及声明需要返回的响应消息种类。例如,当类型为A,表示域名对应IP地址,当类型为MX,域名对应邮件服务器

DNS服务器会根据查询消息,匹配唯一的记录,返回响应消息

由于全世界存在无数服务器,将这些服务器的信息全部保存在一台DNS服务器是不可能的,因此全球存在数万个DNS服务器,共同保存所有注册的服务器信息。
因此一定会出现在DNS服务器中查不到信息的情况,故需要所有DNS服务器相互配合合作,从而查询信息。

要实现这一点,先从服务器信息在DNS服务器上注册的机制说起,众所周知,DNS中的域名都是用点号分隔,这里的点号就代表了不同的层次,在域名中,越靠近末尾右边的位置,
表示其层级越高,其中,相当于一个层级的部分称之为域,如com域等。

这种具有层次结构的域名信息注册到DNS服务器中,每个域是作为一个整体处理的,不能将一个域拆开来放在多个DNS服务器中,但是一台DNS服务器中可以存放多个域的信息。

通过这种层级关系的域名信息,如何从数万个DNS服务器中查询IP呢,总不能一台一台的挨个查找,我们采用这样的方法,首先负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器
中,然后上级DNS服务器IP注册到再上一级的DNS服务器中,一次类推,这样,就可以通过上级DNS服务器来查找下级DNS服务的IP地址,想下级DNS服务器发送查询请求。

根域

根域是com, jp等域再高一级的域,根域的DNS服务器中保管者com、 jp、等DNS服务器的信息,由于上级DNS服务器保管者所有下级DNS服务器的信息,所以可以从根域开始一路往下找到任意一个域的DNS服务器。
此外,还需要将根域的DNS服务器信息保存在互联网中的所有DNS服务器中,这样一来任意DNS服务器都可以访问根域服务器了,因此,客户端只需要找到任意一台DNS服务器,就能够找到目标DNS服务器。

分配给根域DNS服务器的IP仅有13个,而且地址几乎不变,因此将这些地址保存在所有DNS服务器中也不难,实际上,根域DNS服务器的相关信息已经包含在DNS服务器程序的配置文件中,只要安装了DNS服务器程序,这些
信息也就自动配置好了

基本查询IP流程如下图:

这里写图片描述

上图只是基本原理,真实的互联网中,一台DNS服务器可以管理多个域的信息,并不是每个域对应一台服务器,同时,上级域与下级域可能共享一台DNS服务器、

DNS服务器具备缓存功能,可以保存之前查询过的域名。并且,当查询域名不存在时,这个不存在的状态也会被缓存,下次查询将会快速响应。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值