网络 -- DNS学习

  • 什么是DNS?

  域名系统(Domain Name System,通常被称为“DNS”)是一个网络系统,允许我们把对人类友好的名称解析为唯一的地址。

  • 域名(Domain Name)

  域名是我们习惯于与互联网资源关联的人性化名称。例如,”google.com” 是一个域名。网址 “google.com” 与 Google 拥有的服务器相关联。当我们在浏览器中键入 “google.com” 时,域名系统允许我们访问其相关联的 Google 服务器。

  • IP地址(IP Address)&DNS

  IP 地址是我们所说的网络可寻址位置。每个 IP 地址在其网络中必须是唯一的。我们这里谈论的网络就是指整个互联网。
  IPv4,目前最常见的地址形式,由四组数字组成,每组最多有三位数字,每一组用一个点分隔。例如,111.222.111.222 是有效的 IPv4 IP 地址。
  使用 DNS,我们可以将名称映射到该地址(如google.com翻译成对应的xxx.xxx.xxx.xxxIP地址),这样,你就不必记住一组复杂的数字,来访问你需要的网站。

  • 顶级域名(Top Level Domain)
      顶级域名,或者说 TLD,是域名的最基本部分。顶级域名是右侧的最远部分(由点分隔)。常见的顶级域名是 com、net、org、gov、edu 和 io。
      顶级域名在域名术语层次结构的最上层。由 ICANN(互联网名称和号码分配公司)对顶级域名进行管理控制。然后,通过域名注册商来分发 TLD 下面的域名。

  • 子域名(Sub Domain Name)
      DNS 有层次结构,TLD 下面可以有多个域名。例如 com 下面有 google.com 和 ubuntu.com。”子域名” 是指作为较高层级域名的一部分。所以说,ubuntu.com 可以说是 com 的子域名,但是通常这被称为域名,或者 “ubuntu” 部分是 SLD(Second Level Domain),所以这是一个二级域名。

  • 主机(Host)
      域名所有者可以定义多个单独的主机,指向可以通过该域名访问的不同的计算机或者服务。例如,大多数域名所有者会让他们的 web 服务器可以通过裸域(example.com)以及 www 主机(www.example.com)访问。
      你可以在一个域名下面定义其它主机。比如说,通过 api 主机(api.example.com) 允许 API 访问,通过 ftp 主机或者 files 主机(ftp.example.com 或者 files.example.com)允许 ftp 访问。主机名可以任意指定,只要它们在该域名下是唯一的。

  • 名称服务器(Name Server)
      名称服务器(NS)是一种将域名翻译成 IP 地址的计算机。这些服务器完成了 DNS 系统中的大部分工作。由于域名翻译的数量对于任何一台服务器来说都太多了,因此每台服务器可以将请求转发给其他名称服务器或把它们负责的子域名的子集委派给其他名称服务器。
      名称服务器可以是“权威的”,表示它们自己可以提供所负责的域名的查询结果。否则,它们可能会转发到其他服务器,或者提供其他名称服务器数据的缓存副本。

  • 区域文件(Zone Files)
      区域文件是一个简单的文本文件,包含域名和 IP 地址之间的映射。这是当用户请求某个域名时,DNS 系统最终找出 IP 关联记录的地方。
      域文件放置在名称服务器中,通常定义了特定域名下可用的资源,或者可以去获取该信息的位置。

  • 记录(Record)
      在区域文件中,保存着记录。其中最简单的记录形式是,是资源和名称之间的单独映射。它们可以将域名映射到 IP 地址,定义域名的名称服务器,定义域名的邮件服务器等。

  • 域名解析的过程是怎么样的?
      我们的电脑里都有网卡,上面除了有ip地址、掩码,还有下面的DNS服务器/域名服务器。域名服务器则提供域名查询的功能,即域名服务器上存储着域名对应的ip地址。
      当我们在浏览器输入http://write.blog.csdn.net敲回车,这是电脑会进行以下动作:
      1.首先根据网址提取出域名,即“write.blog.csdn.net”
      2.如果你在系统中配置了Host文件,那么电脑会先查询hosts文件,看“write.blog.csdn.net”是否在Hosts文件中已经有了对应的记录,如果有就直接去该记录中的ip地址,域名解析的过程就结束了。
      3.如果Hosts文件中没有这个域名的记录,此时电脑会根据你设置的域名服务器去解析域名。如果你的电脑没有配置域名服务器,那么这时就会出现网站的域名无法解析错误。过程也结束了。
      4.如果你设置了域名服务器,那么电脑会向这个域名服务器发送一个域名查询的请求,如果这台域名服务器始终没有回应,则也会出现浏览器报错。
      5.如果域名服务器回应了,那么电脑可以根据域名服务器返回的应答信息得到域名的ip地址。然后,浏览器就会想这个ip地址对应的web服务器发送http请求。

  • 域名的缓存
      首先我们得知道DNS服务器有两种方式来解析域名,一是递归查询,二是迭代查询。
      当客户端发送过来的一个DNS查询请求时,本地DNS服务器S这时就会去查询自身缓存中有没有对应的域名记录,如果有,则直接应答;如果没有,这时DNS服务器S就会查询或联系其他DNS服务器以“完全”解析该域名,最后应答信息返回给DNS服务器S,S再将结果返回给客户端。这个过程就叫递归查询。由此可见递归查询是以本地DNS服务器为中心去查询的。
      下面就说一下以DNS客户端C为中心去查询的迭代查询。迭代查询的过程如下:
      1.当客户端C发送过来的DNS查询请求,本地DNS服务器也还是会去缓存中查询,看是否有对应的域名记录,如果没有,这时跟上面说的递归查询就有很大区别了:本地DNS服务器会返回一个应答信息给客户端C,并在里面附带一些“线索”:如根域名服务器的地址。
      2.接着客户端C就会根据根域名服务器的地址,向该地址发送查询请求,根域名服务器接到请求后会在它本身的数据库中根据顶级域名来查询对应的顶级域名服务器的地址,然后再以一条DNS应答报文返回给DNS客户端。
      3.紧接着,客户端根据根域名服务器返回的信息中包含的顶级域名服务器的地址,再向顶级域名服务器发送查询请求,顶级域名服务器首先查询自己的缓存,看里面是否已经有了对应的域名记录,如果没有,则根据顶级名称在它自身的数据库中查询对应的二级域名服务器的地址,最后返回给客户端。
      4.如此反复,向三级、四级域名服务器查询也是按照这样的过程,直到返回最终的IP地址。

