运城云起时网站建设,vs做网站需要的插件,书签制作过程,网站的关键词库怎么做的那么多域名系统 DNS(Domain Name System) 是互联网使用的命名系统#xff0c;用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS#xff0c;但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字#xff0c;并使… 域名系统 DNS(Domain Name System) 是互联网使用的命名系统用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字并使用分布式的域名系统 DNS。DNS 是
一个有分层的 DNS服务器实现的分布式数据库一个使得主机能够查询分布式数据库的应用层协议。 采用客户服务器方式使大多数名字都在本地进行解析。名字到 IP 地址的解析是由若干个域名服务器程序完成的域名服务器程序在专设的结点上运行运行该程序的机器称为域名服务器。当一个应用进程需要把主机名解析为 IP 地址是该用户进程就调用解析程序并成为 DNS 的一个客户把待解析的域名放在 DNS 请求报文中以 UDP 用户数据报的方式发给本地域名服务器。本地域名服务器查找域名后把对应的 IP 地址放在回答报文中返回。若本地域名服务器不能回答该请求则该本地域名服务器就暂时成为 DNS 中的另一个客户并向其他域名服务器发出查询请求。 为什么是分布式 DNS 的一种简单的设计是在互联网中只使用一个 DNS 服务器该服务器包含所有的映射所有客户的查询都发往该服务器。现在来考虑下为什么 DNS 不使用集中式设计而是使用分布式原因主要有一下 4 点
单点故障如果该 DNS 服务器崩溃则整个因特网都会因此瘫痪通信容量单个 DNS 服务器不得不处理所有的 DNS 查询(数量级是上亿台主机)远距离的集中式数据库单个 DNS 服务器不可能“邻近”所有的查询客户会导致严重的时延维护单个 DNS 服务器不得不为所有因特网主机保留记录这使得数据库异常庞大且需要频繁更新。 总而言之单一的 DNS 服务器上运行集中式数据库完全没有拓展能力。 DNS 系统是一种将域名和 IP 地址相互映射的以层次结构分布的数据库系统。DNS 系统采用递归查询请求的方式来响应用户的查询为互联网的运行提供关键性的基础服务。 DNS 系统的解析过程描述如下
主机先向本地域名服务器进行递归查询本地域名服务器采用迭代查询向一个根域名服务器进行查询根域名服务器告诉本地域名服务器下一次应该查询的顶级域名服务器的 IP 地址本地域名服务器向顶级域名服务器进行查询顶级域名服务器告诉本地域名服务器下一步查询权威服务器的 IP 地址本地域名服务器向权威服务器进行查询权威服务器告诉本地域名服务器所查询的主机的IP地址本地域名服务器最后把查询结果告诉主机。 本实验的主要内容是基于 Wireshark 工具去分析 DNS 的解析过程及其协议字段。
1 DNS 协议分析
1.1 nslookup 域名解析
1.1.1 域名结构 IP 地址是网络中面向应用的计算机主机的标志而域名则是互联网中面向用户的主机的标志。为了保证域名的唯一性域名系统采用层次结构。如下图所示 每一个域名只讨论英文域名都是一个标号序列(labels)用字母(A-Za-z大小写等价)、数字(0-9)和连接符(-)组成标号序列总长度不能超过 255 个字符它由点号分割成一个个的标号label每个标号应该在 63 个字符之内每个标号都可以看成一个层次的域名级别最低的域名写在左边级别最高的域名写在右边如 www.baidu.comcom: 一级域名。表示这是一个企业域名。同级的还有 “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 将执行结果返回。实际使用中采用这种方式比较多。 下面列举几种主要用法
直接查询 查询一个域名的 A 记录使用默认的 DNS 服务器语法为nslookup domain 例如 nslookup baidu.com 从中可以看出: (1) baidu.com 的域名解析所使用的 DNS 服务器地址 172.21.0.10 (2) baidu.com 域名对应的主机有几个IP地址。
指定域名服务器查询
nslookup domain dns-server将查询请求发送到 DNS 服务器 bitsy.mit.edu而不是默认的 DNS 服务器。如
nslookup baidu.com 172.21.0.10查询其他记录语法格式如下
nslookup -typetype domain 通过指定 -type 参数的具体类型执行其他类型的查询。常用类型说明
MX邮件服务器记录NS名字服务器记录PTR反向记录。 如查询baidu.com对应的名字服务器记录
nslookup -typeNS baidu.com结果如图 查询 IP 地址172.11.4.107对应的域名反向查询:
nslookup -typePTR 172.11.4.107结果如图 1.2 查看与设置 DNS 服务器操作
1.2.1 如何查看网卡默认的 DNS 服务器 在我们使用的 Linux 操作系统里面DNS 服务器的配置信息在 /etc/resolv.conf 文件里面。查看该文件的命令如下
cat /etc/resolv.conf该文件内容如下图所示 可以看出默认的 DNS 服务器 IP 是172.21.0.10
1.2.2 如何修改网卡默认的 DNS 服务器 可以直接修改 resolv. conf文件方法如下
vim /etc/resolv.conf // 打开resolv.conf 文件改为如下内容
nameserver 114.114.114.114 # 修改成你的主DNS
nameserver 8.8.8.8 # 修改成你的备用DNS配置完成后需重启网络服务才生效重启网络服务的语句为
service networking restart1.3 DNS 报文分析
1.3.1 DNS 域名解析过程 DNS 协议属于应用层使用客户端-服务器模式运行在通信的端系统之间。在通信的端系统之间通过端到端传输输协议 UDP 协议通常使用 53 号端口来传送 DNS 报文。DNS 系统解析过程如下图所示 DNS 客户需要访问 WEB 服务器 www.abc.xyz.com则客户机可以访问本地的 hosts 文件看能否知道主机名称对应的 IP 地址如果 hosts 文件不能解析该主机名称则只能通过向客户机所设定的 DNS 服务器进行查询。查询过程如下
(1) DNS 客户机向本地域名服务器发送查询请求查找域名 www.abx.xyz.com 的 IP 地址。本地域名服务器查询本地的缓存如果有这个地址则将地址返回给 DNS 客户机(2) 如果本地域名服务器缓存没有这个地址则发送查询请求到根域名服务器询问 www.abx.xyz.com 的地址根域名服务器会将子域 com 的域名服务器的地址返回给本地域名服务器(3) 本地域名服务器再向 com 域发送查询请求com 域服务器无法提供地址但会把下一级的域名服务器 xyz.com 的地址发送给本地域名服务器(4) 重复2、3的过程最后 xyz.com 域名服务器把 abc.xyz.com 域名服务器地址发送给本地域名服务器(5) 本地域名服务器再向 abc.xyz.com 域名服务器发送地址查询请求 abc.xyz.com找到了 www.abc.xyz.com 的地址就将这个地址发送给本地域名服务器(6) 本地域名服务器把地址保存到缓存同时返回给 DNS 客户机。 有两种查询方式分别是:
1. 递归查询 主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址那么本地域名服务器就以 DNS 客户的身份向其他根域名服务器继续发出查询请求报文。 2. 迭代查询 本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时要么给出所要查询的 IP 地址要么告诉本地域名服务器“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。 递归查询主机向本地域名服务器的查询一般都是采用递归查询迭代查询本地域名服务器向根域名服务器的查询通常采用迭代查询。只是通常也有的采用递归查询。
1.3.2 域名解析协议 域名解析的实现是依靠 DNS 协议来完成。有两种 DNS 报文——查询报文和响应报文分别来实现 DNS 的查询请求和响应请求。 DNS 协议报文格式如下 1. 头部 (1) 会话标识2 字节 DNS 报文的 ID 标识对于请求报文和其对应的应答报文这个字段是相同的通过它可以区分 DNS 应答报文是哪个请求的响应。 (2) 标志2 字节 各字段定义如下 QR1 bit 查询/响应标志0 为查询1 为响应opcode4 bit 0 表示标准查询1 表示反向查询2 表示服务器状态请求AA1 bit 表示授权回答TC1 bit 表示可截断的RD1 bit 表示期望递归RA1 bit 表示可用递归rcode4 bit 表示返回码0 表示没有差错3 表示名字差错2 表示服务器错误Server Failure (3) 数量字段总共 8 字节 各自表示后面的四个区域的数目。
Questions 表示查询问题区域节的数量Answers 表示回答区域的数量Authoritative nameservers 表示授权区域的数量Additional recoreds 表示附加区域的数量
**2. 正文 ** 正文部分由查询区域和资源记录区域组成。 (1) 查询区域 查询名长度不固定且不使用填充字节一般该字段表示的就是需要查询的域名如果是反向查询则为 IP 反向查询即由 IP 地址反查域名。其构成如下 查询类型规定如下 注查询类通常为 1 表明是 Internet 数据。 (2) 资源记录 (RR) 区域包括回答区域、授权区域和附加区域 这三个区域分别是回答区域授权区域和附加区域其格式都是一样的。
域名 2 字节或不定长格式和 Queries 区域的查询名字字段是一样的查询类型表明资源纪录的类型与查询类型表格相同查询类对于 Internet 信息总是 IN 生存时间TTL以秒为单位表示的是资源记录的生命周期资源数据可变长字段表示按照查询段的要求返回的相关资源记录的数据。
1.4 NS 类型的 DNS 解析报文分析
1.4.1 如何捕获 NS 类型的 DNS 报文 DNS 中 NS 记录 NSName Server记录是域名服务器记录用来指定该域名由哪个 DNS 服务器来进行解析。 在注册域名时总有默认的 DNS 服务器每个注册的域名都是由一个 DNS 域名服务器来进行解析的DNS 服务器 NS 记录地址一般以以下的形式出现ns1.domain.com、ns2.domain.com 等。 简单的说NS 记录是指定由哪个 DNS 服务器解析你的域名。 在执行 nslookup 时可以通过指定参数 -typeNS 来查询指定域名对应的域名服务器。如下图所示。 1.4.2 解析 DNS 请求报文 通过 Wireshark 可以抓取执行上述操作报文列表。筛选 DNS 协议的报文找到查询请求报文展开如下图所示。 可以看出请求查询报文的的 Type 字段为 NS 即 Authorizative Name Server 。即希望得到权威的名字服务。该请求报文是通过 UDP 协议进行传输的端口号为 53 。
传输层协议使用 TCP 还是 UDP DNS 可以使用 UDP/53 也可以使用 TCP/53 。当响应报文的长度小于 512B 时就使用 UDP (因为 UDP 的最大报文长度为 512B )若响应报文的长度超过 512B 则选用 TCP 。DNS 协议关于 UDP 和 TCP 的选择通常为以下两种情况 (1) 若 DNS 客户程序事先知道响应报文的长度超过 512B 则应当使用 TCP 连接 注意主域名服务器与辅助域名服务器在进行区域传送时通常数据量都比较大所以 DNS 规定区域传送使用 TCP 协议。 (2) 若解析程序不知道响应报文的长度它一般使用 UDP 协议发送 DNS 查询报文若 DNS 响应报文的长度大于 512B 服务器就截断响应报文并把 TC(truncated) 置为 1 。在这种情况下DNS 客户程序通常使用 TCP 重发原来的查询请求从而它将来能够从 DNS 服务器中收到完整的响应。
1.4.3 解析 DNS 应答报文 查看随后的响应报文可以看到有多个响应报文。这些报文就是在进行解析baidu.com域名对应的权威服务器过程中响应的报文。展开这些报文可以看到第一个响应报文如下图所示。 该报文应答部分有多个服务器地址其第一个地址类型为 SOAstart of a zone of an authority即权威区域的开始。其后的服务器地址类型为 SRVServer selection即服务器选择。 随后的多个报文都是对查询报文的响应。 由于前述响应报文长度大于 512B 随后再次出现了一个查询请求报文查看其传输层协议可以看到换用了 TCP 协议。 同样有多个应答报文进行响应。查看这些报文的应答类型有些是 SRV 有些是 AAddress内容是具体的 IP 地址。 查看最后一个应答报文如下图所示。 可以看出其权威 DNS 服务器的名称为ns.dns.cluster.local。
1.5 反向 DNS 解析
1.5.1 反向解析 在 nslookup 中类型参数设为 PTR 表示反向解析。反向解析是用于将一个 IP 地址映射到对应的域名也可以看成是 A 记录的反向IP 地址的反向解析。下图演示了反向解析 IP 地址 39.156.69.79 的操作。 注意反向解析时IP地址的顺序也是反的 反向解析查询报文 下图是 Wireshark 抓获的查询报文。 展开 Query 段可以看到此报文的 Type 为 PTR 即反向解析。反向解析的 name 是 IP 地址再加了 in-addr.arpa 这部分。
反向解析响应报文 下图是 Wireshark 抓获的反向解析应答报文。 展开该报文的 Answers 部分可以看到该段的 Type 是 PTR 查询的 name 是 IP 地址加in-addr.arpa 部分而响应的 Domain Name 的值为79-69-156-39.dynamic.dsl.as9105.com。
1.6 指定服务器的DNS报文分析 打开 Wireshark 并在过滤器中输入 DNS 。筛选出 DNS 协议报文并开始捕获报文。然后打开终端输入命令并执行 nslookup baidu.com 114.114.114.114在 Wireshark 中停止捕获报文 从报文列表可以看出经历了多次查询与应答在最后一轮才得到了baidu.com的 A 地址。查询的百度域名依次为
baidu.com.default.svc.cluster.local
baidu.com.svc.cluster.local
baidu.com.cluster.local
baidu.com依次查看其应答报文可以看出前几次的应答都是 Authoritative Nameserver 类型为 SOA 即域名分区没有得到真正的 IP 地址只有最后一次才得到 Answers 其类型 Type 为 A 其 IP 地址为 220.181.38.14839.156.69.79。
补充ipconfig ipconfig对于Windows和 ifconfig对于Linux / Unix是主机中最实用的程序尤其是用于调试网络问题时。这里我们只讨论ipconfig尽管Linux / Unix的 ifconfig 与其非常相似。 ipconfig 可用于显示您当前的TCP/IP信息包括您的地址DNS服务器地址适配器类型等。例如您只需进入命令提示符输入
ipconfig /all所有关于您的主机信息都类似如下面的屏幕截图所显示。 ipconfig 对于管理主机中存储的DNS信息也非常有用。在第2.5节中我们了解到主机可以缓存最近获得的DNS记录。要查看这些缓存记录在 C:\ 提示符后输入以下命令
ipconfig /displaydns每个条目显示剩余的生存时间TTL秒。要清除缓存请输入
ipconfig /flushdns清除了所有条目并从hosts文件重新加载条目。 2 实验分析 现在我们熟悉nslookup和ipconfig我们准备好了一些正经的事情。首先让我们捕获一些由常规上网活动生成的DNS数据包。
使用ipconfig清空主机中的DNS缓存。打开浏览器并清空浏览器缓存。 若使用Internet Explorer转到工具菜单并选择Internet选项然后在常规选项卡中选择删除文件。打开Wireshark然后在过滤器中输入“ip.addryour_IP_address”您可以先使用ipconfig获取你的IP地址。此过滤器将删除既从你主机不发出也不发往你主机的所有数据包。在Wireshark中启动数据包捕获。使用浏览器访问网页 https://www.nuaa.edu.cn/停止数据包捕获。 运行nslookup 以获取一个亚洲的Web 服务器的IP 地址。该服务器的IP 地址 是什么 答这里使用的阿里的公众 DNS 223.5.5.5 替代我的 ISP 服务商的 DNS 进行查 询这里我查询的是南航(https://www.nuaa.edu.cn/)的IP 地址。可以在图中看到我请求阿里公共DNS 来获取南航的IP 地址为218.94.136.180。 找到DNS查询和响应消息。它们是否通过UDP或TCP发送 答是 UDP。 DNS是查询消息的目标端口是什么 DNS响应消息的源端口是什么 答都是 53 端口。 DNS 查询消息发送到哪个 IP 地址使用 ipconfig 来确定本地 DNS 服务器的 IP 地址。这两个 IP 地址是否相同 检查 DNS 查询消息。DNS 查询是什么 “Type” 的查询消息是否包含任何 “answers” 答Type 为 “A”表示查询 IP 地址没有任何 “answers”。 检查DNS响应消息。提供了多少个answers这些答案具体包含什么 答提供了 2 个 “answers”是该域名的 2 个 IPV4 地址。 考虑从您主机发送的后续 TCP SYN 数据包。 SYN 数据包的目的 IP 地址是否与 DNS 响应消息中提供的任何 IP 地址相对应 答是相对应的。 这个网页包含一些图片。在获取每个图片前您的主机是否都发出了新的 DNS 查询 答没有因为本机 DNS 已经被缓存了因此不需要发起新的 DNS 查询。 DNS查询消息的目标端口是什么 DNS响应消息的源端口是什么 答目标端口和源端口都是 53。 DNS 查询消息的目标 IP 地址是什么这是你的默认本地 DNS 服务器的 IP 地址吗 答225.3.3.3是我修改的默认本地 DNS 服务器的 IP 地址。 检查 DNS 查询消息。DNS 查询是什么 “Type” 的查询消息是否包含任何 “answers” 答Type 为 “A”表示查询 IP 地址没有任何 “answers”。 检查 DNS 响应消息。提供了多少个 “answers”这些答案包含什么 答提供了 1 个 “answers”是该域名的 IPV4 地址。 现在重复上一个实验但换成以下命令
nslookup www.aiit.or.kr bitsy.mit.eduDNS 查询消息发送到的 IP 地址是什么这是您的默认本地 DNS 服务器的 IP 地址吗 答18.0.72.3不是我的默认本地 DNS 服务器的 IP 地址。 检查DNS查询消息。DNS 查询是什么 “Type” 的查询消息是否包含任何 “answers” 答Type 为 “A”表示查询 IP 地址没有任何 “answers”。 检查 DNS 响应消息。提供了多少个 “answers”这些答案包含什么 答提供了 1 个 “answers”是该域名的 IPV4 地址。 补充dig命令 命令行工具 dig 可以跟 DNS 服务器互动它的查询语法如下美元符号$是命令行提示符
$ dig [DNS 服务器] [域名]网上有很多公用的 DNS 服务器这篇文章选择 Cloudflare 公司提供的 1.1.1.1 进行演示,向 1.1.1.1 查询域名就执行下面的命令。 参考
DNS 原理入门http://www.ruanyifeng.com/blog/2016/06/dns.htmlDNS 查询原理详解http://www.ruanyifeng.com/blog/2022/08/dns-query.htmlDNS协议分析https://www.educoder.net/shixuns/4yze3kp5/challenges《计算机网络自顶向下方法》笔记https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTESWireshark实验——DNS域名系统https://www.cnblogs.com/linfangnan/p/12771157.html