【计算机网络】2.5 DNS:因特网的目录服务
第二章第五节 因特网的目录服务
DNS(域名系统)提供了一种能运行主机名到IP地址转换的因特网目录服务;一方面,他让人能够记住如taobao.com这样的主机别名;另一方面,他提供给路由器可理解的IP地址,故DNS就是根据主机名查询对应的IP地址的服务。当然,这不是DNS的全部,接下来,我们将深入探讨DNS的技术细节。
Outline
Notes
## DNS提供的服务
- DNS的定义
- 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库
- 协议层面看,DNS是一个使得主机能够查询分布式数据库的应用层协议
- DNS运行在53号端口
- DNS具体提供的服务
- 提供了主机名到IP地址映射的转换服务
- 主机别名(host aliasing):有着复杂主机名的主机可以有一个或者多个别名,例如aaa.bbb.com的主机可能还会有aaa.com和www.bbb.com两个别名,在这种情况下,aaa.xxx.com叫做规范主机名(canonical hostname)。主机别名的特征是比规范主机名更容易记忆,DNS可以提供根据主机别名获取规范主机名的服务。
- 邮件服务器别名(canonical hostname):类比于主机别名,电子邮件应用程序可以调用DNS,对提供的邮件服务器别名进行解析,以获得该主机的规范主机名及其IP地址。
- 提供负载均衡(load distribution): 一般来说,繁忙访问的大型站点是分布在多台服务器上的,没太服务器均运行在不同的端系统上,每个都有着不同的IP地址。这个时候,主机名和IP地址就不是一一对应的关系,而是一个主机名对应一个IP地址的集合。 在大量的,连续的多次访问中,DNS在这些所有冗余的Web服务器之间循环分配负载以达到负载均衡的目的:在向这个主机名发出DNS请求的时候,服务器会用包含全部这些IP地址的报文进行回答,而客户机总向报文中排在最前的IP地址发出请求
## DNS工作机制概论
集中式DNS即指在因特网上只使用一个DNS服务器,不使用这样集中式DNS的原因是:集中式数据库完全没有可扩展能力,使用过程中会出现 单点失败问题、流量问题、距离问题、维护性问题;
【DNS服务器的层次和类别】
DNS服务器是有层次的,它可以分为三种类型:根DNS服务器, 顶级域(Top-Level Domain, TLD )DNS服务器和权威DNS服务器,分别对应下面三个层次(从上至下)

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

- 顶级域DNS服务器:顶级域服务器负责顶级域名,如com,org,net,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服务器,通过仅仅一次的“请求/响应”就取得主机名/IP地址的查询结果。相反,需要多个不同的DNS服务器之间进行多次交互才能获取最终的查询结果
(迭代)
(递归)
【DNS缓存】
- 为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用缓存技术。
- 原理:当一个DNS服务器接收一个DNS回答(例如,包含主机名到IP地址的映射)时,DNS服务器能将回答中的信息缓存在本地存储器。由于主机与主机名的IP地址映射决不是永久的,所以DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。
## DNS记录和报文
【DNS记录】
实现DNS分布式数据库的所有DNS服务器共同存储着资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射。下面是RR的基本格式:

- Type=A name 是主机名 Value是IP地址。 例如: (relay1.bar.foo.com, 145.37.93.126, A)
- Type=NS name 是域 (如 foo.com) Value是该域的权威名字服务器的IP地址。如(foo.com, dns.foo.com, NS)
- Type=MX Value是与name相联系的邮件服务器。如(mail.bar.foo.com)
- Type=CNAME Value是别名为name的主机对应的规范主机名。如(foo.com, relay1.bar.foo.com)
- 注:通过使用MX记录,一个公司的邮件服务器和其他服务器(如它的Web服务器)可以使用相同的别名
- 以图2-21为例,
- 如果一台DNS服务器是某个特定主机名的权威DNS服务器, 那么该DNS服务器一定会有一条包含该主机名的类型A记录,因为主机dns.umass.edu是主机gaia.cs.umass.edu的权威DNS服务器,所以dns.umass.edu中可能包含这样一条记录: (gaia.cs.umass.edu, 145.33.76.751, A)
- 如果一台DNS服务器是某个特定主机名的权威DNS服务器,那么该服务器将包含一条A记录和一条类型NS记录,例如edu顶级域DNS服务器并不是机gaia.cs.umass.edu的权威DNS服务器,那么它将包含
- 一条指向权威DNS服务器主机名的NS记录(umass.edu,dns.umass.edu,NS)
- 一条解释该权威DNS服务器IP地址的A记录(dns.umass.edu, 128.119.40.111, A)
【DNS报文】
DNS只有两种报文,即查询和回答报文,并且这两种报文有着相同的格式。下图是DNS报文格式:

