DNS解析原理

内部公开▲DNS 域名解析原理(转帖)从应用的角度上看,对DNS 的访问是通过一个地址解析器(resolver )来完成的。在Unix 该解析器主要是通过两个库函数gethostbyname(3) 和

内部公开▲

DNS 域名解析原理(转帖)

从应用的角度上看,对DNS 的访问是通过一个地址解析器(resolver )来完成的。在Unix 该解析器主要是通过两个库函数gethostbyname(3) 和gethostbyaddr( 3 )来访问 的,它们在编译应用程序时与应用程序连接在一起。前者接收主机名字返回I P地址,而后者 接收IP 地址来寻找主机名字。解析器

通过一个或多个名字服务器来完成这种相互转换。

DNS 基础

DNS 的名字空间和Unix 的文件系统相似,也具有层次结构。

每个结点(如noao 就是一个节点)有一个至多63个字符长的标识。这颗树的树根是没有任何标识的特殊结点。命名标识中一律不区分大写和小 写。命名树上任何一个结点的域名就是将从该结点到最高层的域名串连起来,中间使用一个点“.”分隔这些域名(注意这和Unix 文件系统路径的形成不同,文 件路径是由树根依次向下的形成的)。域名树中的每个结点必须有一个唯一的域名,但域名树中的不同结点可使

用相同的标识。

以点“.”结尾的域名称为绝对域名或完全资格的域名FQDN (Full Qualified Domain Name),例如sun.tuc.noao.edu .。如果一个域名不以点结尾,则认为该域名是不完全的。 如何使域名完整依赖于使用的DNS 软件。如果不完整的域名由两个或两个以上的标号组成, 则认为它是完整的;或者在该域名的右边加

入一个局部后缀。例如域名s u n通过加上局部后缀.tuc.noao.edu. 成为完整的。

所以设置 DNS是要注意 完全资格的域名 和不完整的域名 的区别,很多 DNS服务器的控制面板都是这样的,比如eNom 的MX 设置 需要在 域名后 加一个局部后缀 "." 使其成为 FQDN 未命名树

根 ()

顶级域 arpa com edu gov int mil net org biz info ae..us..zw

顶级域名分为三部分:

1)arpa是一个用作地址到名称转换的特殊域

2)3字符长的普通域(组织域)

3)2字符的国家域(地理域)

解析

正向解析,IPv4的地址正向解析的资源记录是"A"

反向解析,IPv4反向解析的记录是“PTR”(指针记录)

DNS 中一直难于理解的部分就是指针查询方式,即给定一个IP 地址,返回与该地址对应的域名。 首先 查看一下 顶级域 arpa,及它下面的in-addr 域。当一个组织加入Internet ,并获得DNS 域名空间的授权,如noao.edu ,则它们也获得了对应IP 地址 的in-addr.arpa 域名空间的授权。在noao.edu 这本文所有信息为中兴通讯股份有限公司内部信息,未经允许,不得外传 第1页,共7页

,

内部公开▲ 个例子中,它是网络号为140.252的B 类网络。在DNS 树中结点in- addr.arpa的下一级必须是该IP 地址的第一字节(例中为140),再下一级为该IP 地址的下一个字节(252),依此类推。但应牢记的是DNS 名 字是由DNS 树的底部逐步向上书写的。这意味着对于IP 地址为140.252.13.33的sun 主机,它的DNS 名字为 33.13.252.140.in-addr.arpa。必须写出4字节的IP 地址,因为授权的代表是基于网络号: A类地址是第一字节,B 类地址是第一、二字节,C 类地址则是第一、二、三字节。IP 地址的第一字节一定位于in-addr 的下一级,但FQDN 却是自树底 往上书写的。如果FQDN 由顶往下书写,则这个IP 地址的DNS

名字将是arpa.in-addr.140.252.13.33,而它所对应的域名将是 edu.noao.tuc.sun。

如果DNS 树中没有独立的分支来处理这种地址—名字的转换,将无法进行这种反向转换,除非从树根开始依次尝试每个顶级域。毫不夸张地说, 这将需要数天或数周的时间。虽然反写IP 地址和特殊的域名会造成某些混乱,但in-addr 解决方案仍是一种最有效的方式。只有在使用host 程序或 tcpdump程序直接同DNS 打交道时,才会担心in-addr 域和反写IP 地址影响我们。从应用的角度上看,正常的名字解析器函数( gethostbyaddr )将接收一个IP 地址并返回对应主机的有关信息。反转这些字节和添加in-addr.arpa

域均由该函数自动完成。

