DNS协议也可以称为DNS服务,全称是Domain Name System,即域名系统,和HTTP协议一样,也是一个位于应用层的协议(服务),它是基于运输层的UDP协议的,关于网络协议的分层介绍,见这里(还没有写好,先放这里一个空链接)。
从DNS的名字我们就可以知道,它提供域名映射到IP地址的服务,那么在我们详细说DNS协议之前,先来大致讲讲互联网的域名结构

1. 域名结构

我们都知道,在互联网中,每一台计算机想要访问互联网,都需要一个IP地址来进行网络通信,可以是形如192.168.1.1这样的点分十进制的IPv4地址,也可以是形如[0:0:0:0:0:0:0:1]这样方括号包围的十六进制的IPv6地址,但是这些地址不便于记忆,所以就产生了域名这种方便人们记住的东西(当然你要是记忆力好能记住IP地址,在浏览器地址栏输入URL的时候,也可以直接用IP地址替换掉域名,效果是一样的)。

域名也可以叫做主机名。这里我们先给出一个域名,例如www.abc.com,以这个域名为例,来看一下域名的结构。

域名采用层次化的结构,其中com是顶级域名,abc是二级域名,www是三级域名,从语法上来说,每个域名都是几个不同层级的名字用.连接起来的组合,域名不区分大小写字母,所以www.ABC.comwww.abc.com是一样的,按照规定来说,域名有长度限制,这里就不再细讲。

上面提到,com是一个顶级域名(TLD,Top Level Domain),除了com之外,顶级域名还有好多,一般来说可以分为:

  • 国家顶级域名

    cn表示中国,us表示美国,uk表示英国,当然还有一些特殊地区也有所谓的国家顶级域名,比如hk表示香港

  • 通用顶级域名

    com表示公司企业,net表示网络服务机构,org表示非营利组织,edu表示美国教育机构(中国的教育机构一般来说是xxx.edu.cn),gov表示美国政府部门(中国的政府部门一般来说是xxx.gov.cn)等。

  • 基础结构域名

    不常见,不做叙述。

所以说,在中国,企业的域名一般可以是xxx.comxxx.com.cnxxx.cn

下面这个域名树,清晰地展示了互联网的域名空间:

在图中,edu.cn下面,划分除了很多三级域名,如tsinghuapku等,一旦某个单位有了一个域名,它就可以自己决定是否要进一步划分下属的子域,域名树的树叶节点就是单台计算机的名字,不能再继续划分了,例如mailwww这两台计算机的完整域名分别为mail.tsinghua.edu.cnwww.tsinghua.edu.cn(这里起什么名字都可以,一般来说,人们愿意把用作邮件服务器的计算机叫做mail,把用作网站的服务器叫做www)。

到这里,我们已经知道了为什么要有域名以及域名的结构,域名就是为了便于人们记忆而产生的,但是域名是方便人们记忆了,计算机反而不好处理了,它更善于处理IP地址这种东西,所以这里就用到了我们要讲的DNS协议,用来把域名映射到IP地址,在了解DNS解析域名的过程之前,我们还需要了解一下域名服务器这种东西(怎么这么多东西,写个博客好麻烦啊23333)。

2. 域名服务器(DNS服务器)

上面说到了域名体系的树状结构,为了实现域名系统,我们首先想到的就是在域名树的每个节点都设置一台对应的服务器,这样就可以了,但是这样做的后果就是导致域名服务器太多,域名系统的运行效率太低,所以,通常是将好多个节点划分为一个区,用分区的方式来实现域名系统,如下图:

其中,(a)是abc这个公司只设置了一个分区的样子,(b)是abc公司设置了两个分区的样子,这两个区分别为abc.comy.abc.com,这两个区对应了两个权限域名服务器(后面还会提到)。下图可以看出域名服务器的层次结构:

 

由上图可以看出,根据域名服务器起的作用,可以把域名服务器分为四种不同的类型:

  • 根域名服务器

    根域名服务器对应的是域名树中的根节点,是最高层次的域名服务器,但是并不是只有一台,而是有好多台,总共有13个不同IP地址的根域名服务器,用a到m来表示,如a.rootservers.net,每个IP地址对应一套装置,一套装置在世界不同地点安装了服务器,总之,数量很多,当访问根域名服务器时,往往就是由路由器找到最近的根域名服务器访问。

    一般来说,每台根域名服务器都知道所有的顶级域名服务器的域名以及IP地址,但往往也只知道这些,所以访问根域名服务器一般只能得到顶级域名服务器的IP地址,而不能直接知晓你要找的具体服务器的IP。一般来讲,如果要通过互联网解析域名,本地域名服务器首先访问的就是根域名服务器,下面还会讲到。

  • 顶级域名服务器

    顶级域名服务器负责管理在顶级域名下的所有二级域名,例如cn是顶级域名服务器,管理edugov等二级域名,当接收到查询请求时,要么给出最终结果(即具体IP地址),要么给出下一步应该访问的权限域名服务器的IP地址。

  • 权限域名服务器

    权限域名服务器上面已经提到过一次了,就是每个域名分区对应一个服务器就叫做权限域名服务器。当接收到DNS查询请求时,如果可以给出具体的IP地址就给出(例如前面的abc.com可以给出v.x.abc.com的IP地址,所以直接返回),如果不可以,就把下一步要访问的权限域名服务器的IP地址返回(如abc.com不能给出t.y.abc.com的IP,就会把y.abc.com这个权限域名服务器的IP地址返回)。

  • 本地域名服务器

    可能有人已经发现了,上面的图中并没有本地域名服务器这一层级结构,这是因为本地域名服务器(有时候也叫作首选域名服务器或者默认域名服务器)不属于域名树的层次结构,但是相当重要。当一台计算机要进行DNS查询的时候,就会将查询的请求发给本地域名服务器。

    一般来说,一个互联网服务提供商(ISP)或者是一个大学(甚至是一个系)都有一个本地域名服务器,也就是说,当你再学校内使用校园网时,你的本地域名服务器并不是指你自己的电脑,因为你的系或者你的学校,都共用一个本地域名服务器。

3. 域名解析过程

在了解了上面的域名结构以及域名服务器之后,我们来看一下域名的解析过程,总的来讲,主机向本地域名服务器的域名查询一般采用递归查询,而本地域名服务器向根域名服务器的查询一般采用迭代查询。

概念其实很简单,递归查询就是如果主机向本地域名服务器查询IP,本地域名服务器不知道IP地址,这是本地域名服务器就代替主机称为DNS客户,向根域名服务器进行下一步查询。而迭代查询就是,在本地域名服务器向根域名服务器查询时,根域名服务器要么给出最终的IP地址,要么给出下一步本地域名服务器要访问的顶级域名服务器的IP地址,之后本地域名服务器再去访问相应的顶级域名服务器(而不是让根域名服务器代替本地域名服务器去进行下一步查询)。简单来说,递归查询返回具体IP地址或者报错没找到,迭代查询返回具体IP地址或者返回下一步的IP地址。如下图:

当然,我们也可以指定查询方式让查询过程全程使用递归查询,如下图:

下面以一个例子说说明在无缓存的情况下(下面会谈到缓存),通过DNS来查询域名的步骤,假设域名为m.xyz.com的主机想要查询y.abc.com这个域名对应的IP地址,那么他就会按照域名查询方式1(上图)中的方式进行查询:

  1. 主机m.xyz.com先向本地域名服务器dns.xyz.com进行递归查询。
  2. 本地域名服务器无法给出IP地址,所以本地域名服务器向(离自己最近的)根域名服务器查询,这是的查询已经变为了迭代查询。
  3. 根域名服务器根据本地域名服务器发送的报文,知道了下一步应该查询的是哪个顶级域名服务器,这时根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器dns.com的IP地址。
  4. 本地域名服务器向顶级域名服务器dns.com发送请求查询。
  5. 顶级域名服务器dns.com告诉本地域名服务器,下一步应该查询的权限域名服务器dns.abc.com的IP地址。
  6. 本地域名服务器向权限域名服务器dns.abc.com发送请求查询。
  7. 权限域名服务器dns.abc.com告诉本地域名服务器想要查询的域名y.abc.com的IP地址。
  8. 本地域名服务器在拿到IP地址后,将IP地址返回给主机m.xyz.com
    这就是域名查询的具体过程,因为DNS协议的基于UDP协议,所以上述8个步骤中,总共使用了8个UDP报文。

上面提到,这是在没有缓存的情况下的DNS查询,实际上,为了提高查询的效率以及降低根域名服务器的负荷,一般来说域名服务器中都有高速缓存,用来记录最近查询过的域名的缓存,如果在查询域名时,有想要的域名到IP的映射缓存,并且缓存没有过期,那么就直接将缓存中域名映射的IP地址返回,省去了接下来的查询。只有在没有缓存或者缓存过期了才会进行下一步的查询。实际上,不知域名服务器有缓存,每台计算机甚至浏览器都会对域名到IP的映射进行缓存,这样一来大大加快的DNS的查询速度。

上面这些就是DNS协议的大概了,如果觉得有哪里写的不对的,还请多多指教。

参考书籍:《计算机网络》谢希仁

