域名系统DNS

  • 域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名转化为IP地址,域名系统就是名字系统。

    很多应用层的软件经常直接使用DNS。DNS为互联网的各种网络提供了核心服务。
  • 用户和主机通信的时候,通常是很难记住IP地址,但应用层为了便于用户记住各种网络应用,连接在互联网上的

    主机不仅有IP地址,还有便于记忆的主机名字。域名系统就是把互联网上的主机名字转化为IP地址
  • 为什么主机在IP数据报的时候要使用IP地址而不是域名呢?这是因为IP地址的长度是固定的32位(IPV6是固定的128位),

    而域名的长度并不是固定的,及其处理起来比较困难。
  • 从理论上来讲,整个互联网可以只使用一个域名服务器,使它装入互联网上的所有主机名,

    并回答所有对IP地址的查询,但是这种做法简直太蠢,这样的域名服务器肯定会因为过负荷工作而无法正常工作,而且一旦这个域名服务器出现故障,

    整个互联网就会瘫痪。因此早在1983年就开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS

    。DNS互联网标准是RFC[1034],RFC[1035]。
  • 互联网的DNS被设计为成为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大多数名字都在本地进行解析(resolve)

    仅有少量解析在互联网上通信,因此DNS系统的效率很高,由于DNS是分布式系统,即使是单个计算机出现了故障,也不会妨碍整个DNS系统的正常运行。
  • 域名到IP地址的解析过程是由分布式在互联网上的许多域名服务程序共同完成的。域名服务程序在专设的结点上运行,

    人们把运行域名服务器程序的机器称之为域名服务器
  • 域名到IP地址解析过程的要点如下:
    • 当某一个用用进程需要把主机名解析为IP地址时,该用用进程就调用解析程序(resolver),

      并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据包方式发给本地域名服务器

      (使用UDP的好处是减少开销)。
    • 本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获取到目标主机的IP地址就可以进行通信。
  • 若本地域名服务器不能回答该请求,则该域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。

    这种过程直至找到能够回答该请求的域名服务器为止。

互联网的域名结构

  • 每一个域名都是由标号(label)序列组成,各标号之间使用.隔离开,例如:

    • 一级域名又称顶级域名。从右往左依次增大。
    • DNS规定,域名中的符号,都是由英文字母和数字组成,每一个标识符不能超过63个字符(为了记忆方便,不能超过12个字符)不区分大小写

      标点符号只能使用英文.号。级别最低的域名写左边,级别最高的域名写右边,由多个标号组成的完整域名不超过255个字符
    • 各级域名由上一级的域名管理机构管理,最高级的顶级域名则由ICANN进行管理。
    • 域名只是个逻辑概念,并不能代表计算机所在的物理地点
    • 互联网的名字空间是按照机构的组织来划分的,与物理的网络无关。
  • 域名服务器
    • 一个服务器所负责的范围叫做区(zone)。但在区中的所有节点都必须是能够联通的。每一个区设置相应的

      权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射,
    • 根据域名服务器的作用,可以把域名服务器划分为以下四种不同的类型:
      • 根域名服务器(root name server):根域名服务器是最高层次的域名服务器,若要对互联网上的任何一个域名进行解析(即转化为IP地址)

        只要自己无法解析,就首先要求助于根域名服务器,假如根域名服务器都瘫痪了,那么整个互联网的DNS就瘫痪了。
      • 顶级域名服务器(TLD服务器):这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询的请求的时候,就会给出相应的应答

        (可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。
      • 权限域名服务器:负责一个区的域名服务器。
      • 本地域名服务器(local name server):当一台主机发出DNS查询的时候,这个查询请求报文就发送给本地域名

        服务器,本地域名服务器距离用户比较近,一般不超过几个路由的距离。当所要查询的主机也属于同一个本地ISP时候,

        该本地域名服务器立即就能讲所查询的主机名转化为它的IP地址,而不再需要询问其他的域名服务器。
    • 为了提高域名的可靠性,DNS域名服务器把数据复制到几个域名服务器来保存,其中的一个是主域名服务器(master name server),

      其他的是域名域名服务器(secondary name server)。当主域名服务器出现故障的时候,福主域名服务器可以保证DNS查询工作不会瘫痪。

      主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行,这样就保证了数据的一致性。
  • 域名的解析过程
    1. 主机向本地域名服务器的查询一般采用的是递归查询,所谓递归查询就是:如果主机所询问的本地域名服务器不知道被域名查询的IP地址,那么本地域名服务器就以DNS客户的身份

      ,向其他根域名服务器继续发出查询请求报文(替该主机继续查询),而不是让主机自己进行下一步查询,递归查询的结果就两种:

      • 查询成功,查询出IP地址。
      • 查询失败(报错),无法查询到。
    2. 本地域名服务器向根域名服务器查询采用的是迭代查询:当根域名服务器收到本地域名服务器发出的

      迭代请求报文时,要么给出要查询的IP地址,要么告诉本地域名服务器地址:"你下一步应该去哪一个域名服务器查询",然后让本地域名服务器进行后续的查询,接着如何上面的操作,直至找到IP地址。
    • 为了提高DNS查询速率,并减轻根域名服务器的负荷,在域名服务器广泛使用高速缓存(高速缓存域名服务器),高速缓存用来存放最近查询过的域名以及从何处获取到该映射。

最新文章

  1. Struts2之开山篇
  2. 其它数据类型和Json的转化
  3. jquery 清除动画队列不疑惑
  4. TYVJ P1083 分糖果 Label:bfs
  5. datatables 服务器返回数据后的处理-表格数据属性的操作方法(ajax.dataSrc)
  6. [ZZ]C++中,引用和指针的区别
  7. Thumb
  8. ASP.NET 相关小知识
  9. 差别client、offset、scroll系列以及event的几个距离属性
  10. 转载:常见EXE文件反编译工具
  11. C#小知识点记录(QQ交流群的一个小问题)Linq提取数据
  12. SpringMVC拦截器 - 设置不拦截html,js等静态文件
  13. 集合框架之Collections静态工具类
  14. AtCoder Grand Contest 026 (AGC026) E - Synchronized Subsequence 贪心 动态规划
  15. 总结TCP为什么三次握手四次挥手
  16. 《SQL 基础教程》第四章:数据更新
  17. firefox(火狐)和Chrome(google)浏览器清空缓存操作的方法指引
  18. HDU 4532 湫秋系列故事——安排座位 (组合+DP)
  19. codevs 1500 后缀排序
  20. Loadrunner测试实例分析

热门文章

  1. Qt 中事件与处理
  2. 互斥锁(Lock)
  3. java 日期格式化-- SimpleDateFormat 的使用。字符串转日期,日期转字符串
  4. 10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发
  5. 微信小程序的button按钮设置宽度无效
  6. Qt5获取系统文件图标,文件路径
  7. Linux复习笔记-001-进程的管理
  8. 初识GDAL
  9. QT程序打包成多平台可执行文件
  10. Jenkins(6)- 新建用户