title | category | tag | |
---|---|---|---|
DNS 域名系统详解(应用层) |
计算机基础 |
|
DNS(Domain Name System)域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS 要解决的是域名和 IP 地址的映射问题。
在实际使用中,有一种情况下,浏览器是可以不必动用 DNS 就可以获知域名和 IP 地址的映射的。浏览器在本地会维护一个hosts
列表,一般来说浏览器要先查看要访问的域名是否在hosts
列表中,如果有的话,直接提取对应的 IP 地址记录,就好了。如果本地hosts
列表内没有域名-IP 对应记录的话,那么 DNS 就闪亮登场了。
目前 DNS 的设计采用的是分布式、层次数据库结构,DNS 是应用层协议,基于 UDP 协议之上,端口为 53 。
DNS 服务器自底向上可以依次分为以下几个层级(所有 DNS 服务器都属于以下四个类别之一):
com
、org
、net
和edu
等。国家也有自己的顶级域,如uk
、fr
和ca
。TLD 服务器提供了权威 DNS 服务器的 IP 地址。世界上并不是只有 13 台根服务器,这是很多人普遍的误解,网上很多文章也是这么写的。实际上,现在根服务器数量远远超过这个数量。最初确实是为 DNS 根服务器分配了 13 个 IP 地址,每个 IP 地址对应一个不同的根 DNS 服务器。然而,由于互联网的快速发展和增长,这个原始的架构变得不太适应当前的需求。为了提高 DNS 的可靠性、安全性和性能,目前这 13 个 IP 地址中的每一个都有多个服务器,截止到 2023 年底,所有根服务器之和达到了 600 多台,未来还会继续增加。
以下图为例,介绍 DNS 的查询解析过程。DNS 的查询解析过程分为两种模式:
下图是实践中常采用的方式,从请求主机到本地 DNS 服务器的查询是递归的,其余的查询时迭代的。
现在,主机cis.poly.edu
想知道gaia.cs.umass.edu
的 IP 地址。假设主机cis.poly.edu
的本地 DNS 服务器为dns.poly.edu
,并且gaia.cs.umass.edu
的权威 DNS 服务器为dns.cs.umass.edu
。
cis.poly.edu
向本地 DNS 服务器dns.poly.edu
发送一个 DNS 请求,该查询报文包含被转换的域名gaia.cs.umass.edu
。dns.poly.edu
检查本机缓存,发现并无记录,也不知道gaia.cs.umass.edu
的 IP 地址该在何处,不得不向根服务器发送请求。edu
顶级域,因此告诉本地 DNS,你可以向edu
的 TLD DNS 发送请求,因为目标域名的 IP 地址很可能在那里。edu
的 TLD DNS 服务器地址,向其发送请求,询问gaia.cs.umass.edu
的 IP 地址。edu
的 TLD DNS 服务器仍不清楚请求域名的 IP 地址,但是它注意到该域名有umass.edu
前缀,因此返回告知本地 DNS,umass.edu
的权威服务器可能记录了目标域名的 IP 地址。dns.cs.umass.edu
。gaia.cs.umass.edu
向权威 DNS 服务器备案过,在这里有它的 IP 地址记录,权威 DNS 成功地将 IP 地址返回给本地 DNS。除了迭代式查询,还有一种递归式查询如下图,具体过程和上述类似,只是顺序有所不同。
另外,DNS 的缓存位于本地 DNS 服务器。由于全世界的根服务器甚少,只有 600 多台,分为 13 组,且顶级域的数量也在一个可数的范围内,因此本地 DNS 通常已经缓存了很多 TLD DNS 服务器,所以在实际查找过程中,无需访问根服务器。根服务器通常是被跳过的,不请求的。这样可以提高 DNS 查询的效率和速度,减少对根服务器和 TLD 服务器的负担。
DNS 的报文格式如下图所示:
DNS 报文分为查询和回答报文,两种形式的报文结构相同。
0
表示查询报文,1
表示回答报文;1 比特的”权威的“标志位(当某 DNS 服务器是所请求名字的权威 DNS 服务器时,且是回答报文,使用”权威的“标志);1 比特的”希望递归“标志位,显式地要求执行递归查询;1 比特的”递归可用“标志位,用于回答报文中,表示 DNS 服务器支持递归查询。DNS 服务器在响应查询时,需要查询自己的数据库,数据库中的条目被称为 资源记录(Resource Record,RR) 。RR 提供了主机名到 IP 地址的映射。RR 是一个包含了Name
, Value
, Type
, TTL
四个字段的四元组。
TTL
是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。
Name
和Value
字段的取值取决于Type
:
Type=A
,则Name
是主机名信息,Value
是该主机名对应的 IP 地址。这样的 RR 记录了一条主机名到 IP 地址的映射。Type=AAAA
(与 A
记录非常相似),唯一的区别是 A 记录使用的是 IPv4,而 AAAA
记录使用的是 IPv6。Type=CNAME
(Canonical Name Record,真实名称记录) ,则Value
是别名为Name
的主机对应的规范主机名。Value
值才是规范主机名。CNAME
记录将一个主机名映射到另一个主机名。CNAME
记录用于为现有的 A
记录创建别名。下文有示例。Type=NS
,则Name
是个域,而Value
是个知道如何获得该域中主机 IP 地址的权威 DNS 服务器的主机名。通常这样的 RR 是由 TLD 服务器发布的。Type=MX
,则Value
是个别名为Name
的邮件服务器的规范主机名。既然有了 MX
记录,那么邮件服务器可以和其他服务器使用相同的别名。为了获得邮件服务器的规范主机名,需要请求 MX
记录;为了获得其他服务器的规范主机名,需要请求 CNAME
记录。CNAME
记录总是指向另一则域名,而非 IP 地址。假设有下述 DNS zone:
NAME TYPE VALUE
--------------------------------------------------
bar.example.com. CNAME foo.example.com.
foo.example.com. A 192.0.2.23
当用户查询 bar.example.com
的时候,DNS Server 实际返回的是 foo.example.com
的 IP 地址。
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )