本文出自   http://blog.csdn.net/shuangde800

---------------------------------------------------------------------------------

域名

 
IP地址往往难以记忆,所以我们一般使用域名进行管理
 
www.google.com
 
域名分为三个部分,用“.”(点)分割。严格的域名最后还有一个".",但一般省略不写。
     -类型     标识此域名的类型(com/net/org/edu/gov等)
     -域名     域名称
     -主机名  该域中的某台主机名称
 
 
www: 主机名
google:域名
com: 类型
 
 

 

DNS

 
  • 每个域名代表一IP,而DNS就是用来在IP与域名之间进行转换的服务
 
www.google.com   <--->  74.125.128.105
 
 
  • DNS(Domain Name System)服务由DNS服务器提供
 
 
 

DNS客户端

 
  • 我们日常使用的支持网络的计算机一般都是作为一个DNS客户端使用,应用程序、服务、进程等等通过操作系统底层的功能发起对dns服务器的查询,对特定域名进行解析
  • Linux中一般使用系统底层提供的gethostbyname()功能进行域名解析
  • 解析可以基于以下几种方式进行:

1) 文件(/etc/hosts、/etc/networks)

下面是/etc/hosts,可以看到这个文件把localhost解析为127.0.0.1以及其它的一些解析
 
在查DNS之前都会先查这个文件,所以黑客可能会通过修改这个文件,让用户进入一些钓鱼网站。
 
下面是/etc/networks文件
 
 
 

2)DNS

几乎所有的域名都是通过DNS域名服务器来解析的。DNS配置文件是在 /etc/resolv.conf文件下,里面配置DNS服务器

3) NIS

这个用得比较少,基本被淘汰掉了

  • 可以通过配置文件 /etc/nsswitch.conf控制查询顺序

其中的host:files   dns .... 这一行是控制顺序的


DNS专用查询命令

  • 命令host可用于进行dns查询:

$ host  www.google.com

  • 命令dig也可进行dns查询,输出较为详细的信息:

$ dig  www.google.com

 
  • 命令host、dig都不会使用/etc/nsswitch.conf的配置,只有会通过/etc/resolv.conf进行dns查询。即会绕过前面那个文件配置。
 
 
 

 

DNS查询

 
DNS是一个树状结构,查询的时候根据域名从右到左查询,域名每一级有独立的一个或多个服务器。
 
例如,www.linuxcast.net.
 
最上面的"."是根域名服务器(root DNS Server),用来保存下一级的com/net...的地址,全球共有13台根域名服务器。这13台根域名服务器中名字分别为“A”至“M”,其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。
 
第二级是顶级域名服务器(Top Level Server),每个顶级域名服务器都是由一台或多台服务器控制的,每个一分别保存相应的以/com/net/org/....为后缀的域名的管理。
 
第三级是授权服务器(Authoritative Server),只负责linuxcast以下的信息。这里可以查找到www, mail, 和ftp主机。
 
  • $  dig  +trace  www.linuxcast.net
      这个命令可以追踪整个域名的查询过程
 
可以发现查询顺序是: . ——》net. ——》linuxcast.net. ——》www.linuxcast.net.
 

 

DNS的查询类型

 
1.  迭代查询(Iterative Query)
 
例如客户端用迭代查询的方式访问www.linuxcast.net:
 
 
1. 首先客户端发送请求到本地DNS服务器(Local DNS Server,即客户端配置的DNS服务器)
2. 如果本地DNS不知道这个域名的话,就会去查询根域名服务器
3. 根服务器返回.net服务器的地址
4. 然后本地DNS在去查询net服务器
5. net服务器返回linuxcast.net的地址
6. 本地DNS再向Linuxcast.net发送请求
7. linuxcast.net返回www主机给本地DNS
8. 本地DNS返回www.linuxcast.net的地址给客户端。
 
 
2. 递归查询(Recursive  Query)
例如客户端用递归查询的方式访问www.linuxcast.net:
 