在反向解析的命名空间中, 所有的 IP 组成一个叫作 arpa.in-addr 的 顶级域, 然后再按 IP 层层细分 比如 166.111.4.100 ,我们可以在负责 4.1111.166.in-addr.arpa(注意是过来写, 因为 顶级域 要在最后

面) 这个 子域名 的机器上, 可以查到其 映射表 上有一个记录是 100

在PHP 中也有两个跟C 中一模一样的函数可以调用

运行这段脚本,就可以 显示 www.tsinghua.edu.cn 哈哈,这是清华大学的web 服务器

实际过程放大到这里: Asking e.root-servers.net for 100.4.111.166.in-addr.arpa PTR record:

e.root-servers.net says to go to figwort.arin.net.

(zone: 166.in-addr.arpa.)

Asking figwort.arin.net. for 100.4.111.166.in-addr.arpa PTR record:

figwort.arin.net [192.42.93.32] says to go to dns.tsinghua.edu.cn.

(zone: 111.166.in-addr.arpa.)

Asking dns.tsinghua.edu.cn. for 100.4.111.166.in-addr.arpa PTR record:

dns.tsinghua.edu.cn [166.111.8.30] says to go to dns.cic.tsinghua.edu.cn.

(zone: 4.111.166.in-addr.arpa.)

Asking dns.cic.tsinghua.edu.cn. for 100.4.111.166.in-addr.arpa PTR record:

Reports www.tsinghua.edu.cn. [from 166.111.4.5]

Answer:

本文所有信息为中兴通讯股份有限公司内部信息,未经允许,不得外传 第2页,共7页

,

内部公开▲ 166.111.4.100 PTR record: www.tsinghua.edu.cn. [TTL 86400s] [A=166.111.4.100]

不过gethostbyaddr 很难由IP 得出主机名,这是因为电信(比如上海电信) 他们没有作 各个IP 对于的主机名,其实的确很难作的,对于流动性很强的IDC 机房和ADSL 用户IP ,的确没有对应的主机名

比如,我们查im286.com

Asking e.root-servers.net for 211.251.152.61.in-addr.arpa PTR record:

e.root-servers.net says to go to ns1.apnic.net.

(zone: 61.in-addr.arpa.)

Asking ns1.apnic.net. for 211.251.152.61.in-addr.arpa PTR record:

ns1.apnic.net [202.12.29.25] says to go to nns.sta.net.cn.

(zone: 152.61.in-addr.arpa.)

Asking nns.sta.net.cn. for 211.251.152.61.in-addr.arpa PTR record:

nns.sta.net.cn [61.152.82.18] says to go to ns2.edatahome.com.

(zone: 211.251.152.61.in-addr.arpa.)

Asking ns2.edatahome.com. for 211.251.152.61.in-addr.arpa PTR record:

ns2.edatahome.com [202.109.72.188] says to go to ns1.edatahome.com.

(zone: 211.251.152.61.in-addr.arpa.)

Asking ns1.edatahome.com. for 211.251.152.61.in-addr.arpa PTR record:

ns1.edatahome.com [202.109.72.189] says to go to ns.sta.net.cn.

(zone: 152.61.in-addr.arpa.)

Asking ns.sta.net.cn. for 211.251.152.61.in-addr.arpa PTR record:

ns.sta.net.cn [202.96.199.133] says to go to ns2.edatahome.com.

(zone: 211.251.152.61.in-addr.arpa.)

晕倒了,ns.sta.net.cn 和ns1.edatahome.com 和ns2.edatahome.com 这3个白痴相互推诿

就是说找不到 61.152.251.211 对应的主机名了

本文所有信息为中兴通讯股份有限公司内部信息,未经允许,不得外传 第3页,共7页

,

内部公开▲ 有两点需要说明的是: 1.负责正向解析(forward mapping) 和 反向解析(reverse mapping) 的DNS 服务器不一定是同一台 即使是同一台, 如果不注意的話, 两边的內容可能也可能有不匹配的情况

2.domain 与ip 子网并没有一对一的关系 如清华大学的 domain是tsinghua.edu.cn , 但是它的IP

子网有多个,166.111是最古老的一个而已

zone

谈到了解析和域名之后,应该说说zone 了。

所谓 zone 就是把一个 domain 扣掉 分给下层域 负责的部份, 剩下来的就是 zone.就是一个

domain ,可能会将sub domain授权给下级的 DNS服务器去解析。 准确的说,一个独立管理的DNS 子树称为一个区域( zone )。一个常见的区域是一个二级域,如 noao.edu。许多二级域将它们的区域划分成更

