前面已经提到了访问一台机器要靠IP地址和MAC地址,其中,MAC地址可以通过ARP协议得到,所以这对用户是透明的,但是IP地址就不行,无论如何用户都需要用一个指定的IP来访问一台计算机,而IP地址又非常不好记,于是就出现了DNS系统。

1.DNS系统介绍

DNS的全称是Domain Name System。它负责把FQDN(域名)翻译成一个IP。最初的DNS系统使用的是一个巨大的hosts.txt文件(windows中就有这个文件),可是一段时间以后,开发者就不得不用数据库来代替hosts.txt文件,最终发展到了现在的分布式数据库。

windows中的hosts文件:

DNS系统结构图

DNS系统是一个巨大的树,最上方有一个未命名树根,代表根域服务器,顶级域名的解析由根域服务器提供支持。

顶级域名分为3个部分:

1.  arpa是一个用作地址到名字转换的特殊域。(用于支持ptr反向查询)。

2.  7个3个字符长的普通域,也叫组织域,分别是company ,education,government,international,military,net,organization

3.  所有2字符长的域都是国家域,依据ISO3166中定义的国家代码。

一个独立管理的DNS子树叫做zone,最常见的区域就是二级域名,比如说.com.cn。我们还可以把这个二级域名给划分成更小的区域,比如说sina.com.cn。

DNS系统是一个分布式的数据库,当一个数据库发现自己并没有某查询所需要的数据的时候,它将把查询转发出去,而转发的目的地通常是根服务器,根服务器从上至下层层转发查询,直到找到目标为止。DNS还有一个特点就是使用高速缓存,DNS把查询过的数据缓存在闪存里,以便于下次查询时使用。

2.DNS协议

DNS报文定义了一个既可以查询也可以响应的报文格式。对各个字段简单解释如下

  1. 最前面的16个bit唯一的标示了问题号码,用于查询端区别自己的查询。
  2. 紧接着的16个bit又可以做进一步的细分,标示了报文的性质和一些细节,比如说是查询报文还是响应报文,需要递归查询与否(一般服务器都支持递归查询,而且不需要任何设置,BIND就是这样)
  3. 查询问题后面有查询类型,包括A,NS,CNAME,PTR,HINFO,MX。
  4. 响应报文可以回复多个IP,也就是说,域名可以和多个IP地址对应,并且有很多CNAME。

主要资源类型:A记录:ip地址  ;CNAME记录:别名记录;ptr 记录:用于支持反向查询,由IP地址反查域名;MX记录:邮件服务器地址

3.反向查询

正向查询指的是通过域名得到IP的查询,而反向查询就是通过IP得到域名。例如用host命令,host ip就可以得到服务器的域名,host domainName 就得到IP。

稍微知道一点数据结构的人都能意识到,在正向查询的域里面做反向查询,其做法只有遍历整个数据集合----对于DNS来说,那就是遍历整个数据库, 这将带来巨大的负担,所以DNS采取了另一种方法,使用另一棵子树来维护IP-〉域名的对应表。这个子树的根节点是in-addr.arpa,而一个IP例如192.168.11.2所具有的DNS地址就是 2.11.168.192.in-addr.arpa(ip倒置)。在DNS系统里面,一个反向地址对应一个PTR纪录(对应A纪录),所以反向查询又叫做指针(PTR)查询。

4.其他问题的讨论

4.1.DNS服务器高速缓存

为了减少Internet上的DNS的通信量,所有的名字服务器均使用高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。

4.2.用UDP还是TCP

DNS服务器支持TCP和UDP两种协议的查询方式,而且端口都是53。而大多数的查询都是UDP查询的,一般需要TCP查询的有两种情况:

  1. 当查询数据多大以至于产生了数据截断(TC标志为1)(说明响应数据报超过了512bytes),这时,需要利用TCP的分片能力来进行数据传输。
  2. 当主(master)服务器和辅(slave)服务器之间通信,辅服务器要拿到主服务器的ZONE信息的时候。