这里写图片描述

1.根服务器
  如前所述,DNS 的核心是一个分层系统。在这个系统的顶部是所谓的 “根服务器”。这些服务器由各种组织控制,并由 ICANN(互联网名称和数字地址分配公司)授权。
  根服务器不知道实际托管域名的位置。然而,他们会将请求引导到处理特定请求的顶级域名的名称服务器。
  因此,如果向根服务器发出对“www.wikipedia.org”的请求,则根服务器不能在它的记录文件中找到与 “www.wikipedia.org” 匹配的记录,但是它会找到 “org” TLD 的记录,并把负责 “org” 地址的名称服务器的地址发回给请求者。

2.顶级域名服务器
  请求者然后向负责该请求的顶级域名的 IP 地址(由根服务器给予)发送新请求。
  对于我们的例子,它会发送向负责 “org” 域名的名称服务器发送一个请求,看看它是否知道 “www.wikipedia.org” 在哪里。
  同样,该名称服务器也不会在记录文件中找到 “www.wikipdia.org” 记录,但是,它会找到负责 “wikipedia.org” 的名称服务器的 IP 地址。这样就越来越接近我们想要的答案了。

3.域名级别名称服务器
  此时,请求者知道了具体负责该资源的实际 IP 地址的名称服务器的 IP 地址。它向该名称服务器发送一个新的请求,再次询问它是否可以解析 “www.wikipedia.org”。
  名称服务器检查其区域文件,并发现它有与“wikipedia.org”相关联的区域文件。在此文件的内部,有一个“www”主机的记录。此记录说明此主机所在的 IP 地址,并向请求者返回最终答案。

  • 请求者是什么?
      在上面的场景中,我们引用了 “请求者”。在这种情况下请求者指的是什么?
      在几乎所有情况下,请求者都是我们所谓的 “解析名称服务器”。解析名称服务器是配置着为询问其他服务器的问题的。它基本上是用户的中介,它缓存着先前的查询结果来提高速度,并且知道根服务器的地址,以便能够 “解析” 它还不知道的域名。
    基本上,用户通常会在其计算机系统上配置多个解析名称服务器。解析名称服务器通常由 ISP 或其他组织提供。例如,Google 提供了你可以使用的 DNS 解析服务器。这些可以在计算机中自动或手动配置。
      你在浏览器的地址栏中键入网址时,你的计算机将首先查看是否可以在本地找到资源所在的位置。它检查计算机上的 “hosts” 文件和其他几个位置。然后它将请求发送到解析名称服务器,并等待接收资源的 IP 地址。
      析名称服务器首先检查其缓存。如果没有,它将通过上述步骤找到答案。
      析名称服务器基本上压缩了最终用户的请求过程。客户端只需要知道请求资源所在的解析名称服务器,并且确信他们会查询并返回最终答案。

  • 缓存的生命周期
      既然这里说到了缓存,那就有生命周期。互联网上的域名信息是有可能发生变化的。比如某个域名被注销了,或者某个域名对应的IP地址修改了。所以域名服务器上的缓存中的域名记录都是有生命周期的,可能是几分钟,也可能几小时。如果某条记录过期了,就会被删除,然后DNS服务器就会在下次查询时重新缓存对应的域名记录。

  • DNS报文格式
      DNS报文由报头和正文段构成,DNS有四类正文段:查询段、应答段、授权段和附加段。其中正文段中的查询段用于主机向域名服务器发出地址解析请求,应答段、授权段、附加段用于域名服务器向主机返回地址解析结果,具体如下图所示:
    这里写图片描述
    这里写图片描述
    各个字段意义简述如下:
    • ID:这是由生成DNS查询的程序指定的16位的标志符。该标志符也被随后的应答报文所用,申请者利用这个标志将应答和原来的请求对应起来。
    • QR:该字段占1位,用以指明DNS报文是请求(0)还是应答(1)。
    • OPCODE:该字段占4位,用于指定查询的类型。值为0表示标准查询,值为1表示逆向查询,值为2表示查询服务器状态,值为3保留,值为4表示通知,值为5表示更新报文,值6~15的留为新增操作用。
    • AA:该字段占1位,仅当应答时才设置。值为1,即意味着正应答的域名服务器是所查询域名的管理机构或者说是被授权的域名服务器。
    • TC:该字段占1位,代表截断标志。如果报文长度比传输通道所允许的长而被分段,该位被设为1。
    • RD:该字段占1位,是可选项,表示要求递归与否。如果为1,即意味 DNS解释器要求DNS服务器使用递归查询。
    • RA:该字段占1位,代表正在应答的域名服务器可以执行递归查询,该字段与查询段无关。
    • Z:该字段占3位,保留字段,其值在查询和应答时必须为0。
    • RCODE:该字段占4位,该字段仅在DNS应答时才设置。用以指明是否发生了错误。
    允许取值范围及意义如下:
    0:无错误情况,DNS应答表现为无错误。
    1:格式错误,DNS服务器不能解释应答。
    2:严重失败,因为名字服务器上发生了一个错误,DNS服务器不能处理查询。
    3:名字错误,如果DNS应答来自于授权的域名服务器,意味着DNS请求中提到的名字不存在。
    4:没有实现。DNS服务器不支持这种DNS请求报文。
    5:拒绝,由于安全或策略上的设置问题,DNS名字服务器拒绝处理请求。
    6 ~15 :留为后用。
    • QDCOUNT:该字段占16位,指明DNS查询段中的查询问题的数量。
    • ANCOUNT:该字段占16位,指明DNS应答段中返回的资源记录的数量,在查询段中该值为0。
    • NSCOUNT:该字段占16位,指明DNS应答段中所包括的授权域名服务器的资源记录的数量,在查询段中该值为0。
    • ARCOUNT:该字段占16位,指明附加段里所含资源记录的数量,在查询段中该值为0。