小的区域。例如,大学可能根据不同的系来 划分区域,公司可能根据不同的部门来划分区域。 如果你熟悉Unix 的文件系统,会注意到DNS 树中区域的划分同一个逻辑Unix 文件 系统到物理磁盘分区的划分很相似。正如无法确定 区域的具体位置,我们也 不知道一个Unix 文件系统中的目录位于哪个

磁盘分区。

一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新 系统加入到一个区域中时,该区域的DNS 管理者为该新系统申请一个域名和一个IP 地址,并 将它们加到名字服务器的数据库中。这就是授权机构存在的必要性。例如,在一个小规模的 大学,一个人就能完成每次新系统的加入。但对一个规模较大的大学来说,这一工作必须被 专门委派的机构(可能是系)来完成,因为一个人

已无法维持这一工作。

一个名字服务器负责一个或多个区域。一个区域的管理者必须为该区域提供一个主名字 服务器和至少一个辅助名字服务器。主、辅名字服务器必须是独立和冗余的,以便当某个名 字服务器发生故障时不会

影响该区域的名字服务。

主、辅名字服务器的主要区别在于主名字服务器从磁盘文件中调入该区域的所有信息, 而辅名字服务器则从主服务器调入所有信息。我们将辅名字服务器从主服务器调入信息称为 区域传送。 当一个新主机加入一个区域时,区域管理者将适当的信息(最少包括名字和IP 地址)加 入到运行在主名字服务器上的一个磁盘文件中,然后通知主名字服务器重新调入它的配置文 件。辅名字服务器定时(通常是每隔3小时)向主名字服务器询问是否有新数据。如果有新数 据,则通过区域传送方式获得新数据。不要扯远了,我们接着说zone, 对于BIND (世界上最常用的DNS 程序),一个zone 就对应着一个

/etc/namedb目录下的文件

比如localhost 的zone 文件 localhost

1|$TTL 3600

2|@ IN SOA strider.diverge.org. hostmaster.diverge.org. (

3| 1 ; Serial

本文所有信息为中兴通讯股份有限公司内部信息,未经允许,不得外传 第4页,共7页

,

内部公开▲

4| 8H ; Refresh

5| 2H ; Retry

6| 1W ; Expire

7| 1D) ; Minimum TTL

8| IN NS localhost.

9|localhost. IN A 127.0.0.1

10| IN AAAA ::1

我们作DNS 查询时的信息,就是从Zone 文件里取得的

附:几个有名的DNS 程序 BIND (Berkeley Internet Name Domain)

(这个网站大家应该都知道吧,很多root server就是他们架设的,北京就有)

