课件:域名系统DNS

  1. DNS是域名解析系统,用作ip地址和域名之间的解析
  2. 是现阶段互联网必不可少的协议
  3. 尤其是ipv6的部署,DNS解析显得尤为重要
  4. Dns本质协议是TCP/UDP 端口号53的四层协议
  5. 普通解析过程用UDP,递归解析的时候用TCP
  6. DNS服务器的gongji行为也是危害性比较大的gongji行为,需要重点防护

DNS协议

我们之前已经了解过ARP协议。

如果说ARP协议是用来将IP地址转换为MAC地址,那么DNS协议则是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。

我们都知道,TCP/IP中使用的是IP地址和端口号来确定网络上某一台主机上的某一个程序,不免有人有疑问,为什么不用域名来直接进行通信呢?

1. 因为IP地址是固定长度的,IPv4是32位,IPv6是128位,而域名是变长的,不便于计算机处理。

2. IP地址对于用户来说不方便记忆,但域名便于用户使用,例如www.baidu.com这是百度的域名。

总结一点就是IP地址是面向主机的,而域名则是面向用户的。

hosts文件

域名和IP的对应关系保存在一个叫hosts文件中。

最初,通过互联网信息中心来管理这个文件,如果有一个新的计算机想接入网络,或者某个计算IP变更都需要到信息中心申请变更hosts文件。其他计算机也需要定期更新,才能上网。

但是这样太麻烦了,就出现了DNS系统。


DNS系统

一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系

如果新计算机接入网络,将这个信息注册到数据库中

用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址

我们可以通过命令查看自己的hosts文件:

这里写图片描述

在域名解析的过程中仍然会优先查找hosts文件的内容。

DNS理论知识

一、DNS域名结构

1、域名的层次结构

域名系统必须要保持唯一性。

为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法:

1. 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成

2. 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)

3. 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。

4. 级别最低的域名写在左边,级别最高的域名写在右边。

域名服务主要是基于UDP实现的,服务器的端口号为53。

关于域名的层次结构,如下图所示:


这里写图片描述

DNS域名解析系统-笔记_DNS

eg :我们熟悉的,www.baidu.com

1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。

2. baidu: 二级域名,指公司名。

3. www: 只是一种习惯用法。


2、域名的分级

域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。

如下图所示:

这里写图片描述

DNS域名解析系统-笔记_IP_02

其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。


国家顶级域名 中国:cn, 美国:us,英国uk…

通用顶级域名 com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织…

反向域名 arpa,用于PTR查询(IP地址转换为域名)

二、域名服务器

域名是分层结构,域名服务器也是对应的层级结构。

有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。


由高向低进行层次划分,可分为以下几大类:


分类 作用

根域名服务器 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助

顶级域名服务器 负责管理在该顶级域名服务器下注册的二级域名

权限域名服务器 负责一个区的域名解析工作

本地域名服务器 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器

注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区

我们需要注意的是:

1. 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器

2. 每一级域名服务器都知道下级域名服务器的IP地址

3. 为了容灾, 每一级至少设置两个或以上的域名服务器


三、域名解析过程

域名解析总体可分为一下过程:

(1) 输入域名后, 先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据.

(2) 如果没有, 就向上级域名服务器进行查找, 依次类推

(3) 最多回溯到根域名服务器, 肯定能找到这个域名的IP地址