查询段的格式如下图所示:
这里写图片描述
• QNAME:该字段是可变长字段,其中包含一个被请求的域名,用一系列标签表示,每一个标签由一个八进制后面跟着一个表示长度的八进制数组成。
• QTYPE: 该字段占16位,指定查询的资源类型(Type),该字段将一个类型值与一条指定的资源记录相匹配(有些通用的QTYPE值可以和与多条资源记录相匹配),其值可以是A(请求主机IP地址)、NS(请求授权域名服务器)或CNAME(请求返回规范名称,或者是某主机使用的与别名对应的真实名称)。
• QCLASS: 该字段占16位,指定查询的类别(Class),如Inet用以表示互联网和IP地址查询。

应答段、授权段、附加段的格式如下所示:
这里写图片描述
查询段是主机向域名服务器发出的将域名转换为IP地址的请求报文,域名服务器按照主机查询类型,经过查询资源记录数据库后返回含有资源记录的应答段、授权段或附加段,资源记录告诉主机所查询的信息。应答段、授权段、附加段具有相同的格式,其格式如图7-44所示。
各字段意义介绍如下:
• NAME:该字段是可变长字段,资源记录对应的域名(与主机发出的查询段中QNAME相同)。
• TYPE:占16位,该字段与查询段中的QTYPE相同。
• CLASS:占16位,该字段与查询段中的QCLASS相同。
• TTL:占32位,该字段表示资源记录的生命周期(以秒为单位),一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。
• RDLENTH:占16位,该字段表示资源数据的长度(以字节为单位)。
• RDATA:该字段是可变长字段,表示按查询段要求返回的相关资源记录的数据。其TYPE值是A,则返回4个字节的主机IP地址,如果TYPE值是NS,则返回授权域名服务器的域名,如果TYPE值是CNAME,则返回规范名称,或者是该主机使用的与别名对应的真实名称)。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值