计算机网络自学笔记:DNS

因特网上的主机和人类一样,也可以使用多种方式进行识别。主机的一种识别方法是用它的主机名,这些名字便于记忆,也乐于被人们接受。主机也可以使用所谓IP地址进行识别。一个IP地址由4个字节组成,并有着严格的层次结构。我们说IP地址具有层次结构,是因为从左至右它包含了越来越详细的关于主机的位置息。

人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的、有着层次结构的IP地址。因此需要一种能进行主机名到IP地址转换的目录服务,这就是域名系统。

1DNS提供的服务

DNS是:

1:一个由分层的DNS服务器实现的分布式数据库;

2:一个允许主机查询分布式数据库的应用层协议。

DNS服务器通常是运行BIND软件服务器机器。DNS协议运行在UDP之上,使用53号端口。

DNS用于将用户提供的主机名解析为IP地址。例如当某个用户主机上的一个浏览器请求某个网页时,为了使用户的HTTP请求消息发送到Web服务器,用户主机首先必须获得Web服务器的IP地址。

在前面介绍的Socket编程接口中有专门的函数如gethostbyname()允许程序发起一个主机名到IP地址的查询。在Windows系统中专门有一个服务叫DNSClient完成DNS查询工作(控制面板-管理工具-服务中可见)。

除了进行主机名到lP地址的转换外,DNS还提供了一些重要的服务:

.主机别名

主机别名比主机规范名更容易记忆,例如http://www.mit.edu,其真实的服务器名字(主机规范名)并不是http://www.mit.edu,大家可以用ping命令发现它真实的名字。

.邮件服务器别名

一个单位或域中负责邮件收发的主机。

.负载均衡

DNS也可以用于在冗余的服务器之间进行负载分配。可以配置很多冗余的Web服务器,一个IP地址集合对应于同一个规范主机名。DNS数据库中存储着这些IP地址集合。当客户机为映射到这个IP地址集合的名字发出一个DNS请求时,该服务器用包含全部这些地址的消息进行回答,但在每个回答中轮回这些地址排放的顺序。因为客户机通常总是向IP地址排在最前面的服务器发送HTTP请求消息,所以就在所有这些冗余的Web服务器之间均衡分配负载。这是一种非常传统的负载均衡技术。

2工作机理概述

假设运行在用户主机上的某些应用程序(如Web浏览器)需要将主机名转换为IP地址。这些应用程序将调用DNS的客户机端,并指明需要被转换的主机名。在很多系统中,应用程序执行这种转换调用函数gethostbyname()。

DNS的客户机端接收到转换请求后,向网络中发送一个DNS查询消息。所有的DNS请求和回答消息使用UDP数据报经端口53发送。过若干时间后,用户主机上的客户机端接收到一个映射的DNS回答消息。这个查询结果则被传递到应用程序。

从用户调用应用程序的角度看,这是一个简单、直接的转换服务。但事实上,实现这个服务的系统非常复杂,它由分布于全球的大量DNS服务器组成。

DNS不能采用集中式设计的原因:

.单点故障

.通信负担

.延迟

.维护

•分布式、层次数据库

为了处理规模问题,DNS使用了大量的服务器,它们以层次方式组织,并且分布在全世界范围内。大致有3种类型的DNS服务器:根DNS服务器、顶级域DNS服务器和权威服务器。这些服务器以图中所示的层次结构组织起来。

假定一个DNS客户机要确定主机名http://www.mit.edu的IP地址。

域名查询主机的DNSClient向本地域名服务器发起一个查询。

本地域名服务器首先与根服务器之一联系,取得顶级域名edu的TLD服务器的IP地址。

本地域名服务器然后与这些TLD服务器之一联系,取得http://mit.edu权威服务器的IP地址。

本地域名服务器为http://www.mit.edu联系权威服务器,返回www主机的IP地址。

最后,本地域名服务器将结果返还给DNSClient,操作系统将结果作为函数调用返回值给应用程序。

三种类型的DNS服务器。

.根ONS服务器。在因特网上有13个根DNS服务器(标号为A到M),其中大部分位于北美洲。

