DNS(域名系统) 学习笔记

百度百科中的DNS介绍DNS介绍

DNS(Domain Name System,域名系统),万维网上作为域名和ip地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的ip数串。通过域名,最终得到该域名对应的ip地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

DNS是什么

DNS是Domain Name System的简写,中文翻译过来就是域名系统,是用来将主机名转换为ip的。事实上,除了进行主机名到IP地址的转换外,DNS通常还提供主机名到以下几项的转换服务:
1.主机命名(host aloasing)。有着复杂规范主机名的主机可能有一个或多个别名,通常规范主机名较复杂,而别名让人更容易记忆。应用程序可以调用DNS来获得主机别名对应的规范主机名,以及主机的IP地址。
2.邮件服务器别名(mail server aliasing)。DNS也能完成邮件服务器别名到其规范主机名以及ip地址的转换。
3.负载均衡(load distribution)。DNS可用于冗余的服务器之间进行负载均衡。一个繁忙的站点,如abc.com,可能被冗余部署在多台具有不同ip的服务器上。在该情况下,在DNS数据库中,该主机名可能对应着一个ip集合,但应用程序调用DNS来获取该主机名对应的ip时,DNS通过某种算法从该主机名对应的ip集合中,挑选出某一ip进行响应。

DNS的作用

DNS是因特网的目录服务

DNS是因特网的目录服务,它提供了主机名到ip地址映射的查询服务。这种服务的起源之一是人和路由器的需求之间的矛盾,主机可以用主机名或ip地址标识,对我们人来说我们很喜欢像taobao.com或者是baidu.com之类的由便于记忆的单词组成的主机名,但对于路由器来说,它难以处理这种字母数字组成的主机名,而更能接受ip地址。所以DNS就是根据主机名查询对应的ip地址的服务。

当然DNS的作用不仅于此

DNS提供的具体服务:

●提供了主机名到ip地址映射的查询服务

●提供主机别名(host aliasing)服务,有着复杂主机名的主机可以有一个或者多个别名,例如:aaa.xxx.com的主机可能还会有aaa.comxxx.com两个别名,在这种情况下,aaa.xxx.com叫做规范主机别名(canonical hostname)。主机别名的特征是比规范主机名更容易记忆,DNS可以提供根据主机别名获取规范主机名的服务。

●提供负载分配服务(load distribution)。一般来说,被繁忙访问的大型站点是分布在多台服务器上的,这个时候,主机名和ip地址就不是一一对应的关系,而是一个主机名对应一个ip地址的集合。在大量的,连续的多次访问中,DNS通过旋转ip地址达到负载均衡的目的:在向这个主机名发出DNS请求的时候,服务器会用包含全部这些ip地址的报文进行回答,但在每个不同的回答中会旋转这些ip地址的摆放顺序,而客户机总向报文中排在最前面的ip地址发出请求

DNS的性质

从两个层面上理解DNS:
第一,从协议的层面看,它是一种应用层协议
第二,从实体的层面看,它是一个由分层的DNS服务器实现的分布式数据库

DNS应用层协议

DNS资源记录

DNS服务器存储的资源记录(Resource Records,RRs),一条资源记录(RR)记载着一个映射状态。每条RR通常包含如下表所示的一些信息:
image.png

NAME和RDATA表示的含义根据TYPE的取值不同而不同,常见的:
1.若TYPE=A,则name是主机名,value是其对应的ip;
2.若TYPE=NS,则name是一个域,value是一个权威DNS服务器的主机名。该记录表示name域的域名解析将由value主机名对应的DNS服务器来做;
3.若TYPE=CNAME,则value是别名为name的主机对应的规范主机名;
4.若TYPE=MX,则value是别名为name的邮件服务器的规范主机名;
5......

TYPE实际上还有其他类型,所有可能的type及其约定的数值表示如下:
image.png
整体及Header部分

DNS协议

DNS请求与响应的格式是一致的,其整体分为Header、Question、Answer、Authority、Additional5部分,如下图所示:
image.png

Header部分是一定有的,长度固定为12个字节;其余4部分可能有也可能没有,并且长度也不一定,这个在Header部分中有指明。Header的结构如下:
image.png

