《计算机网络—自顶向下方法》 Wireshark实验(三):DNS协议分析

        域名系统 DNS(Domain Name System) 是互联网使用的命名系统,用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS,但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS。DNS 是:

  1. 一个有分层的 DNS服务器实现的分布式数据库;
  2. 一个使得主机能够查询分布式数据库的应用层协议。

        采用客户服务器方式,使大多数名字都在本地进行解析。名字到 IP 地址的解析是由若干个域名服务器程序完成的,域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。当一个应用进程需要把主机名解析为 IP 地址是,该用户进程就调用解析程序,并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 用户数据报的方式发给本地域名服务器。本地域名服务器查找域名后,把对应的 IP 地址放在回答报文中返回。若本地域名服务器不能回答该请求,则该本地域名服务器就暂时成为 DNS 中的另一个客户,并向其他域名服务器发出查询请求。

为什么是分布式?

        DNS 的一种简单的设计是,在互联网中只使用一个 DNS 服务器,该服务器包含所有的映射,所有客户的查询都发往该服务器。现在来考虑下,为什么 DNS 不使用集中式设计而是使用分布式?原因主要有一下 4 点:

  • 单点故障:如果该 DNS 服务器崩溃,则整个因特网都会因此瘫痪;
  • 通信容量:单个 DNS 服务器不得不处理所有的 DNS 查询(数量级是上亿台主机);
  • 远距离的集中式数据库:单个 DNS 服务器不可能“邻近”所有的查询客户,会导致严重的时延;
  • 维护:单个 DNS 服务器不得不为所有因特网主机保留记录,这使得数据库异常庞大,且需要频繁更新。

        总而言之,单一的 DNS 服务器上运行集中式数据库,完全没有拓展能力。

        DNS 系统是一种将域名和 IP 地址相互映射的以层次结构分布的数据库系统。DNS 系统采用递归查询请求的方式来响应用户的查询,为互联网的运行提供关键性的基础服务。

        DNS 系统的解析过程描述如下:

  1. 主机先向本地域名服务器进行递归查询;
  2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询;
  3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的 IP 地址;
  4. 本地域名服务器向顶级域名服务器进行查询;
  5. 顶级域名服务器告诉本地域名服务器,下一步查询权威服务器的 IP 地址;
  6. 本地域名服务器向权威服务器进行查询;
  7. 权威服务器告诉本地域名服务器所查询的主机的IP地址;
  8. 本地域名服务器最后把查询结果告诉主机。

        本实验的主要内容是基于 Wireshark 工具去分析 DNS 的解析过程及其协议字段。

1 DNS 协议分析

1.1 nslookup 域名解析

1.1.1 域名结构

        IP 地址是网络中面向应用的计算机主机的标志,而域名则是互联网中面向用户的主机的标志。为了保证域名的唯一性,域名系统采用层次结构。如下图所示:

  • 每一个域名(只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成;
  • 标号序列总长度不能超过 255 个字符,它由点号分割成一个个的标号(label);
  • 每个标号应该在 63 个字符之内,每个标号都可以看成一个层次的域名;
  • 级别最低的域名写在左边,级别最高的域名写在右边,如 www.baidu.com
  • com: 一级域名。表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(非盈利组织) 等;
  • baidu: 二级域名,指公司名;
  • www: 表示该公司的 WEB 服务器对应的主机。
1.1.2 域名服务器

        域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名及其 IP 地址数据库的主机。

        域名服务器由高向低进行层次划分,可分为以下几大类:

  • 根域名服务器:最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助;
  • 顶级域名服务器:负责管理在该顶级域名服务器下注册的二级域名;
  • 权限域名服务器:负责一个区的域名解析工作;
  • 本地域名服务器:当一个主机发出 DNS 查询请求时,这个查询请求首先发给本地域名服务器。

        注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区。各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。

        我们需要注意的是:

  • 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器;
  • 每一级域名服务器都知道下级域名服务器的 IP 地址;
  • 为了容灾,每一级至少设置两个或以上的域名服务器。
1.1.3 域名解析

        域名解析主要是将主机名(例如 www.example.com)转换为计算机友好的 IP 地址(例如 192.168.1.1),域名解析的基本过程:

  • (1) 输入域名后,先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据;
  • (2) 如果没有, 就向上级域名服务器进行查找, 依次类推;
  • (3) 最多回溯到根域名服务器,肯定能找到这个域名的 IP 地址;
  • (4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的 IP 地址缓存起来,可以加速查找过程。

        简单的域名对应的 IP 地址查询,也可以使用 ping 命令来完成。

1.1.4 域名解析与 nslookup

        nslookup 是一种网络管理命令行工具,可用于查询 DNS 域名和 IP 地址。无论是 linux 或者是 window 下都有这个工具,用好它对平常的域名解析情况,或者对域名服务器的维护都有帮助。
语法:

    nslookup [ -Option ... ] [ Host ] [ -NameServer ]

        nslookup 命令以两种方式查询域名服务器:

  • 交互模式:当没有给出操作参数时进入,操作对象和操作方式可以通过相应交互命令来告诉。
  • 命令模式:在一个命令行中将操作对象和操作方式告知命令,nslookup 将执行结果返回。实际使用中,采用这种方式比较多。

        下面列举几种主要用法:

  1. 直接查询 查询一个域名的 A 记录,使用默认的 DNS 服务器,语法为:nslookup domain 例如: nslookup baidu.com

        从中可以看出:
(1) baidu.com 的域名解析所使用的 DNS 服务器地址 172.21.0.10
(2) baidu.com 域名对应的主机有几个IP地址。

  1. 指定域名服务器查询
nslookup domain  dns-server

        将查询请求发送到 DNS 服务器 bitsy.mit.edu,而不是默认的 DNS 服务器。如:

nslookup baidu.com 172.21.0.10
  1. 查询其他记录,语法格式如下:
nslookup -type=type domain 

        通过指定 -type 参数的具体类型,执行其他类型的查询。常用类型说明:

  • MX:邮件服务器记录;
  • NS:名字服务器记录;
  • PTR:反向记录。

        如查询baidu.com对应的名字服务器记录:

nslookup -type=NS baidu.com

结果如图:

        查询 IP 地址172.11.4.107对应的域名(反向查询):

nslookup -type=PTR 172.11.4.107

结果如图:

1.2 查看与设置 DNS 服务器操作

1.2.1 如何查看网卡默认的 DNS 服务器

        在我们使用的 Linux 操作系统里面,DNS 服务器的配置信息在 /etc/resolv.conf 文件里面。查看该文件的命令如下:

cat /etc/resolv.conf

        该文件内容如下图所示:

版权声明:本文为博主作者:长路漫漫2021原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/xq151750111/article/details/130576182

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2024年1月16日
下一篇 2024年1月16日

相关推荐