什么是DNS?

DNS--Domain name system,域名系统,简单来说就是域名和IP地址间的映射关系。当你在浏览器的地址栏输入网址(或域名,如 www,baidu.com)的时候,在网络中计算机和别的计算机通信是基于IP地址才能找到对方并通信,所以计算机要访问你输入的域名就必须找到这个域名所对应的IP地址是什么,而这个工作就是DNS干的事情,网络上有这样的服务器专门用来建立或维护域名和IP地址的对应关系,这样的服务器就是DNS服务器。

DNS由来历史

  • 20世纪60年代末期,美国国防部高级研究计划局(DARPA)开始计划建立一个计算机网络用于内部资源共享,叫ARPAnet。
  • 20世纪70年代,ARPAnet只是一个只有几百台计算机节点的网络,计算机之间依靠HOSTS.TXT文件来解析各主机之间的关系。HOSTS.TXT由SRI的网络信息中心(Network Information Center,NIC)来负责维护,由一台单独的主机来负责分发。
  • 20世纪80年代初期TCP/IP协议被广范应用于ARPAnet,此时局域网(LAN)的出现使得更多的计算机可以连接在一起,接入网络的计算机也发展到了成千上万台,这种基于TCP/IP协议的本地和区域网络就发展成了Internet主干网络。
  • 1988年DARPA终止了ARPAnet试验计划,并拆除了ARPAnet,由美国国家科学基金会投资新建了NSFNET。
  • 1995年NSFNET发展成为Internet主干网络。
  • 当网络中的主机节点越来越多的时候,HOSTS.TXT逐渐暴露出弊端,主机包含以下几个方面:
    • 当时的网络带宽有限,随着节点数的激增HOSTS.TXT也变得越来越大,分发HOSTS.TXT文件带来的网络流量和处理器负载变得让人难以忍受。
    • HOSTS.TXT还不能防止有人使用重复主机名的映射关系,如果有相同的主机名称解析将会破坏其它的解析。
    • 当HOSTS.TXT传达到网络末稍节点时有可能有的节点信息已发生变化或又新增了一台主机,不能保证一致性。
  • 当HOSTS.TXT不能满足当时的需求的情况下,1984年南加州信息科学研究院的Paul Mockapetris负责设计新的系统来取代HOSTS.TXT,并发布了RFC882和RFC883,用于描述DNS,后来被RFC1034和RFC1035取代,也就是现在DNS的规范,这些规范被其它的RFC所扩充,扩充部分包括:潜在的安全问题,实现问题,管理缺陷,名称服务器的动态更新机制以及保证区域数据的安全性。

    DNS的软件实现

  • BIND
    Paul Mockapetris亲自创建了第一个DNS系统叫JEEVES,在此之后被实现的是BIND(Berkeley Internet Name Domain),它是由Kevin Dunlap为BSD unix系统所编写,现在由Internet Systems consortium负责维护。BIND也是迄今为止普及最广的DNS实现。
  • DJBDNS(Dan J Bernstein's DNS implementation)
  • MaraDNS
  • Name Server Daemon(Name Server Daemon)
  • PowerDNS
  • Dnsmasq

    DNS结构概述

  • DNS是一个C/S架构的分布式的数据库,由client端发起查询,server端负责应答,将结果返回给client端。DNS采用的是树形(倒立)结构,类似于linux的文件系统,其结构如图所示:
  • 处于最顶层的节点叫根域名,以.(点)号表示,全球总共13台根服务器。
  • 每个节点及其所对应的子节点形成一颗树,每一个子树都是DNS系统中的一部分,每一颗子树代表着一个Domain(域),每个域又可以再划分为若干个额外的域(称作子域),但是树的深度最多可达127层,实际上根本用不到这么多层。
  • 一个完整的域名表示应该是从树的自下而上的,如:www.163.com.和 mail.163.com.平时我们输入网址并没有输入最后一个.其实是浏览器帮我们自动补上了。每个域名的长度最多有63个字符(不包括.号)

    DNS中术语名称

  • 域名
    树中每个节点都有一个不超过63个字符的域名,任何一个完整域名FQDN(Fully qualified Domain Name)应该是从当前节点至根域以点号分隔来表示,如:www.163.com.DNS中要求在同一个父节点下的子节点不能同名,保证唯一性,但不同父节点下的子节点可以同名

  • 域分为父域与子域,每个域代表着一颗子树,一个域可能有多颗子树,也就是说一个域可以有多个子域,域是有层级关系的,从域名就可以看出来,如,163域就是com的子域,com域就是根域的子域。
  • 授权
    域名系统设计的主要目的就是要能实现分散管理,就好比项目经理把一个项目分解成若干个小任务分配给外个员工去做。在域中通常由父域将任务委派给子域完成,父域仅仅保留指向子域数据来源的指针,告诉客户端,你要的信息我已经让谁去处理了,你直接找他吧。
  • 名称服务器(nameserver)
    存储域命名空间信息的程序叫作名称服务器,名称服务器通常只拥有域命名空间一部分的完整信息,这部分完整信息称作区域(zone),区域的内容可以从文件或另一台名称服务器加载而来,加载过后,这台服务器便可宣称对该区域具有权威。名称服务器又分主从(master,slave),一般slave的区域数据文件从master加载,当master宕机后,slave便可接替master继续工作。
  • 区域数据文件,master名称服务器从本机加载的数据文件称为区域数据文件,slave一般配置为从master传送过来的区域数据文件作为备份。数据文件包含了描述区域的资源记录,资源记录描述了区域内所有的主机,并标记了子域的授权情况。
  • 资源记录
    与域名相关的数据都包含在资源记录中,DNS的资源记录主要有以下几种:
    • SOA(start of authority 起始授权机构)记录,指名该区域的权威,1个区域文件有且只能有1个SOA记录。
    • NS记录,列出该区域的名称服务器
    • A记录,名称到IP的映射
    • PTR记录,IP到名称的映射
    • CNAME记录,别名记录
    • MX记录,邮件交换器
  • 解析器(resolver)
    就是访问名称服务器的客户端程序。当运行在主机上的程序需要从域命名空间中获取信息时就会用到解析器,解析器几乎完全依赖于名称服务器,收集查询指令,向名称服务器发送查询并等待应答,如果没有应答就再次发送。主要任务有以下几个:
    • 查询名称服务器
    • 解释查询信息(可能是资源记录或是错误信息)
    • 将信息返回给查询它的程序
  • 递归和迭代
    看图就知道

DNS基础的更多相关文章

  1. 【Linux】DNS基础(一)

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

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

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

  3. DNS 基础

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

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

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

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

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

  6. DNS基础概要

    dns服务系统由客户端和服务器组成,提供域名到ip地址的解析,或者提供ip地址到域名的逆向解析. 1.DNS域名空间 每个dns域名由分级的label构成,如www.sina.com.cn,由www. ...

  7. 网络安全(一)主动进攻之DNS基础和ettercap实现DNS流量劫持

    alittlemc,个人原创,个人理解和观点.若有错误.不理解请与我联系,谢谢! 介绍了DNS的解析过程. DNS劫持的思路和实践. DNS 域名 以为live.bilibili.com为例子,从后到 ...

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

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

  9. DNS服务基础原理介绍

    FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名)    FQDN=主机名.域名 根域               . 顶级域名       .com   .n ...

