1、概述

域名系统 DNS 是因特网使用的命名系统,用来把便于人们使用的机器名字(即域名)转换为 ip 地址。

用户与因特网上某个主机通信时,必须要知道对方的 ip 地址,然而用户很难记住长达32位二进制主机地址,即使是点分十进制 IP 地址也并不太容易记忆。在应用层中为了便于用户记忆各种网络应用, 更多的是使用主机名字(即网站名:服务器名+域名)。

因特网的域名系统DNS被设计成为一个联机分布式数据库系统,并采用客户--服务器方式。DNS 使大多数名字都在本地进行解析,仅少量解析需要在因特网上通信, 因此DNS系统的效率很高。由于DNS是分布式系统, 即使单个计算机出了故障, 也不会妨碍整个DNS系统的正常运行。域名到 IP 地址的解析是由分布在因特网上的许多域名服务器程序(可简称为域名服务器)共同完成的。

域名到IP地址的解析过程: 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序, 并成为DNS的一个客户, 把待解析的域名放在DNS请求报文中, 以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的田地址后即可进行通信。若本地域名服务器不能回答该请求, 则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求(且接下来都是本地域名服务器代替主机进行查询)。这种过程直至找到能够回答该请求的域名服务器为止。

2、域名结构

因特网的域名采用了层次树状结构的命名方法,任何一个连接在因特网上的主机或路由器, 都有一个唯一的层次结构的名字, 即域名。

级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。

顶级域名可往下划分子域,即二级域名,再往下划分就是三级域名、四级域名等等。凡是在顶级域名下注册的单位都获得了一个二级域名,在某个二级域名下注册的单位就可以获得一个三级域名。一旦某个单位拥有了一个域名,它就可以自己决定是否要进一步划分其下属的子域,并且不必由其上级机构批准。

2.1、顶级域名的类别

(1)国家顶级域名nTLD: 如:cn 表示中国, us 表示美国, uk 表示英国等等。国家顶级域名又常记为ccTLD (cc 表示国家代码country-code)

(2)通用顶级域名gTLD: 最先确定的通用顶级域名有7个, 即:com (公司企业), net (网络服务机构), org(非赢利性组织), int (国际组织), edu(美国专用的教育机构), gov (美国的政府部门), mil 表示(美国的军事部门)。

(3)基础结构域名: 这种顶级域名只有一个, 即arpa, 用于反向域名解析, 因此又称为反向域名。

在国家顶级域名下注册的二级域名均由该国家自行确定。例如, 顶级域名为 jp 的日本, 将其教育和企业机构的二级域名定为 ac 和co, 而不用edu 和com。

我国把二级域名划分为“ 类别域名” 和“ 行政区域名” 两大类。“ 类别域名” 共7 个,分别为: ac(科研机构); com(工、商、金融等企业); edu(中国的教育机构); gov (中国的政府机构); mil (中国的国防机构); net (提供互联网络服务的机构); org (非营利性的组织)。“ 行政区域名” 共34 个, 适用于我国的各省、自治区、直辖市。例如: bj(北京市),js (江苏省)等等。现在我国允许直接在cn 的顶级域名下注册二级域名。这给我国的因特网用户提供了很大的方便。例如, 某公司abc 以前要注册为abc.com.cn,是个三级域名。但现在可以注册为abc.cn, 变成了二级域名。

2.3、域名服务器

实现域名系统的是使用分布在各地的域名服务器,DNS采用划分区的办法来分布域名服务器。

一个服务器所负责管辖的范围叫做区,各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。区可能等于或小于域, 但一定不可能大于域。每一个域名服务器都能够进行部分域名到IP地址的解析。当某个DNS服务器不能进行域名到IP地址的转换时,它就设法找因特网上别的域名服务器进行解析。

因特网上的DNS域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用, 可以把域名服务器划分为以下四种不同的类型:

(1)根域名服务器: 根域名服务器是最高层次的域名服务器, 也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。根域名服务器是最重要的域名服务器, 因为不管是哪一个本地域名服务器, 若要对因特网上任何一个域名进行解析(即转换为 ip 地址),只要自己无法解析,就首先要求助于根域名服务器。假定所有的根域名服务器都瘫痪了,那么整个的DNS系统就无法工作。在因特网上共有13个不同IP地址的根域名服务器。目前根域名服务器的分布仍然是很不合理的,会导致在北美和亚洲地区上网速度差别明显。在许多情况下,根域名服务器并不直接把待查询的域名直接转换成 ip 地址( 根域名服务器也没有存放这种信息〉,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

(2)顶级域名服务器: 这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS 查询请求时, 就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 ip 地址)。

(3)权限域名服务器: 这就是负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时, 就会告诉发出查询请求的DNS 客户, 下一步应当找哪一个权限域名服务器。

(4) 本地域名服务器: 本地域名服务器并不属于上图6-3 所示的域名服务器层次结构,但它对域名系统非常重要。当一个主机发出DNS 查询请求时,这个查询请求报文就发送给本地域名服务器,由此可看出本地域名服务器的重要性。每一个因特网服务提供者ISP,或-个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。当PC 使用Windows XP 操作系统时,打开“ 控制面板”---“ 网络和共享中心”---点击已连接的网络的标记---“详细信息”,就能看到DNS服务器的ip地址,这里的DNS 服务器指的就是本地域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离。当所要查询的主机也属于同一个本地ISP 时,该本地域名服务器立即就能将所查询的主机名转换为它的IP 地址,而不需要再去询问其他的域名服务器。

主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的 ip 地址, 那么本地域名服务器就以 DNS 客户的身份, 向根域名服务器继续发出查询请求报文(即替该主机继续查询,且接下来都是本地域名服务器替代主机进行查询直到本地域名服务器查询到ip地址或者是报错),而不是让该主机自己进行下一步的查询。因此,递归查询返回的查询结果或者是本地域名服务器查询到的 ip 地址,或者是报错,表示无法查询到所需的 ip 地址。

网络体系应用层之DNS系统的更多相关文章

  1. 网络体系应用层之万维网、http协议

    1.万维网概述 万维网以客户--服务器方式工作,万维网客户程序就是各式各样的浏览器,万维网文档所驻留的主机则运行服务器程序, 因此这个主机也称为万维网服务器.客户程序向服务器程序发出请求,服务器程序向 ...

  2. 运营商DNS系统安全解决方案

    DNS系统面临的主要风险 目前,DNS面临的安全问题主要可以分为三类:DNS欺骗攻击.拒绝服务攻击.系统漏洞,下文将分别进行介绍.  DNS欺骗攻击 当一个DNS服务器遭到欺骗攻击,使用了来自一个恶 ...

  3. TCP/IP笔记 应用层(1)——DNS

    1. DNS DNS(Domain Name System ):域名系统,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机 ...

  4. TCP/IP笔记 四.应用层(1)——DNS

    1. DNS DNS(Domain Name System ):域名系统,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机 ...

  5. 构建一个完整的DNS系统

    人心不同 各如其面 如之奈何 如之奈何 ——引子   我们的目标很明了——构建一个具有根的.私有的DNS(Domain Name System). 这里不会陈述太多关于DNS与BIND的基础知识,如果 ...

  6. 20145233《网络对抗》Exp7 DNS网络欺诈技术防范

    20145233<网络对抗>Exp7 DNS网络欺诈技术防范 实验问题思考 通常在什么场景下容易受到DNS spoof攻击 公共的无线局域网中,容易受到攻击者的攻击,因为这样就会连入局域网 ...

  7. 学习构建调试Linux内核网络代码的环境MenuOS系统

    构建调试Linux内核网络代码的环境MenuOS系统 一.前言 这是网络程序设计的第三次实验,主要是学习自己编译linux内核,构建一个具有简易功能的操作系统,同时在系统上面进行调试linux内核网络 ...

  8. 网络类(IP、dns、网络连接类)

    一.centOS 7 设置DNS方法 使用全新的命令行工具 nmcli 来设置 1.显示当前网络连接 nmcli connection show   NAME UUID TYPE DEVICE eno ...

  9. linux 系统获取网络ip, mask, gateway, dns信息小程序

    net_util.c #define WIRED_DEV                   "eth0"     #define WIRELESS_DEV             ...

随机推荐

  1. WingIIDE 6的licese破解方法(支持python3)

    (1) 安装WingIDE成功后启动,激活时输入license id CN123-12345-12345-12345 (2)点击Continue后弹框,拷贝框中的request code(将其放入脚本 ...

  2. java中的本地缓存

    java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了.   为什么要有本地缓存? ...

  3. 深入浅出WPF(Binding篇1)

    Binding在业界的使用一直是音译而来的,称为"Binding".Binding的源是逻辑数据对象,目标则是UI层上面的控件对象.数据通过Binding送达UI层,被UI层展示出 ...

  4. CodeForce-1196D2-RGB Substring (hard version)

    原题链接 题目大意与上题完全一样,只是数据规模更大. 思路: 再用上题的暴力肯定TLE,所以需要优化一下搜索过程.上一题我们是外层遍历n,内层遍历3种情况.这题我们外层遍历3种情况,内层遍历数组,记录 ...

  5. 编程语言-Python2-问题整理

    InsecureRequestWarning: Unverified HTTPS request is being made. import urllib3 urllib3.disable_warni ...

  6. jQuery提交表单的几种方式

    方式一: $.post('../Ajax/GoodsAjax.ashx?cmd=getGsList', function (result) {   var result = eval('(' + re ...

  7. java排序算法概述

    一.概述 1.排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 2.排序的分类: 1) 内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序. ...

  8. js 为false的几种情况

    1: false 2: null 3:undefined 4:"" 空字符串 5:0 6:NaN 如果你的if条件里面会出现 0 或者"",那么这种肯定是为假的 ...

  9. go 学习之bufio

    bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销.实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行.当发起一次读写操作时 ...

  10. C#split的使用方式

    一,在msdn中我们能看到一下几种使用 二,我们先看看经常使用的, 我们先定义一个数组 string test = "1,2,,3,4,5,6,7"; 第一种,结果大家都熟悉,就不 ...