1. 首先客户端发送请求到本地DNS
2. 如果本地DNS不知道这个地址的话,那么就会向根DNS服务器查询。
3. 然后根DNS服务器不会像迭代查询一样返回net地址,而是它会代替本地dns向net服务器发送请求查询
4. 然后net服务器也不会像迭代查询一样返回linuxcast.net的地址,而是代根DNS服务器向linuxcast.net查询
5. 最后linuxcast.net服务器返回www主机的地址给net
6. net服务器返回www.linucast.net的地址给根DNS服务器
7. 根DNS服务器这时再返回www.linucast.net的地址给本地DNS
8. 最后本地DNS返回目标地址给客户端
 
这种查询方式的缺点:在每一级的服务器上,都会缓存大量的信息,因为它要等待查询返回,可能会占用大量的内存。
 
所以实际应用中,会结合这两种方式使用,即在客户端向本地DNS服务器查询是使用递归查询,而本地DNS服务器和其他级服务器使用的是迭代查询!
 
 

 

资源记录

 
在DNS服务器上,DNS的信息通过一个叫做资源记录(RR,Resource Record)的格式进行保存,RR不仅能够保存域名到IP地址的对应信息,还能够保存很多其它信息。
 
资源记录(RR,Resource Record)常用的属性:
      - NAME(名称)
      - CLASS(类别)
      - TYPE(类型)
      - RDATA(数据)
 
如,
NAME CLASS TYPE RDATA
www IN(Internet) A   192.168.1.1
mail IN A 192.168.1.2
server1 IN CNAME   www
  IN MX  10 mail.linuxcast.net
 
 

资源记录类型

 
DNS的资源记录可以记录很多类型资源,而不仅仅是IP地址,常见的资源记录类型:
 
类型 表示内容
A IPv4地址
AAAA IPv6地址
MX     邮件记录
CNAME 别名
PTR 指针(逆向解析)
SRV 服务资源
 
 
 

 

DNS服务器类型

 
  • 主DNS服务器(Primary DNS Server ,Master)
    一个域的主服务器保存该域的zone配置文件,该域所有的配置、更改都在该服务器上进行
 
  • 从服务器(Second DNS Server,Slave)
    从服务器一般作为冗余负载使用,一个域的从服务器从该域的主服务器上抓取zone配置文件,从服务器不进行信息修改,所有的修改与主服务器同步
 
  • 缓存服务器(Caching only Server)
    DNS缓存服务器不存在任何zone文件,仅仅依靠缓存作为客户端提供服务,通常用于负载均衡及加速访问使用
 
 

ZONE

 
在DNS服务器中,一般一个域通过一个ZONE文件保存该域的相关信息,zone文件的格式是标准化的,一个典型的zone配置文件内容如下:
有标准模板
STTL  ID
@ IN  SOA  @rname.invalid. (
                               0    : serial          (序列号,DNS服务器修改过一次序列号加1,从服务器发现序列号和自己不一样就会自动更新)
                               1D  : refresh       (刷新时间,1D=1天)
                               1H  : retry           (重试, 1H=1小时)
                               1W : expire          
                               3H  ); minimum     
(上面一般直接使用默认的就可以)
           NS @
           MX 10   mail.linuxcast.net
www    IN  A     192.168.1.100
mail     IN  A     192.168.1.200
(上面是数据)
 
 

 

高级查询

 
  • 默认dig命令只能查询我们通过dig命令查询其他类型的资源记录:
      $ dig  -t  mx  linuxcast.net
      $ dig  -x  www.linuxcast.net    进行逆向解析
      $ dig  -t  soa  linuxcast.net