DJBDNS (Dan J Bernstein's DNS implementation)

MaraDNS

NSD (Name Server Daemon)

PowerDNS

(这个也和有名,相信很多人还用这他们的免费的DNS 服务吧)

TinyDNS (近来也很流行的开源DNS 软件)

Root Server

当一个名字服务器没有请求的信息时,它将如何处理?它必须与其他的名字服务器联系。 (这正是DNS 的分布特性)。然而,并不是每个名字服务器都知道如何同其他名字服务器联系。 相反,每个名字服务器必须知道如何同根的名字服务器联系。1993年4月时有8个根名字服务 器,所有的主名字服务器都必须知道根服务器的IP 地址(这些I P地址在主名字服务器的配置 文件中,主服务器必须知道根服务器的IP 地址,而不是它们的域名)。根服务器则知道所有二 级域中的每个授权名字服务器的名字和位置(即IP 地址)。这意味着这样一个反复的过程:正 在处理请求的名字服务器与根服务器联系,根服务器告诉它与

另一个名字服务器联系。

本文所有信息为中兴通讯股份有限公司内部信息,未经允许,不得外传 第5页,共7页

,

内部公开▲

你可以通过匿名的F T P获取当前的根服务器清单。具体是从ftp.rs.internic.net (在/domain这个目

录下) 或nic.ddn.mil 获取文件netinfo/root-servers.txt。

比如我国的顶级域名CN 的根服务器

是 CN. NS NS.CNC.AC.CN. CN. NS DNS2.CNNIC.NET.CN. CN. NS NS.CERNET.NET. CN. NS DNS3.CNNIC.NET.CN. CN. NS DNS4.CNNIC.NET.CN. CN. NS DNS5.CNNIC.NET.CN. COM的根服务器是 COM. NS A.GTLD-SERVERS.NET. COM. NS G.GTLD-SERVERS.NET. COM. NS H.GTLD-SERVERS.NET. COM. NS C.GTLD-SERVERS.NET. COM. NS I.GTLD-SERVERS.NET. COM. NS B.GTLD-SERVERS.NET. COM. NS D.GTLD-SERVERS.NET. COM. NS L.GTLD-SERVERS.NET. COM. NS F.GTLD-SERVERS.NET. COM. NS J.GTLD-SERVERS.NET. COM. NS K.GTLD-SERVERS.NET. COM. NS E

.GTLD-SERVERS.NET. COM. NS M.GTLD-SERVERS.NET.

DNS 的一个基本特性是使用超高速缓存。即当一个名字服务器收到有关映射的信息(主 机名字到IP 地址)时,它会将该信息存放在高速缓存中。这样若以后遇到相同的映射请求, 就能直接使用缓存中的结

果而无需通过其他服务器查询。

资源记录RR

A 一个A 记录定义了一个IP 地址,它存储32bit 的二进制数。 PTR 指针记录用于指针查询。IP 地址被看作是in-addr.arpa 域下的一个域名(标识符串)。 CNAME 这表示“规范名字(canonical name)”。它用来表示一个域名(标识符串),而 有规范名字的域名通常被称为别名(alias)。某些FTP 服务器使用它向其他的系统提供一个易于记忆的别名。 例如,gated 服务器可通过匿名FTP 从gated.cornell.edu 获得,但这里并没有叫做gated 的系统,这仅是为其他系统提供的别名。其他 系统的规范名为gated.cornell.edu 。

HINFO 表示主机信息:包括说明主机CPU 和操作系统的两个字符串。并非所有的站 点均提供它们

系统的HINFO 记录,并且提供的信息也可能不是最新的。

MX 邮件交换记录,用于以下一些场合: (1)一个没有连到Internet 的站点能将一个连到Internet 的站点作为它的邮件交换器。这两个站点能够用一种交替的方式交 换到达的邮件,而通常使用的协议是UUCP 协议。 (2)MX 记录提供了一种将无法到达其目的主机的邮件传送到一个替代主机的方式。 (3M X记录允许机构提供供他人发送邮件的虚拟主机,如c s . u n i v e r s i t y . e d u,即使这样的主机 名根

本不存在。 (4)防火墙网关能使用MX 记录来限制外界与内部系统的连接。

许多不能与Internet 连接的站点通过UUCP 链路与一个连接在Internet 上的站点 如UUNET 相连接通过MX 记录能使用user@host这种邮件地址向那个站点发送电子邮件。例如,一个假想的域foo.com 可

能有下面的MX 记录: foo.com MX relay1.UU.NET foo.com MX relay2.UU.NET

MX 记录能被连接在互联网主机中的邮件处理器使用。在这个例子中,其他的 邮件处理器则被告知“如

果有邮件要发往user@foo.com,就将邮件送到 relay1.uu.net或relay2.uu.net 。”

每个MX 记录被赋于一个16bit 的整数值,该值称为优先值。如果一个目的主 机有多个MX 记录,它

们按优先值由小到大的顺序使用。

另一个MX 记录的例子是处理主机脱机工作或不可达的情况。邮件处理器仅在 无法使用TCP 与目的

主机连接时才使用MX 记录。

本文所有信息为中兴通讯股份有限公司内部信息,未经允许,不得外传 第6页,共7页

,

内部公开▲ NS 名字服务器记录。它说明一个域的授权名字服务器。它由域名表示(符号串)

SOA Start of Authority. 定义zone 的名称, 联系e-mail 和刷新时间等等

授权

每个domain 都可因实际需求再细分成许多 sub domain. 上层的 domain 可以将其分出的某

个 sub domain 的 domain name 与 IP mapping 交由另一部机器管理,

這个动作称之为 delegation(授权)

当我要搜寻 g1.cs.tsinghua.edu.cn 主机时,就需要向管理 .cs.tsinghua.edu.cn 这个网域的那部机器

查询才行,而要查询 .cs.tsinghua.edu.cn

则需要在 .tsinghua.edu.cn 上面询问才可以!这是因为上层DNS 主机 .tsinghua.edu.cn 已经

将 .cs.tsinghua.edu.cn 这个网域的管理权 "授权" 给

ns1.cs.tsinghua.edu.cn 这部机器,当有人要查询 .cs.tsinghua.edu.cn 这个网域的主机IP

时, .tsinghua.edu.cn 将会把查询的任务直接转给

ns1.cs.tsinghua.edu.cn 去管理了!从此, .tsinghua.edu.cn 这个网域的管理主机,将不会再接

管 cs.tsinghua.edu.cn 这个网域的名称管理

我们有时候用nslookup 查询一个A 记录时,DNS 通常返回

Non-authoritative answer: Name: www.im286.com Address: 61.152.251.211

这多半是因为 A记录在Cache 中的缘故

本文所有信息为中兴通讯股份有限公司内部信息,未经允许,不得外传 第7页,共7页

标签: