带你简单了解域名系统DNS

一、域名简介

1.1.DNS服务的作用

负责解析域名,将域名解析成IP地址。

1.2.域名系统概述

  • 由于32位的IP地址并不容易记忆,人们往往喜欢记忆网站的域名。所以当我们访问网站时,是通过输入的域名解析为对应IP地址,对该IP地址进行访问的。
  • 名字到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器

1.3.因特网的域名结构

  • 因特网采用了层次树状结构的命名方法。

  • 任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名

  • 域名的结构由标号序列组成,各标号之间用隔开:

  • 上图的各标号:三级域名、二级域名等分别代表不同级别的域名。

1.4.域名只是个逻辑概念

  • 域名只是个逻辑概念,并不代表计算机所在的物理地点。
  • 变长的域名和使用有助记忆的字符串,是为了便于人来使用。而 IP 地址是定长的 32 位二进制数字则非常便于机器进行处理。

1.5.顶级域名 TLD (Top Level Domain)

  • 国家顶级域名 nTLD:如: .cn 表示中国,.us 表示美国,.uk 表示英国,等等。

  • 通用顶级域名 gTLD:最早的顶级域名是:

    .com (公司和企业);

    .net (网络服务机构);

    .org (非赢利性组织);

    .edu (美国专用的教育机构);

    .gov (美国专用的政府部门);

    .mil (美国专用的军事部门);

    .int (国际组织);

    新增的有:

    .aero (航空运输企业);

    .biz (公司和企业);

    .cat (加泰隆人的语言和文化团体);

    .coop (合作团体);

    .info (各种情况);

    .jobs (人力资源管理者);

    .mobi (移动产品与服务的用户和提供者);

    .museum (博物馆);

    .name (个人);

    .pro (有证书的专业人员);

    .travel (旅游业);

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

1.6.因特网的域名空间

比如域名:www.cnblogs.com 。该域名由三部分组成:三级域名www;二级域名cnblogs;顶级域名com;每部分之间用隔开。

需要注意的是:

  • 域名也可以由两部分组成、四部分组成,域名组成部分数量是不定的;
  • 并非所有的域名都以www开头,也可以使用其他的三级域名比如:mail.cnblogs.com 。只不过按照习惯通常把www作为域名的开头。

1.7.关于域名注册

为了保证域名的唯一性,需要相关机构管理,我们想要申请域名则必须花钱购买。在购买域名时只需要选择相应的顶级域名和二级域名,若这两部分组成的域名全球唯一,那么在此基础上加上三级域名、四级域名组成的域名也都是全球唯一。

比如购买了域名:cnblogs.com,在此域名基础上派生出www.cnblogs.com 、mail.cnblogs.com等都是免费的,只要你有服务器派生出多少个域名都只用缴纳cnblogs.com一个域名的费用。并且由于cnblogs.com的全球唯一性,所以其派生出的域名都是全球唯一的。


二、域名服务器

  • 域名服务器的作用为,把网站域名解析成对应的IP地址。

  • 一个服务器所负责管辖的(或有权限的)范围叫做(zone)。

  • 每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。

2.1.树状结构的 DNS 域名服务器

域名服务器有以下四种类型 :

  • 根域名服务器
  • 顶级域名服务器
  • 权限域名服务器
  • 本地域名服务器

关系为:

根域名服务器:

  • 根域名服务器是最重要的域名服务器。根域名服务器并不直接把域名直接转换成 IP 地址,而是存储着所有的顶级域名服务器的域名及其 IP 地址。在使用迭代查询时,根域名服务器把下一步应当查找的顶级域名服务器的 IP 地址告诉本地域名服务器。

  • 当本地域名服务器无法解析特定的域名时,首先求助于根域名服务器。

    比如某本地域名服务器负责abc.com区域的域名解析,当本地用户输入abc.cn时,该本地域名服务器无法对其进行解析,于是第一时间求助于根域名服务器,询问负责.cn的顶级域名服务器的IP地址。

  • 在因特网上共有13 个不同 IP 地址的根域名服务器,它们的名字是用一个英文字母命名,从a 一直到 m(前13 个字母)。

  • 根域名服务器共有 13 套装置,它由分布在世界各地的许多台作为根域名服务器的机器组成。目的是为了方便用户,使世界上大部分 DNS 域名服务器都能就近找到一个根域名服务器。

    这些根域名服务器相应的域名分别是:

    a.rootservers.net;

    b.rootservers.net;

    m.rootservers.net;

