什么是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. C99特性

    1.如果编译器支持C99标准那么局部变量的声明可以在语句之后,如: void func(void) { bool status; if(status == true) { status = false ...

  2. 文献导读 | A Pan-Cancer Analysis of Enhancer Expression in Nearly 9000 Patient Samples

    Chen, H., Li, C., Peng, X., Zhou, Z., Weinstein, J.N., Liang, H. and Cancer Genome Atlas Research Ne ...

  3. scala操作HBase2.0

    在前面: scala:2.12 hbase:2.0.2 开发工具:IDEA 准备工作: 1.将生产上的hbase中的conf/hbase-site.xml文件拷贝到idea中的src/resource ...

  4. java poi excel操作 把第一列放到最后去

    @Override public void adjustExcleColumnPosition(String filePath,int col) throws Exception{ File file ...

  5. 『TensorFlow』梯度优化相关

    tf.trainable_variables可以得到整个模型中所有trainable=True的Variable,也是自由处理梯度的基础 基础梯度操作方法: tf.gradients 用来计算导数.该 ...

  6. TCP建立连接为什么是三次握手,为什么不是两次或四次?

    什么是三次握手 学过网络编程的人,应该都知道TCP建立连接的三次握手,下面简单描述一下这个过程. 如图所示 第一次握手:客户端发送TCP包,置SYN标志位为1,将初始序号X,保存在包头的序列号(Seq ...

  7. 菜鸟脱壳之脱壳的基础知识(五)——利用内存断点寻找OEP

    经过第一节的基础知识,我们都知道了,加壳程序首先解把原来压缩的代码解压,然后放到所对应的区块中,当外壳程序执行完毕后,跳回到OEP执行,我们都知道,OEP是放在代码段中,也就是当外壳程序处理完毕后,跳 ...

  8. 1、安装Angular-CLI脚手架工具

    依赖环境的安装 1.安装node.js(版本在6以上) 查看版本号:node -v 2.安装npm(npm会随着node的安装一起被安装) 3.安装Python(我安装的是2.7.14),要安装环境变 ...

  9. Linux常用命令汇总集

    cd ./ 当前目录 ../ 上级目录 / 代表根目录 or 代表目录和文件之间的分隔符 .. pwd 查看当前路径 LS 查看当前目录下的文件 ls ./a/ 查看目标路径下的文件 tab 自动补全 ...

  10. 微信小程序中对于变量的定义

    在页面对应的js文件中: page顶部使用let定义变量,这是定义的全局变量,在当前脚本页面,任何函数中都可以直接使用变量名调用.如果做修改,就直接使用变量等于要更改的值. 使用const定义变量,就 ...