什么是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. LeetCode--015--三元之和(java)

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  2. 连接SQLsever数据库在C#中不能操作的问题

    最近小组成员在用C#连接数据库进行操作的时候,总是注册不起用户,提示为sql.client值不能为NULL,经过了一上午的百度查询,讨论,总是找不到问题所在,不得已去问了老师,老师是专业的软件工程师, ...

  3. HTML5 FormData方法介绍

    详细见链接 转载说明:转自CSDN上“诗渊”的博客

  4. 详细解析HTML基础结构

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. LOJ10155数字转换

    题目描述 如果一个数 x 的约数和 y (不包括他本身)比他本身小,那么 x 可以变成 y,y 也可以变成 x.例如 4 可以变为 3,1 可以变为 7.限定所有数字变换在不超过 n 的正整数范围内进 ...

  6. 精选!15 个必备的 VSCode 插件(前端类)

      精选!15 个必备的 VSCode 插件(前端类)   就像大多数 IDE 一样,VSCode 也有一个扩展和主题市场,包含了数以千计质量不同的插件.为了帮助大家挑选出值得下载的插件,我们针对性的 ...

  7. Linux c读取任意大小文件的所有数据

    代码如下,执行完之后被分配的动态内存的指针会保存到result中.由于是动态分配内存,读取内容不再使用之后注意用free 释放掉,如不明白,请多搜索以下动态内存分配的资料. #include < ...

  8. [Codeforces613E]Puzzle Lover

    Problem 给你2*n的格子,每个格子有一个字母,从任意一点出发,不重复的经过上下左右,生成要求的字符串.问有几种不同的走法. Solution 分三段,左U型.中间.右U型. 分别枚举左边和右边 ...

  9. linux c++ curl https 请求并双向验证SSL证书

    1.配置curl https请求需要提供 CA证书.客户端证书和客户端秘钥,这三个文件的pem格式. 分别对应 curl_easy_setopt() 函数的 下面三个参数: CURLOPT_CAINF ...

  10. 函数式语言(Functional language)简单介绍

    函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型. 函数式语言有:Haskell,Clean,M ...