- 前12字节是首部区域,其中包括标识符、标志、问题数、回答RR数、权威RR数、附加RR数共6个字段。标识符字段16bit,用于标识这个查询报文。
- 标识符会被复制到对查询的回答报文中,以便让客户机用它来匹配发送的请求和接收到的回答。标志字段含有若干标志,1bit的“查询,回答”标志位指出报文是查询报文(0)还是回答报文(1)。当某DNS服务器恰好是被请求主机的权威DNS服务器时,1bit的“权威的”标志位被放置在回答报文中。如果客户机希望DNS服务器执行递归查询,特设置1bit的“希望递归”标志位。如果该DNS服务器支持递归查询,在它的回答报文中会对1bit的“递归可用”标志位置位。在首部区域中,还有4个“数量”字段,分别给出了在首部后四类数据区域出现的数量。
- 问题区域包含正在进行查询的信息。该区域包括:名字字段,用于指出正在被查询的主机名字;类型字段,用于指出正在被询问的问题类型,例如是A类问鹿还是MX问题。
- 回答区域包含了对最初请求的名字的资源记录。每个记录中含有Type(如A记录、NS记录、CNAME记录、MX记录)字段、Value字段和TTL字段。前面讲过,一个主机名可以对应多个IP地址,所以在一个回答报文的回答区域中可以包含多条RR。权威区域包含了其他权威DNS服务器的记录
- 附加区域包含了其他一些有用的记录,例如,在一个MX请求的回答报文的回答区域包含了一条资源记录,给出了邮件服务器的规范主机名。该附加区域就可以包含一个类型A记录,提供对于该邮件服务器的规范主机名的IP地址。
【在DNS中插入记录】
- 假设你刚刚创建了一个网络乌托邦(Network Utopia)公司, 要做的第一件事情就是到注册登记机构注册域名(networkutopia.com), 注册的时候,需要向该机构提供你的权威DNS服务器的名字和IP地址,该注册机构将确保将一个NS记录和A记录被插入com顶级域DNS服务器中。
- 例如,假设我们的网络乌托邦(Network Utopia)公司的权威服务器的主机名和IP地址为dns1.networkutopia.com 和 128.119.40.111,则该注册机构将以下记录插入com顶级域DNS服务器
- (networkutopia.com, dns1.networkutopia.com,NS)
- (dns1.networkutopia.com, 128.119.40.111,A)
【计算机网络】2.5 DNS:因特网的目录服务的更多相关文章
- [计算机网络-应用层] DNS:因特网的目录服务
我们知道有两种方式可以识别主机:通过主机名或者IP地址.人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的.有着层次结构的IP地址.为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录 ...
- DNS:因特网的目录服务
作者:华科小涛,http://www.cnblogs.com/hust-ghtao/ 有两种方式来识别主机:通过主机名或IP地址.人们当然喜欢便于记忆的主机名,而路由器则喜欢定长的.有层次结构的IP地 ...
- 计算机网络之域名系统DNS
域名系统DNS 域名系统DNS(Domai NameSystem)是因特网使用的命名系统,用于把便于人们使用的机器名字转换为IP地址. 许多应用层软件经常直接使用域名系统,但计算机的用户只是间接而不是 ...
- 计算机网络Web应用层与运输层(HTTP/TCP)
应用层协议原理 Web和HTTP DNS:英特网的目录服务 运输层 面向连接的运输:TCP及拥塞原理 一.应用层协议原理 DNS域名解析: (用例:www.baidu.com)域名解析是网络请求的第一 ...
- 计算机网络自顶向下方法第2章-应用层(application-layer).2
2.4 DNS:因特网的目录服务 2.4.1 DNS提供的服务 DNS的定义 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库 协议层面看,DNS是一个使得主机能够查询分布式数据库的应用 ...
- [A Top-Down Approach][第二章 应用层]
[A Top-Down Approach][第二章 应用层] 标签(空格分隔): 未分类 网络应用是计算机网络存在的理由 首先从定义几个关键的应用层概念开始 应用程序所需要的网络服务,客户和服务器,进 ...
- 【计算机网络】 一个小白的DNS学习笔记
参考书籍 <计算机网络-自顶向下> 作者 James F. Kurose DNS的作用 DNS是因特网的目录服务 DNS是因特网的目录服务,它提供了主机名到IP地址映射的查询服务 ...
- 【计算机网络】 DNS学习笔记 (>﹏<)
参考书籍 <计算机网络-自顶向下> 作者 James F. Kurose DNS的作用 DNS是因特网的目录服务 DNS是因特网的目录服务,它提供了主机名到IP地址映射的查询服务 ...
- computer networking ---------DNS
[DNS]domain named system 域名解析系统,即相当于对www.baidu.com的类似的域名进行解析,对于人而言,记忆一些域名相比于记忆一些Ip地址来说简单的多,而对于计算机而言, ...
随机推荐
- I.MX6 i2c_data_write_byte ioctl error: I/O error
/************************************************************************* * I.MX6 i2c_data_write_by ...
- 并不对劲的bzoj5342:loj2554:uoj401:p4566: [Ctsc2018]青蕈领主
题目大意 \(T\)(\(T\leq100\))组询问 有\(1\)到\(n\)(\(n\leq50000\))这\(n\)个整数组成的一个排列 定义这个排列的一个子区间是"连续" ...
- CodeForces-652D:Nested Segments(树状数组+离散化)
You are given n segments on a line. There are no ends of some segments that coincide. For each segme ...
- 【POJ 1155】TELE
[题目链接] 点击打开链接 [算法] 树形DP f[i][j]表示以i为根的子树中,选了j个叶子节点,所能带来的最大收益 不难发现这就是一个经典的背包问题,不过是在树上做背包罢了 最后,判断f[1][ ...
- 思维导图js
http://baike.baidu.com/view/1469162.htm?fromenter=Mind+Maps
- SOLID总结(未完待续)
SOLID原则是著名的面向对像设计五原则,之所以要引入这些原则,是为了给以防止代码腐化而进行的重构活动定下切实可行的目标. 随着系统开发的进行,产品代码不可避免地会不断腐化,就算在开发过程中很好地应用 ...
- Ceph之PG数调整
1. PG介绍 PG, Placement Groups.CRUSH先将数据分解成一组对象,然后根据对象名称.复制级别和系统中的PG数等信息执行散列操作,再将结果生成PG ID.可以将PG看做一个逻辑 ...
- 转载别人的ognl
一.循环遍历集合 1.在jsp中引入标准函数声明<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix=" ...
- bzoj 4318: OSU!【期望dp】
思路有点眼熟啊,就是设l1记录长为x的极长全1串贡献x的答案,l2记录长为x的极长全1串贡献x^2的答案,f记录真正的答案 转移的话根据n-(n-1)=1,n^2-(n-1)^2=2n-1,n^3-( ...
- unsign 字段相减出现负数解决方法
在项目中做数据统计的时候需要用到几个字段相减得到想要的值,但是因为字段都是无符号,相减出现mysql 错误 BINGINT UNSIGNED VALUE .. 在c语言中两个无符号相减值为负数,该值 ...