简单谈谈DNS协议的更多相关文章

  1. 简单谈谈DNS的工作原理及实践

    DNS协议简介 dns(Domain Name System)是一个全球化的分布式数据库系统,用于存储域名和互联网IP地址的映射关系.dns协议是计算机协议栈应用层中,应用最广泛的协议之一.用户每一次 ...

  2. SMTP 简单邮件传输协议

    SMTP 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传 ...

  3. 计算机网络——DNS协议的学习与实现

    1. 主要内容 不说废话,直接进入正题.先说说本文本文的主要内容,好让你决定是否看下去: 介绍DNS是干什么的: 介绍DNS是如何工作的: 介绍DNS请求与响应的消息格式: 编程实现一个简单的DNS服 ...

  4. 网络协议 16 - DNS 协议:网络世界的地址簿

    [前五篇]系列文章传送门: 网络协议 11 - Socket 编程(下):眼见为实耳听为虚 网络协议 12 - HTTP 协议:常用而不简单 网络协议 13 - HTTPS 协议:加密路上无尽头 网络 ...

  5. 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

    第33章      SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...

  6. DNS协议工作过程;DNS的安全隐患

    DNS协议工作过程   下面以域名为m.xyz.com的主机欲通过另一个主机的域名y.abc.com的IP地址为例,简述DNS协议过程. 主机m.xyz.com先向其本地服务器dns.xyz.com进 ...

  7. http基础(1.了解web及网络基础,2.简单的http协议)

    第一章:了解web及网络基础 1.http:超文本传输协议 2.tcp/ip协议族:通常使用的网络是在tcp/ip协议族的基础上运作的,而http属于它内部的一个子集. 3.tcp/ip协议族按层次分 ...

  8. 简单认识http协议

    1.什么是TCP/IP  如果要了解一个人,可以从他归属的集体聊起来.我们的HTTP协议就属于TCP/IP协议家族中的一员,了解HTTP协议再整个网络流程中的地位,也能更加充分的理解HTTP协议. 要 ...

  9. 结合Wireshark捕获分组深入理解TCP/IP协议栈之DNS协议

    摘要:     本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析. 一.概述 1.1 DNS      ...

随机推荐

  1. Echo团队Alpha冲刺随笔 - 第二天

    项目冲刺情况 进展 项目各端都已经开始正式动工,完成了框架的搭建及小部分代码的编写 问题 对于框架使用不够熟练 心得 撸起袖子加油干! 今日会议内容 黄少勇 今日进展 实现账号绑定和首页公告信息及使用 ...

  2. Photoshop 基础六 图层

    图层就像一张张叠在一起的胶片,最上层的图像挡住下面的图像,使之看不见 上层图像中没有像素的地方为透明区域,通过透明区域可以看到下一层的图像 图层是相对独立的,在一个图层编辑时,不影响其它图层 每次只能 ...

  3. 【Luogu P1074】靶形数独

    Luogu P1074 题意:给一个数独,问怎么填会使每个位置填的数乘以它的权值得到的和最大.其中每个位置的权值在题面中给出了. 思路:首先我们考虑搜索.由于我们不可能搜每个格子取太多的数,所以我们从 ...

  4. php利用自定义key,对数据加解密的方法

    客户端和服务端通信时,有个场景很常见,通过一个id作为url参数来回传递.假设现在业务上只有这个id标识,那么需要稍微安全一点的通信,对这个id进行加密传输,到服务端再进行解密.这里需要一个服务端进行 ...

  5. 深入理解 JVM(上)

    菜鸟拙见,望请纠正(首先:推荐一本书[链接:https://pan.baidu.com/s/15I062n5LPYtRmueAAUFuFA 密码:kyo1]) 一:JVM体系概述 1:JVM是运行在操 ...

  6. 【LeetCode191】Number of 1 Bits★

    1.题目 2.思路 方法一:常规方法. 方法二:给面试官惊喜的解法. 3.java代码 方法一代码: public class Solution { // you need to treat n as ...

  7. JQuery加载html网页

    在ASP.NET MVC环境中,使用jQuery脚本去实现加载html网页. 一般情况之下,在ASP.NET MVC项目中,你不能在~/Views目录之下添加或是创建任何html为后缀的网页.但这也不 ...

  8. NPOI导Excel样式设置

    一.创建一个Excel //创建一个工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); //创建一个页 ISheet sheet = workbook.Cr ...

  9. 【强化学习】python 实现 q-learning 例一

    本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10134018.html 问题情境 -o---T# T 就是宝藏的位置, o 是探索者的位置 ...

  10. 运行supervisord -c /etc/supervisor/supervisord.conf 出错,解决办法

    坑都让我踩了...... 1 supervisord -c /etc/supervisor/supervisord.conf 什么意思? 答:手动启动:supervisord        具体详见 ...