顶级域名服务器(即 TLD 服务器)

  • 这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。

    比如顶级域名服务器.CN负责所有以.CN结尾的域名的解析。

  • 当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。

**权限域名服务器 **

  • 负责一个区的域名服务器。

    比如:在顶级域名服务器.com负责下的权限域名服务器abc.com,负责的是所有以abc.com结尾的域名的解析。

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

    比如:在权限域名服务器abc.com负责下的用户查询域名xyz.com,该权限域名服务器无法告诉客户最终结果,而是告诉客户权限域名服务器xyz.com的IP地址。

**本地域名服务器(默认域名服务器) **

  • 本地域名服务器即在权限域名服务器下的负责更小区域的域名服务器。比如某个大学里面的域名服务器,某公司的域名服务器。
  • 当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。
  • 可以安装字节的DNS服务器(本地域名服务器)。

2.2.提高域名服务器的可靠性

  • DNS 域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器
  • 当主域名服务器出故障时,辅助域名服务器可以保证 DNS 的查询工作不会中断。
  • 主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

2.3.域名解析过程举例

如图:根DNS的IP地址为100,里面存储着顶级域名服务器:com、net、edu、cn等的IP地址;顶级域名服务器com中存储着域名www.baidu.com对应的IP地址;顶级域名服务器net中存储着www.inhe.net对应的IP地址。

当指定DNS服务器IP地址为192的用户输入www.baidu.com域名时,IP地址为192的本地域名服务器没有查询到域名的信息,于是求助于IP地址为101的顶级域名服务器com。经查询,该顶级域名服务器(com)正好存储有该网址对应的IP地址,于是把域名解析出的IP地址告诉本地域名服务器,本地域名服务器再告诉用户。于是用户得以通过IP地址该网站。

当该用户输入www.inhe.net域名时,先在用户指定的本地域名服务器中查询,发现没有该域名的信息。于是本地域名服务器求助于顶级域名服务器com,com也没找到域名信息。于是顶级域名服务器com求助于根DNS服务器,根DNS服务器找到顶级域名服务器net的IP地址并把它告诉com,于是com通过IP地址102找到顶级域名服务器net,net找到www.inhe.net对应的IP地址后再告诉顶级域名服务器com,com再告诉本地域名服务器,本地域名服务器再告诉用户。最后用户得以通过该网站的IP地址访问该网站。

可见,顶级域名服务器com不知道的域名可以求助于根DNS服务器,根DNS服务器会告诉它去哪找相应域名,最后总能得到域名解析结果。所以,只要用户指定了一处DNS服务器,无论是88.88.88.88还是22.22.22.22,能把全球的域名解析出来。

总结

  • 主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。

    递归查询(较少用):

  • 本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

    迭代查询:

域名服务器的高速缓存

  • 每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。
  • 可大大减轻根域名服务器的负荷,使因特网上的 DNS 查询请求和回答报文的数量大为减少。
  • 为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项(例如,每个项目只存放两天)。

2.4.安装自己的DNS服务器

自己的DNS服务器相当于负责区域更小的本地DNS服务器。

适用场景

  • 提供内网网站的域名解析服务。

    比如学校内网中可能存在许多的网站,这些网站仅供内部使用,并不在互联网上开放,域名可能与互联网中的部分网站冲突。这时可以再内网中安装一个DNS服务器,提供内网网站的域名解析服务。

    并且内网的DNS服务器也知道互联网中的根域名服务器地址,只要内网DNS服务器能够访问互联网,当内网用户访问外网时也能提供相应的域名解析服务。

  • 降低到Internet的域名解析流量。

    即使无内部网站,假如校园内网2000人使用,每人访问百度时都要发送一个数据包给外网的DNS服务器进行域名解析,造成的网络流量是不可忽视的,若安装了内网DNS服务器只要有一个人访问百度,发送了一个数据包给外网的DNS服务器解析出来的IP地址会在内网DNS服务器上缓存一段时间,该段时间内内网的其余用户访问百度时,内网DNS服务器都能直接告诉它们缓存的IP地址,由此节省了重复域名解析造成的大量网络流量。

  • 存在域环境。

查看域名地址

可通过以下命令在命令行窗口查看域名地址:以搜狐网为例

nslookup www.sohu.com

“非权威应答”表示,该域名的解析是借助外网的其他DNS服务器的。