随机推荐

  1. Spring框架基础

    1         Spring框架 1.1           Spring的基本概念 是一个轻量级的框架,提供基础的开发包,包括消息.web通讯.数据库.大数据.授权.手机应用.session管理 ...

  2. 清理SuperMap三维缓存

    一.iclient三维插件浏览器端缓存 方法1:遍历users子文件夹,发现指定目录有supermap,即删除 @echo offtitle 清理三维缓存@echo 开始清理三维缓存...for /f ...

  3. 实现mypwd&mybash&myod&读者写者

    目录: 一.mypwd 二.mybash 三.myod 四.读者.写者 一.实现mypwd 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试m ...

  4. axios和promise

    什么是axios axios is a promise based HTTP client for the browser and node.js Features: Make XMLHttpRequ ...

  5. ES6与ES5对比 模板字符串

    var title = '你好' ES5 var tpl1 = '<div>' + '<span>' + title + '</span>' '</div&g ...

  6. python中的进程池和线程池

    Python标准模块-concurrent.futures #1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ...

  7. border——边框属性

    一.第一层次(复合样式) <style> p.one{border:1px solid black;} /*边框:1像素 实心的 黑色:*/ </style> <body ...

  8. Javascript时间戳和日期时间的相互转换

    跟后台对接的时候经常碰到时间格式的问题,有时返回的是时间戳,有时返回的是具体时间,需求又需要它们之间的转换,所以干脆把之前遇到过的情况都给记录下来,以供自己参考! 本文备注:(时间戳单位为毫秒ms,换 ...

  9. react-thunk的使用流程

    react-thunk作用:使我们可以在action中返回函数,而不是只能返回一个对象.然后我们可以在函数中做很多事情,比如发送异步的ajax请求. 这就是react-thunk的使用方法.接受一个d ...

  10. html5(二)

    *{ margin:0px; padding:0px;} h1{ font:bold 20px verdana,sans-serif;} h1{ font:bold 14px verdana,sans ...