首页 > 其他 > 详细

DNS协议详解

时间:2020-08-14 01:42:38      阅读:45      评论:0      收藏:0      [点我收藏+]

1、URL构成和域名体系

URL构成

URL:(Uniform Resource Locator)统一资源定位符。一条符合规范的URL对应的是服务器的一个特定的资源(如HTML页面,一张图片等)。

结构如下:

scheme://hostname[:port]/path/[;parameters][?query]#fragment

  scheme:通信协议,常用的有http、https、ftp、mailto等。
  hostname:主机域名或IP地址。
  port:端口号,可选。省略时使用协议的默认端口,如http默认端口为80。
  path:路径由零或多个"/"符号隔开的字符串组成,一般用来表示主机上的一个目录或文件地址。
  query:查询,可选。用于传递参数,可有多个参数,用"&"符号隔开,每个参数的名和值用"="符号隔开。
  fragment:信息片断字符串,也称为锚点。用于指定网络资源中的片断。

比如:

https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9230366566950910677%22%7D&n_type=0&p_from=1

其中mbd.baidu.com为主机域名。

域名体系

  域名(Domain Name)通常是用户所在的主机名。域名格式是由若干部分组成,每个部分又称子域名,它们之间用“.”分开,每个部分最少由两个字母或数字组成。城名通常按分层结构来构造,每个子域名都有其特定的含义。从右到左,子域名分别表示不同的国家或地区的名称(只有美国可以省略表示国家的顶级域名)、组织类型、组织名称、分组织名称和计算机名称等。

2、DNS服务器体系

域名服务器实际上就是装有域名系统的主机。由高向低进行层次划分,可分为以下几大类:

  • 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器,本地域名服务器如果解析不了域名就会向根域名服务器求助。全球共有13个不同IP地址的根域名服务器,它们的名称用一个英文字母命名,从a一直到m。这些服务器由各种组织控制,并由 ICANN(互联网名称和数字地址分配公司)授权,每个根服务器都有镜像服务器,每个根服务器与它的镜像服务器共享同一个 IP 地址,中国大陆地区内只有6组根服务器镜像(F,I(3台),J,L)。当你对某个根服务器发出请求时,请求会被路由到该根服务器离你最近的镜像服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和地址,如果向根服务器发出对 “jocent.me” 的请求,则根服务器是不能在它的记录文件中找到与 “jocent.me” 匹配的记录。但是它会找到 “me” 的顶级域名记录,并把负责 “me” 地址的顶级域名服务器的地址发回给请求者。
    • 为什么根域名服务器只能有13个?

      通过UDP协议传输的DNS消息最大长度需要限制在512字节(不包括IP头部、UDP头部),超出部分要被截断。有了最大长度限制后,一个UDP协议传输的DNS响应能够返回的资源记录数量就是有限的。512字节的限制是在RFC 1035中规定的,为了更好的性能我们需要将响应限制在一个响应报文中完成,也就是只有512字节可以用了。当我们查询根域的NS记录时,512字节只够返回包含13个由A-M命名的根域名服务器的NS记录和A记录的响应。NS记录在回答区段中,A记录在额外信息区段中,A记录用于帮助你接下来向根域名服务器进一步查询。

  • 顶级域名服务器:负责管理在该顶级域名服务器下注册的二级域名。当根域名服务器告诉查询者顶级域名服务器地址时,查询者紧接着就会到顶级域名服务器进行查询。比如还是查询"jocent.me",根域名服务器已经告诉了查询者“me”顶级域名服务器的地址,“me”顶级域名服务器会找到 “jocent.me”的域名服务器的记录,域名服务器检查其区域文件,并发现它有与 “jocent.me” 相关联的区域文件。在此文件的内部,有该主机的记录。此记录说明此主机所在的 IP 地址,并向请求者返回最终答案。
  • 权限域名服务器:负责一个区的域名解析工作
  • 本地域名服务器:当一个主机发出DNS查询请求的时候,这个查询请求首先就是发给本地域名服务器的。

3、域名解析过程

域名解析总体可分为两大步骤,第一个步骤是本机向本地域名服务器发出一个DNS请求报文,报文里携带需要查询的域名;第二个步骤是本地域名服务器向本机回应一个DNS响应报文,里面包含域名对应的IP地址。从下面对jocent.me进行域名解析的报文中可明显看出这两大步骤。注意:第二大步骤中采用的是迭代查询,其实是包含了很多小步骤的,详情见下面的流程分析。

其具体的流程可描述如下:

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

其中有两个概念递归查询和迭代查询,其实在整个描述的过程中已经体现的很明显,这里再说明一下:

  • 递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
  • 迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询

4、DNS报文结构

5、Wireshark抓包分析

DNS协议详解

原文:https://www.cnblogs.com/joycamp/p/13498104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!