.顶级域(TLD)服务器。这些服务器负责顶级域名(如COM,ORG,GOV和所有国家的顶级域名(如CN)。

.权威DNS服务器。将主机的名字映射为IP地址,由一个单位的权威DNS服务器负责保存这些记录。另一种方法是支付费用将这些记录存储在某个ISP的权威DNS服务器中。

根、TLD和权威DNS服务器都处在DNS服务器的层次结构中。

本地DNS服务器严格来说并不属于DNS服务器的层次结构,但它对DNS层次结构又是很重要的,本地DNS服务器通常与主机相隔不超过几个路由器。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将域名简析请求转发到DNS服务器层次结构中。

DNS查询过程中可以是迭代查询或是递归查询。

3:DNS缓存

为了改善时延性能并减少在因特网上传输的DNS消息数量,DNS广泛使用了缓存技术。DNS缓存的原理非常简单。在请求链中,当一个DNS服务器接收一个DNS回答时,服

务器能将回答中的信息缓存在本地存储器。

另一个对相同主机名的查询到达该DNS服务器时,该服务器能够提供所要求的IP地址,

即使它不是该主机名的权威服务器。但DNS服务器在一段时间后(通常设置为两天》将丢弃缓存的信息。

4:DNS记录和消息

实现DNS分布式数据库的所有DNS服务器共同存储着资源记录(ResourceRecord,RR)。RR提供了主机名到IP地址的映射。每个DNS回答消息包含了一条或多条资源记录。资源记录通常以文本的形式保存在DNS服务器的配置文件中。资源记录是一个包含了下列字段的4元组:

(Name,Value,Type,TTL)

TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。

Name和value的值取决于Type:

如果Type=A,则Name是主机名,value是该主机名的IP地址。因此,一条类型为A的资源记录提供了标准的主机名到IP地址的映射。

如果Type=NS,则Name是域,而value是知道如何获得该域中主机IP地址的权威DNS服务器的主机名。

如果Type=CNAME,则value是别名为Name的主机对应的规范主机名。该记录能够向请求主机提供一个主机名对应的规范主机名。

.如果Type=MX,则value是别名为Name的邮件服务器的规范主机名。使用MX记录,一个公司的邮件服务器和其他服务器(如它的web服务器)可以使用相同的别名。为了获得邮件服务器的规范主机名,DNS客户机应当请求一条MX记录;而为了获得其他服务器的规范主机名,DNS客户机应当请求一条CNAME记录。

DNS只有查询和回答消息,并具有相同的格式。

如何在DNS数据库中添加记录

当你申请了一个域名http://test.com,需要向某些注册登记机构注册域名时,需要提供你的主DNS服务器和辅助权威DNS服务器的名字和IP地址。

对这两个权威DNS服务器地址,注册登记机构确保将一个类型NS和一个类型A的记录输入TLDcom服务器。例如注册登记机构会将下列两条资源记录插入该DNS系统中:

(http://test.comhttp://dns1.test.com,NS)

(http://dns1.test.com,210.210.111.12,A)

你如果开通了Web服务器、邮件服务器,那么需要在你的主域名服务器中添加www,主机的A类型记录和类型为MX资源记录。一旦完成所有这些步骤,人们就可以访问你的Web站点,并向你发送电子邮件了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习之tensorflow实战篇

python之协程的那些事

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的...

12240
来自专栏noteless

JDBC 异常简介 jDBC简介(六)

JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况。

15820
来自专栏TheOneGIS空间站

JavaWeb开发中的文件访问路径

服务端的地址指的是相对于你的Web应用的地址,这个地址是在服务器端解析的(不同于HTML和JavaScript中的地址,他们是在浏览器端解析的),也就是说这时候...

47130
来自专栏深度学习之tensorflow实战篇

linux (ubantu)安装最新版python3.6,以及直接安装anaconda

版本下载(清华镜像):wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-...

48040
来自专栏钱塘小甲子的博客

多因子模型之因子(信号)测试平台----alphalens(一)

广告:本人的单因子测试视频教程 https://study.163.com/course/introduction/1005568012.htm

19930
来自专栏钱塘小甲子的博客

vn.py源码解读(三、事件驱动引擎代码分析)

        先抛开一切,我们来想一想,如果自己要写一个事件驱动引擎会怎么写?之前也说过,所谓的事情驱动就是你要监听一些事件,当某些事件发生的时候,要分配相对...

28530
来自专栏marsggbo

【转载】使用python库--Graphviz为论文画出漂亮的示意图

DOT is a plain text graph description language. It is a simple way of describing...

21830
来自专栏深度学习之tensorflow实战篇

Centos7.4 版本环境下安装Mysql5.7操作记录

关于Centos各个版本的IOS下载地址:https://wiki.centos.org/Download

27020
来自专栏TheOneGIS空间站

Leetcode: Min Stack

题目: Design a stack that supports push, pop, top, and retrieving the minimum el...

10030
来自专栏TheOneGIS空间站

C#发送HTTP请求自动登录Web网站

研究生期间不可少的一项任务——报账,今天8点准时点击财务取票系统(8点开放取票)结果取到了100号,每天财务(具体财务几科就不多说了)差不多就能处理30个左右的...

38670

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励