DNS相关知识

2021-04-10  本文已影响0人  大炮对着虫子
一、引言

关于DNS(Domain Name System)应该都不陌生,大多人说出来就是将一个网站的域名转化成IP.能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。

  1. 使用域名代表IP地址,相对于数字更好记方便用户访问
  2. 服务器IP地址可能经常改动、使用域名映射IP、可对外提供一个稳定的服务地址
    稍微画了个DNS原理图:
    网络简易拓扑图一-DNS原理.png
    DNS是一个分布式数据库系统。当我们需要访问一个域名(其实就是前面说的计算机的名字)时,应用程序会向DNS服务器发起一个DNS请求,DNS服务器返回该域名对应的IP地址.
    它需要去管理一个超大型并且不断变化的域名到IP的映射集合、并且还要去应付成千上万的DNS查询请求. DNS协议是如何规划来处理这些问题的呢?我们需要看下了解下DNS的域名系统结构.
二、DNS域名系统结构
image.png

1)Root 域名:DNS 域名使用时,规定由尾部句号来指定名称位于根或更高级别的域层次结构;
2)Top Level 顶级域名:用来指示某个国家、地区或组织使用的名称的类型名称。如 .com;
3)Second Level 域名:个人或组织在 Internet 上使用的注册名称。如 baidu.com;
4)Third Level 域名:已注册的二级域名派生的域名。如 tieba.baidu.com
通过这样的域名结构划分、就合理地将所有的域名资源记录存储到不同的域名服务器上。
这样我们建立了一个域名服务器集群,并合理地保存了域名空间和域名资源记录的对应关系。现在我们要做的就是发送一个DNS请求给域名服务器,然后坐等它返回正确的域名资源记录,这个过程叫作域名解析。
画了张图描述下DNS解析过程:


image.png

如上图所示,这是一个典型的域名解析过程:

迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:你下一步应当向哪一个域名服务器进行查询。然后让本地域名服务器进行后续的查询,而不是替本地域名服务器进行后续的查询。

由此可见,客户端到 Local DNS 服务器,Local DNS 与上级 DNS 服务器之间属于递归查询;DNS 服务器与根 DNS 服务器之前属于迭代查询。

#######三、DNS报文格式
首先我打算通过WireShark抓包来看一眼DNS数据包

3.1 抓包前准备

查询手头电脑的DNS配置

cat /etc/resolv.conf
nameserver 10.0.62.15


ifconfig
10.0.51.182

我这边查询的配置是 10.0.62.15

3.2开始抓包分析DNS报文格式
ping bilibili.com

WireShark抓包如下:


image.png

DNS定义了一个用于查询和响应的报文格式


image.png

这个报文由12字节长的首部和4个长度可变的字段组成
标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。
16 bit的标志字段被划分为若干子字段,我们通过抓包工具看.


image.png
  1. QR是1bit字段:0表示查询报文,1表示响应报文
  2. opcode是一个4bit字段:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
  3. AA是1bit标志,表示“授权回答(authoritative answer)”。该名字服务器是授权于该域的。
  4. TC是1bit字段,表示“可截断的(truncated)”。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。
  5. RD是1bit字段表示“期望递归(recursion desired)”。该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。如果该位为0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。在后面的例子中,我们将看到这两种类型查询的例子。
  6. RA是1bit字段,表示“可用递归”。如果名字服务器支持递归查询,则在响应中将该比特设置为1。在后面的例子中可看到大多数名字服务器都提供递归查询,除了某些根服务器。
  7. 随后的3bit字段必须为0。
  8. rcode是一个4bit的返回码字段。通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。

随后的4个16 bit字段说明最后4个变长字段中包含的条目数。对于查询报文,问题(question)数通常是1,而其他3项则均为0。类似地,对于应答报文,回答数至少是1,剩下的两项可以是0或非0。
下面这个是响应报文


image.png

我们通过dig命令来查看bilibili.com是如何被解析出来的,首先会向预置的 13 组根域名服务器发出请求获取顶级域名的地址:

dig -t A bilibili.com +trace
image.png

根域名服务器是 DNS 中最高级别的域名服务器,这些服务器负责返回顶级域的权威域名服务器地址,这些域名服务器的数量总共有 13 组,域名的格式从上面返回的结果可以看到是 .root-servers.net,每个根域名服务器中只存储了顶级域服务器的 IP 地址


image.png
上一篇 下一篇

猜你喜欢

热点阅读