带你简单了解域名系统DNS的更多相关文章

  1. 域名系统DNS

    一.域名系统是什么 域名系统其实就是一个把主机名解析为IP地址的名字系统. 因特网使用层次树状结构的命名方法,并使用分布式的域名系统DNS.因特网的域名系统DNS被设计成一个联机分布式数据库系统,并采 ...

  2. 关于域名系统DNS解析IP地址的一些总结

    关于域名系统DNS(Domain Name System) 从域名中解析出IP地址. DNS主要由3部分组成: ① 名称解析器(resolver) ② 域名空间(domain name space) ...

  3. 套接字和域名系统DNS

    套接字产生的原因: 当应用进程通过传输层进行通信时 ,TCP和 UDP将面临同时为多个应用进程提供并行通信的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据. 为了区别每 ...

  4. 域名系统DNS和FTP

    域名系统概述 域名系统DNS(Domain Name System)是英特网使用的命名系统,用于把便于人们使用机器名字转化为IP地址. 为什么机器在处理IP数据报时要使用IP地址而不使用域名呢?IP地 ...

  5. 带你简单了解python协程和异步

    带你简单了解python的协程和异步 前言 对于学习异步的出发点,是写爬虫.从简单爬虫到学会了使用多线程爬虫之后,在翻看别人的博客文章时偶尔会看到异步这一说法.而对于异步的了解实在困扰了我好久好久,看 ...

  6. 计算机网络之域名系统DNS

    域名系统DNS 域名系统DNS(Domai NameSystem)是因特网使用的命名系统,用于把便于人们使用的机器名字转换为IP地址. 许多应用层软件经常直接使用域名系统,但计算机的用户只是间接而不是 ...

  7. 第9章 应用层(1)_域名系统DNS

    1. 域名系统DNS 1.1 主机名和域名的关系 (1)完全限定域名(Fully Qualified Domain Name, FQDN) = 主机名 + 域名 ①一个域名下可以有多个服务器/主机(如 ...

  8. 域名系统-DNS

    域名系统DNS 域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名转化为IP地址,域名系统就是名字系统. 很多应用层的软件经常直接使用DNS.DN ...

  9. 域名系统DNS简介

    域名系统(Domain Name System, DNS)是互联网的核心应用层协议之一, 它用于查询域名对应的IP地址.在使用域名访问任何网络资源时都需要先进行域名解析. www.cnblogs.co ...

随机推荐

  1. Prop验证、inheritAttrs、$attrs的用法和坑

    Prop Prop验证 Vue.component('my-component', { props: { // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证) pro ...

  2. Java入门 - 面向对象 - 04.抽象类

    原文地址:http://www.work100.net/training/java-abstract.html 更多教程:光束云 - 免费课程 抽象类 序号 文内章节 视频 1 概述 2 Java抽象 ...

  3. 痞子衡嵌入式:语音处理工具pzh-speech诞生记(2)- 界面构建(wxFormBuilder3.8.0)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是语音处理工具pzh-py-speech诞生之界面构建. 之前痞子衡设计过一个串口调试助手pzh-py-com,也专门写过一篇关于其界面构 ...

  4. Python中类属性和实例属性的区别

    在Python中经常会混淆类属性和实例属性的概念,今天专门记录一下个人理解以免日后忘记. 看下面的例子: class Tencent(): i = 10 # 此处i为类属性 def __init__( ...

  5. 移除sitemap中的entity

    下面截图是sitemap所在的位置 如果遇到什么原因,当前使用的entity被弃用需要删除,必须要把当前site map 引用的entity也一并删除. 不然会导致site map不能正常加载

  6. .Net Core建站(1):EF Core+CodeFirst数据库生成

    emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的, 然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑... 本来想着,应 ...

  7. IDEA debug下取消后续操作

    有时进行测试时,不想后面的代码执行 具体应该怎么请看下文: 测试代码 public class demo { public static void main(String[] args) { Syst ...

  8. Git详解之内部原理

    前言 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认 ...

  9. CentOS7安装docker以及错误解决

    今天在公司电脑上安装docker出现了一些问题,原先是直接用yum安装docker,一次就成功了,由于公司的网络问题导致docker安装完出现了一些问题,客户端启动了,服务端一直启动不了:Job fo ...

  10. Leetcode 题目整理-7 Remove Element & Implement strStr()

    27. Remove Element Given an array and a value, remove all instances of that value in place and retur ...