DNS基础及域名系统架构的更多相关文章

  1. 1.DNS基础及域名系统架构

    一.域名: IP地址往往难以记忆,所以我们一般使用域名进行管理 www.LinuxCast.net 1.严格的域名最后还有一个".",但一般省略不写 2.域名分为三个部分,用&qu ...

  2. 【Linux】DNS基础(一)

    DNS基础 DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,域名服务器是进行域名(domain name)和与之相对应的IP地址 ...

  3. DNS基础

    什么是DNS? DNS--Domain name system,域名系统,简单来说就是域名和IP地址间的映射关系.当你在浏览器的地址栏输入网址(或域名,如 www,baidu.com)的时候,在网络中 ...

  4. Angular JS从入门基础 mvc三层架构 常用指令

    Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...

  5. Kubernetes基础概念及架构概述

    Kubernetes 架构 Kubernetes是一个全新的基于容器技术的分布式架构,虽然Kubernetes只有三年,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要发展成果.确切的 ...

  6. DNS 基础

    DNS Domain Name System:域名系统,主要用来将域名解析为IP.DNS以及相关系统存在,主要有两个原因: 可以让人容易记住名字,而不是记住IP: 它允许服务器改变IP,但是采用同样的 ...

  7. 4.翻译:EF基础系列--EF架构

    原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...

  8. 被动信息收集1——DNS基础 + DNS解析工具 NSLOOKUP使用

    被动信息收集 特点: 基于公开渠道 与目标不直接接触 避免留下一切痕迹 标准參考--OSINT: 美国军方 北大西洋公约组织 名词解释 DNS--Domain Name System 域名系统 因特网 ...

  9. MyBatis 基础搭建及架构概述

    目录 MyBatis 是什么? MyBatis 项目构建 MyBatis 整体架构 接口层 数据处理层 基础支持层 MyBatis 是什么? MyBatis是第一个支持自定义SQL.存储过程和高级映射 ...

随机推荐

  1. QQ空间HD(4)-设置左侧菜单栏属性

    DJHomeViewController.m #import "DJHomeViewController.h" #import "DJMenuView.h" ; ...

  2. Subversion命令汇总

    转自:http://www.cnblogs.com/cnblogsfans/archive/2010/03/21/1690838.html svn 命令共同的选项 --targets list 读取l ...

  3. PHP简单漂亮的分页类

    本文介绍一款原生的PHP分页类,分页样式有点类似bootstrap. <?php /* * ********************************************* * @类名 ...

  4. iframe 内联框架

    Iframe - 设置高度和宽度 height 和 width 属性用于规定 iframe 的高度和宽度. 属性值的默认单位是像素,但也可以用百分比来设定(比如 "80%"). 实 ...

  5. 【PHP面向对象(OOP)编程入门教程】18.__call()处理调用错误

    在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行.那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在, ...

  6. servlet和http请求

    1.servlet servlet是和平台无关的服务器组件,可以交互式的来浏览和修改数据,生成动态的web内容.它运行于 servlet容器中2.servlet容器 servlet容器负责servle ...

  7. FineUI第十八天---表格之事件的处理

    表格之事件的处理: 1.事件参数: GridPageEventArgs:表格分页事件参数,对应onPageIndexChange事件. NewPageIndex:新页面的索引 GridSortEven ...

  8. 关于phpcms中mysql和mysqli的区别

    用phpcms开发一个考试成绩查询的小模块,用电脑上以前下载的phpcms版本为框架开发,一切顺利.想着下载一个最新版本,以后也免了升级的麻烦.于是,下载好,然后把模块目录.model数据库连接文件. ...

  9. BZOJ4612——[Wf2016]Forever Young

    1.题意:将一个数y转化成b进制数,使得他>=l,且<y,且转化后均为0~9,使b最大. 2.分析:我们发现要么答案的b很小,要么y很小..那我们直接暴力枚举就好了啊 然后判断一下...另 ...

  10. python trackback的使用心得

    以前在读代码的时候总是要花很久时间去找在哪里调用的某个函数,现在好了,直接使用:trackback.print_stack()就可以打印出调用栈了,在那个地方调用的一目了然... 而如果是异常栈的话就 ...