(4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的IP地址缓存起来, 可以加速查找过程

具体可描述如下:

1. 主机先向本地域名服务器进行递归查询

2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询

3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址

4. 本地域名服务器向顶级域名服务器进行查询

5. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址

6. 本地域名服务器向权限服务器进行查询

7. 权限服务器告诉本地域名服务器所查询的主机的IP地址

8. 本地域名服务器最后把查询结果告诉主机

如图所示:

DNS域名解析系统-笔记_域名服务器_03


这里写图片描述

上文我们提出了两个概念:递归查询和迭代查询

(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机

(2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。


通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。

迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。



A记录

A(Address)记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置域名的子域名。通俗来说A记录就是服务器的IP,域名绑定A记录就是告诉DNS,当你输入域名的时候给你引导向设置在DNS的A记录所对应的服务器。 简单的说,A记录是指定域名对应的IP地址。

NS记录

NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。 您注册域名时,总有默认的DNS服务器,每个注册的域名都是由一个DNS域名服务器来进行解析的,DNS服务器NS记录地址一般以以下的形式出现: ns1.domain.com、ns2.domain.com等。 简单的说,NS记录是指定由哪个DNS服务器解析你的域名。

MX记录

MX(Mail Exchanger)记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。例如,当Internet上的某用户要发一封信给 user@mydomain.com 时,该用户的邮件系统通过DNS查找mydomain.com这个域名的MX记录,如果MX记录存在, 用户计算机就将邮件发送到MX记录所指定的邮件服务器上。

CNAME记录

CNAME(Canonical Name )别名记录,允许您将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为 “host.mydomain.com”(A记录),它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL, 这两个别名的全称就“www.mydomain.com”和“mail.mydomain.com”,实际上他们都指向 “host.mydomain.com”。

TXT记录

TXT记录,一般指某个主机名或域名的说明,如:admin IN TXT "管理员, 电话:XXXXXXXXXXX",mail IN TXT "邮件主机,存放在xxx , 管理人:AAA",Jim IN TXT "contact: abc@mailserver.com",也就是您可以设置 TXT 内容以便使别人联系到您。 TXT的应用之一,SPF(Sender Policy Framework)反垃圾邮件。SPF是跟DNS相关的一项技术,它的内容写在DNS的TXT类型的记录里面。MX记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟MX相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。SPF的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件。例如:当邮件服务器收到自称发件人是spam@gmail.com的邮件,那么到底它是不是真的gmail.com的邮件服务器发过来的呢,我们可以查询gmail.com的SPF记录,以此防止别人伪造你来发邮件。

TTL值

TTL(Time-To-Live)原理:TTL是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。 简单的说,TTL就是一条域名解析记录在DNS服务器中的存留时间。当各地的DNS服务器接受到解析请求时,就会向域名指定的NS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向NS服务器发出请求,而是直接返回刚才获得的记录,而这个记录在DNS服务器上保留的时间,就是TTL值。

TTL值设置的应用:

一是增大TTL值,以节约域名解析时间,给网站访问加速。 一般情况下,域名的各种记录是极少更改的,很可能几个月、几年内都不会有什么变化。我们完全可以增大域名记录的TTL值让记录在各地DNS服务器中缓存的时间加长,这样在更长的一段时间内,我们访问这个网站时,本地ISP的DNS服务器就不需要向域名的NS服务器发出解析请求,而直接从缓存中返回域名解析记录。 二是减小TTL值,减少更换空间时的不可访问时间。 更换空间99.9%会有DNS记录更改的问题,因为缓存的问题,新的域名记录在有的地方可能生效了,但在有的地方可能等上一两天甚至更久才生效。结果就是有的人可能访问到了新服务器,有的人访问到了旧服务器。仅仅是访问的话,这也不是什么大问题,但如果涉及到了邮件发送,这个就有点麻烦了,说不定哪封重要信件就被发送到了那已经停掉的旧服务器上。

为了尽可能的减小这个各地的解析时间差,合理的做法是: 第一步,先查看域名当前的TTL值,我们假定是1天。 第二步,修改TTL值为可设定的最小值,可能的话,建议为1分钟,就是60。 第三步,等待一天,保证各地的DNS服务器缓存都过期并更新了记录。 第四步,设置修改新记录,这个时候各地的DNS就能以最快的速度更新到新的记录。 第五步,确认各地的DNS已经更新完成后,把TTL值设置成您想要的值。 一般操作系统的默认TTL值如下: TTL=32 Windows 9x/Me TTL=64 LINUX TTL=128 Windows 200x/XP TTL=255 Unix

PTR值

PTR是pointer的简写,用于将一个IP地址映射到对应的域名,也可以看成是A记录的反向,IP地址的反向解析。 PTR主要用于邮件服务器,比如邮箱AAA@XXX.com给邮箱BBB@yahoo.com发了一封邮件,yahoo邮件服务器接到邮件时会查看这封邮件的头文件,并分析是由哪个IP地址发出来的,然后根据这个IP地址进行反向解析,如果解析结果对应XXX.com的IP地址就接受这封邮件,反之则拒绝接收这封邮件。