1.ID:占16位。该值由发出DNS请求的程序生成,DNS服务器在响应时会使用该ID,这样便于请求程序区分不同的DNS响应。
2.QR:占1位。指示该消息是请求还是响应。0表示请求;1表示响应。
3.OPCODE:占4位。指示请求的类型,有请求发起者设定,响应消息中复用该值。0表示标准查询;1表示反转查询;2表示服务器状态查询。3~15目前保留,以备将来使用。
4.AA(Authoritative Answer,权威应答):占1位。表示响应的服务器是否是权威DNS服务器。只在响应消息中有效。
5.TC(TrunCation,截断):占1位。指示消息是否因为传输大小限制而被截断。
6.RD(Recursion Desired,期望递归):占1位。该值在请求消息中被设置,响应消息复用该值。如果被设置,表示希望服务器递归查询。但服务器不一定支持递归查询。
7.RA(Recursion Available,递归可用性):占1位。该值在响应消息中被设置或被清除,以表明服务器是否支持递归查询。
8.Z:占3位。保留备用。
9.RCODE(Response code):占4位。该值在响应消息中被设置。取值及含义如下:
● 0:No error condition,没有错误条件;
● 1:Format error,请求格式有误,服务器无法解析请求;
● 2:Server failure,服务器出错。
● 3:Name Error,只在权威DNS服务器的响应中有意义,表示请求中的域名不存在。
● 4:Not Implemented,服务器不支持该请求类型。
● 5:Refused,服务器拒绝执行请求操作。
● 6~15:保留备用。

  1. QDCOUNT:占16位(无符号)。指明Question部分的包含的实体数量。
  2. ANCOUNT:占16位(无符号)。指明Answer部分的包含的RR(Resource Record)数量。
  3. NSCOUNT:占16位(无符号)。指明Authority部分的包含的RR(Resource Record)数量。
  4. ARCOUNT:占16位(无符号)。指明Additional部分的包含的RR(Resource Record)数量。
Answer、Authority、Additional部分

Answer、Authority、Additional部分格式一致,每部分都由若干实体组成,每个实体即为一条RR,格式如下图所示:
image.png
  1. NAME:长度不定,可能是真正的数据,也有可能是指针(其值表示的是真正的数据在整个数据中的字节索引数),还有可能是二者的混合(以指针结尾)。若是真正的数据,会以0x00结尾;若是指针,指针占2个字节,第一个字节的高2位为11。
  2. TYPE:占2个字节。表示RR的类型,如A、CNAME、NS等,见以上RR介绍;
  3. CLASS:占2个字节。表示RR的分类,见以上RR介绍;
  4. TTL:占4个字节。表示RR生命周期,即RR缓存时长,单位是秒;
  5. RDLENGTH:占2个字节。指定RDATA字段的字节数;
    RDATA:即之前介绍的value,含义与TYPE有关,见以上RR介绍。
    DNS协议是工作在应用层的,运输层依赖的是UDP协议。

    用wireshark抓到的一个DNS包
    image.png

DNS的工作过程

当我们在一台客户端上通过浏览器访问someschool.edu/index.html...
的时候,DNS的工作过程是这样的:

1.在这台用户主机上运行有DNS的客户机
2.该浏览器从上述URL中抽取someschool.edu,发给本主机的DNS客户机
3.DNS客户机向DNS服务器发送一个包含主机名someschool.edu的请求
4.返回的响应报文里包含有目的IP地址,由浏览器获取并对该IP地址对应的HTTP服务器发起一个TCP连接。

DNS服务器的层次和类别

DNS服务器是有层次的,它可以分为三种类型:根DNS服务器顶级域(Top-Level Domain, TLD)DNS服务器权威DNS服务器,分别对应下面三个层次(从上至下)

image.png

根DNS服务器

因特网上有13个根DNS服务器, 其中大部分分布在北美洲,下面显示的是2012年的根DNS服务器分布图
image.png
顶级域DNS服务器

顶级域DNS服务器负责顶级域名,如com,org,edu和gov和所有国家的顶级域名如cn,uk,jp(edu教育机构域名,gov政府部门域名,org非盈利性的组织,com企业域名)