8.DNS :域名系统的更多相关文章

  1. DNS 域名系统 (Domain Name System)

      DNS 域名系统 (Domain Name System) 许多应用层软件经常直接使用域名系统 DNS (Domain Name System),但计算机的用户只是间接而不是直接使用域名系统. 因 ...

  2. DNS 域名系统的简介

    一.DNS域名系统简介 1.网络中为了区别各个主机,必须为每台主机分配一个唯一的地址, 这个地址即称为“IP 地址.但这些数字难以记忆, 所以采用“域名” 的方式来取代这些数字. 2.当某台主机要与其 ...

  3. 【RL-TCPnet网络教程】第27章 DNS域名系统基础知识

    第27章      DNS域名系统基础知识 本章节为大家讲解DNS(Domain Name System,域名系统),通过前面章节对TCP和UDP的学习,需要大家对DNS也有个基础的认识. (本章的知 ...

  4. DNS 域名系统与邮件服务器

    目录 DNS 域名系统 定义 域名分类 解析流程 DNS分类 资源记录 格式 资源记录类型 用bind搭建一台DNS服务器 安装bind 创建自己的zone文件 在主配置文件中,增加自己的zone 检 ...

  5. python 网络编程(五)---DNS域名系统

    1.域名系统定义 DNS计算机域名系统由域名服务器和域名解析器组成.通常输入的是网址就是一个域名. 2.域名查询 查询方式包括: 1)正向查询:由域名查找对应的IP(如:www.baidu.com—& ...

  6. TCP/IP详解 卷一(第十四章 DNS:域名系统)

    域名系统(DNS Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息. 从应用角度上看,对DNS的访问时通过 ...

  7. DNS域名系统

    1. 什么是DNS? DNS是域名系统的缩写,DNS通过将域名与实际的Web服务器连接来帮助引导Internet上的流量.从本质上讲,它需要一个人性化的请求 – 像simcf.cc这样的域名 – 并将 ...

  8. TCP/IP详解学习笔记(8)-DNS域名系统

    前面已经提到了访问一台机器要靠IP地址和MAC地址,其中,MAC地址可以通过ARP协议得到,所以这对用户是透明的,但是IP地址就不行,无论如何用户都需要用一个指定的IP来访问一台计算机,而IP地址又非 ...

  9. DNS:域名系统

    概述: DNS的作用在于将域名转换为对应的IP地址. DNS名字空间和UNIX文件系统相似,也是树形结构.以"."结尾的域名称为FQDN(Full Qualified Domain ...

  10. DNS域名系统,简述工作原理

    DNS工作原理: 当DNS客户端需要在程序中使用名称时,它会查询DNS服务器来解析该名称.客户端发送的每条查询信息包括三条信息:指定的DNS域名,指定的查询类型,DNS域名的指定类别.基于UDP服务, ...

随机推荐

  1. cordova 启动界面config.xml配置

    <preference name="SplashScreen" value="screen"/> <preference name=" ...

  2. MVC3 Razor 根据不同页面使用不同Layout

    _ViewStart.cshtml运行于每一Page前, 所以通常在这里先设置Layout   下面代码为特定的controller指定Index,Edit,Create的模板 即Index对应  _ ...

  3. nginx及php版本号隐藏

    配置完一台服务器后,并不是就可以高枕无忧了,前不久刚刚爆发的PHP 5.3.9版本的漏洞也搞得人心惶惶,所以说经常关注安全公告并及时升级服务器也是必要的.一般来说,黑客攻击服务器的首要步骤就是收集信息 ...

  4. C#入门经典第八章面向对象编程简介-1

    面向对象编程(Object-Oriented Programming,OOP)技术 本章中的OPP实际上是.NET OOP,这里讲的一些技术不能应用于其他OOP环境.

  5. ibatis中resultClass与resultMap 的区别

    ibatis的resultClass与resultMap还是有很大的区别.以下是我碰到的一个问题. 配置文件写法如下: 1 sqlMap2 typeAlias alias="notice&q ...

  6. Android -----ArrayAdapter的重写 .

    引自:http://blog.csdn.net/jason0539/article/details/9918465 最近需要用ArrayAdapter,保存一下,以后方便查找 ArrayAdapter ...

  7. ZOJ 3696 Alien's Organ 概率论 泊松分布

    看了好久的题,但还是看得一脸蒙圈,感觉完全无从下手,我的队友告诉我可能是正太分布之类的,但我感觉不太像,后来才听同学说是泊松分布,才恍然大悟,概率论刚刚学过这里不久,不禁感叹,学会了还要会用啊... ...

  8. Altera Soc交叉编译环境搭建

    该文主要是对rocketboard教程的补充,详细教程参见https://rocketboards.org/foswiki/view/Documentation/EmbeddedLinuxBeginn ...

  9. Apache下的FileUtils.listFiles方法简单使用技巧

    一.引言 Apache提供的很多工具方法非常好用,推荐. 今天在使用的过程中使用到了org.apache.commons.io.FileUtils.listFiles方法,本文主要谈谈这个工具方法的用 ...

  10. Mysql数据备份与恢复命令

    转载:原文地址 一.备份常用操作基本命令 1.备份命令mysqldump格式 格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sq ...