计算机网络所有笔记链接
DNS:因特网的目录服务
在人类世界中,能够通过很多的方式进行标识,比如果通过名字或者是身份证号进行身份信息的标识。那么因特网上面的主机同人类是一样的,也是有不同的方式进行标识。主机的标识方式是主机名,例如www.baidu.com(这也是我们最常用的访问方式),但是这对于服务器具体的处理主机在因特网中的信息显得不是那么的友好了,那么服务器主要是通过 IP地址进行标识。
I
P
地
址
进
行
标
识
主
机
的
优
势
IP地址进行标识主机的优势
IP地址进行标识主机的优势
- 一个IP地址由4个字节组成(长度固定),并且有着严格的层次结构
- 在进行确认的时候,能够获取到地址越来越具体的信息
DNS提供的服务
上文讲述到人类主要是通过 主机名进行标识,但是路由器喜欢 定长的、有着层次结构的IP地址 ,那么为了进行折中过渡,我们就需要一种能够进行 主机名到 IP地址转换的目录服务 => 域名系统(DNS) 可以说是去千呼万唤使出来了。主要任务:
- 一个由分布式的DNS服务器实现的分布式数据库‘
- 一个使得主机能够查询分布式数据库的应用层协议
DNS协议运行在UDP上,使用53号端口
DNS通常是由其他应用层协议所使用的,包括HTTP、SMTP和FTP协议,将用户提供的主机名解析为IP地址(就是人用主机名进行搜索,需要转换为路由器认识的IP地址),举个栗子:
一个主机访问度娘页面,为了使用者的主机能够将一个HTTP请求报文发送到Web服务器www.baidu.com,这个用户的主机就必须获得 www.baidu.com的 IP地址
- 这一台主机上面运行着DNS应用的客户端
- 浏览器从URL中抽出 主机名:www.baidu.com,将主机名传送到DNS应用客户端
- DNS客户向DNS服务器发送 包含主机名的请求
- DNS收到包含有 主机名对应IP地址的回答报文
- 浏览器知道IP地址了,能够向位于该IP地址80端口的服务进程发起TCP连接
上面栗子可以看出来,如果想要通过主机名就可以直接进行访问的话必须要有DNS应用进行主机名到IP地址之间的转换,这就带来了 额外的时延
除了进行主机名到IP地址之间的转换之外,DNS还有一些服务:
-
主机别名 :有着复杂主机名的主机可以拥有多个别名(主机别名肯定是相对来说更加容易记忆的),应用程序可以调用DNS来获取主机别名对应的规范主机名以及主机的IP地址 -
邮件服务器别名:电子邮箱也是可以像主机一样存在更加容易记忆的别名,电子邮件应用程序可以调用DNS对提供的主机别名进行解析,获得主机的 规范主机名和 IP地址 -
负载分配: DNS用于冗余的服务器之间进行 负载分配, 比较繁忙的站点被冗余的分布在多台服务器上面(对应了多个IP地址),因此一个 规范主机名和 一个 IP地址集群相联系,IP地址集群被存储于DNS数据库中。 当客户对映射到某个地址集合的名字发出DNS请求的时候,该服务器用IP地址的整个集合进行响应,但是在每个回答中循环地址次序(轮流出现在最前面),从而实现了负载分配。DNs循环同样也是可以用于邮件服务器中
DNS工作机理概述
假设运行在用户主机上的某个应用程序需要将主机名转换为IP地址。
- 应用程序调用DNS的客户端,将主机名发送给DNS客户端
- 用户主机的DNS向网络发送了一个DNS的查询报文(所有的DNS请求和回答报文使用UDP数据报经过端口53发送)
- 经过若干毫秒到若干秒的时延后,用户主机上的DNS接收到回答报文(包含了主机名对应的映射)
- 映射的结果传递到了调用DNS的应用程序
DNS的一种简单的设计是采用集中式DNS服务器,这个服务器包含了所有的映射。问题:
- 单点故障:如果这个DNS服务器崩溃了,整个互联网就瘫痪了
- 通信容量: 单个DNS服务器要承担全球几十亿的查询申请
- 远距离的集中式数据库:如果服务器在美国,我们中国想使用的话要经历严重的时延
- 维护:维护单个庞大的服务器是十分棘手的、难以维护
总的来说就是单一DNS服务器上面运行集中式数据库完全没有 可拓展能力
分布式、层次数据库
为了解决拓展性问题,DNS使用的服务器以层次方式组织
- 根DNS服务器:根名字服务器提供TLD服务器的IP地址
- 顶级域DNS服务器:TLD服务器提供了权威DNS服务器的IP地址
- 权威DNS服务器:机构或者是组织的权威DNS服务器收藏了DNS记录
本地域名解析服务器
每次进行层次的查询所得到的结果都是要返还给本地域名服务器的,因此本地域名服务器被当做是代理服务器,比如说一个学校使用DNS服务需要填写DNS服务器的地址(也就是本地域名解析服务器的地址),所有的学生都是需要通过这个域名解析服务器来进行DNS服务的
DNS查询示例(迭代查询)
所有的查询都是需要通过本地域名解析服务器进行 代理查询的,通过代理服务器进行层次的查询(一层层的进行缩小最终的范围)
过程就如同是1.我不知道具体位置但是我知道你是中国的2.我不知道具体位置,但是我知道你是XX省的 3.我不知道具体位置,但是我知道你是XXX市的…直到精进到最终的IP地址
过程如图就是每一步都是通过本地域名解析服务器进行代理,逐层的向下缩减
递归查询
递归查询就是说:本地域名解析服务器不一个个问了,我查询的那个服务器你就必须告诉我最终的IP地址是什么
DNS缓存
因为缓存,除了少数的DNS查询以外,根服务器都被绕过了
DNS记录和报文
DNS服务器存储了 资源记录(RR),RR提供了主机名到IP地址的映射
资源记录是一个包含了下列字段的4元组:
(name, Value, Type, TTL)
其中TTL是该记录的生存时间,决定了资源记录应当从缓存中的删除时间
Name和Value的值取决于Type:
DNS报文的格式
注册域名示例
插入两条记录(包含上面讲述的那些服务器和IP地址):类型分别是为NS和类型为A的记录,将主机名、IP地址、域、权威DNS服务器囊括了
同时需要再添加Type A和Type MX的记录用于邮件
|