权威DNS服务器

在因特网上具有公共可访问的主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。
由组织机构的权威DNS服务器保存这些DNS记录,组织机构可以选择实现它自己的权威DNS服务器来保持这些记录,或者通过支付费用将这些记录存储在某个服务提供商的DNS服务器中。多数大学和大公司实现和维护它们自己基本的权威DNS服务器。

本地DNS服务器

还有一类比较重要的DNS服务器,叫做本地DNS服务器(local DNS server),它并不在上面说的DNS层次结构中。

本地DNS服务器的作用

●主机和本地DNS服务器一般是相邻的,当主机发出DNS请求的时候,该请求会被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中
●本地DNS服务器可以通过缓存主机名/IP地址,减少对相同主机名的查询而消耗的时间,改善延时和性能。

DNS的工作机理

DNS从实体的角度上看,就是一个分布式的数据库,它实现关键数据的查询和插入过程:

在DNS中查询记录

实际上,在DNS服务中,并不能通过对某个DNS服务器,通过仅仅一次的"请求/响应"就取得主机名/IP地址的查询结果。相反,需要多个不同的DNS服务器之间进行多次交互才能获取最终的查询结果

image.png

如上图所示例子,主机cis.poly.edu想知道主机gaia.cs.umass.edu的IP地址,并且主机gaia.cs.umass.edu的权威DNS服务器为dns.umass.edu

则DNS查询过程如下:
1.主机cis.poly.edu首先向它的本地DNS服务器dns.poly.edu发送一个DNS查询报文,该查询报文含有要求转换的主机名gaia.cs.umass.edu
2.本地DNS服务器dns.poly.edu将该报文转发至根DNS服务器。
3.该根DNS服务器注意到DNS服务器的edu前缀并向本地DNS服务器dns.poly.edu返回负责edu的顶级域DNS服务器的ip地址列表
4.本地DNS服务器接收到了返回的报文,根据报文中的IP地址,向该顶级域DNS服务器发送查询报文
5.顶级域DNS服务器注意到了umass.edu前缀,用包含权威DNS服务器的IP地址进行响应,该权威DNS服务器是负责马萨诸塞大学的dns.umass.edu
6.本地DNS服务器直接向主机dns.umass.edu重发查询报文
7.主机dns.umass.edu使用gaia.cs.umass.edu的IP地址作为响应,传回给本地DNS服务器
8.最终,本地DNS服务器将包含最终结果的查询报文转发给请求主机http://cis.poly.edu
总共8份报文

可以看到,这8份报文由以下两部分组成:

●请求主机和本地DNS服务器的请求/响应,共两份报文

●本地DNS服务器和根DNS服务器,顶级域DNS服务器,权威DNS服务器的请求响应,共6份报文


image.png

DNS查询方式

DNS查询分为递归查询和非递归查询
所谓递归查询是指接收请求的第一个域名服务器必须自始至终对请求进行处理,或向其它域名服务器进行请求且最终获得授权数据,并对请求进行应答。采用递归查询时,当所请求的域名信息在自身缓冲区时,域名服务器直接返回缓冲数据。此时递归查询请求标志无效。
所谓非递归查询是指接收请求的第一个域名服务器可以返回可靠数据(本身有时),也可以返回指向其它服务器的指针(相当于将查询的接力棒传给了最接近的域名服务器)。
主机的地址解析程序在查询时可以指定是否用递归还是非递归查询方式。非递归查询方式与递归查询方式相比响应速度快。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,200评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,526评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,321评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,601评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,446评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,345评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,753评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,405评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,712评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,743评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,529评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,369评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,770评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,026评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,301评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,732评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,927评论 2 336

推荐阅读更多精彩内容

  • 14.1 引言 域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换...
    张芳涛阅读 1,863评论 0 8
  • 先讨论许多应用协议都要使用的域名系统。在介绍了文件传送协议和远程登录协议后,就重点介绍万维网的工作原理及其主要协议...
    dmmy大印阅读 1,016评论 0 1
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,028评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,042评论 0 8
  • DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能...
    一直在努力hard阅读 4,590评论 3 19