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

www.cnblogs.com是一个典型的域名, 在进行Http访问之前它会先被DNS转换为一个ip地址.

域名与目录树类似形成一个树状结构, 最右侧为顶级域, 向左域名级别降低.

所有域名都属于根域. 根域由13组根域名服务器管理, 从A.ROOT-SERVERS.NETM.ROOT-SERVERS.NET.

根域的下一级为顶级域(top level domain, TLD), 如通用顶级域名.com, .net, .gov和地区顶级域名.cn, .jp等. 下一级为次级域名, 如cnblogs, baidu, google.

最低级的为主机名, 如www, mail等.

根域下顶级域名的分配和使用由非营利性的互联网名称与数字地址分配机构(Internet Corporation for Assigned Names and Numbers, ICNN)管理.

顶级域下次级域名由各地区的域名管理机构管理, 主机名则由域名拥有者自己管理.

域名解析

域名系统是一个典型的分布式数据库, 每个名称服务器(nameserver)只存储着部分数据. 当其无法解析某个域名时, 就向其它服务器请求解析直到成功解析或超时.

下面简单介绍DNS解析过程:

  1. 查询本地hosts文件, unix系操作系统一般在/etc/hosts

  2. 若hosts文件不存在相关记录, 则检查本地DNS缓存.

  3. 若本地DNS缓存不存在相关记录则查询首选名称服务器.

若目标域名处在名称服务器的管理之下, 则名称服务器可以给出可靠的解析结果.

若目标域名不属于名称服务器管理但在它的缓存中, 名称服务器可以根据它的缓存给出一个不可靠的解析结果.

若首选名称服务器无法解析域名, 根据名称服务器的配置有两种策略:

  • 若本地DNS配置了转发, 则请求转发给上一级DNS解析. 上级DNS将解析结果返回给本地DNS, 由本地DNS返回给客户端.

  • 若本地DNS未配置转发, 则自顶向下查询:

  1. 本地DNS请求根服务器(共13台), 根服务器将顶级域名主名称服务器的IP地址返回给本地DNS.
  2. 本地DNS则请求顶级域名服务器. 若顶级域名服务器可以解析则将结果返回给本地DNS, 由本地DNS返回给客户端.
  3. 若顶级域名服务器无法解析则返回下一级主名称服务器地址, 直到某一级DNS成功解析.

DNS记录

DNS是一个分布式的数据库, 名称服务器使用DNS记录(dns record)保存域名和IP之间的关系.

名称服务器使用区域文件(zone file)保存自己的记录, 区域文件中除了DNS记录外还定义了一些环境变量.

  • $ORIGIN表示本NS管理的域, 如$ORIGIN example.com.表示本NS管理 example.com域.

  • $TTL表示解析记录在缓存中的默认过期时间.

这是一个区域文件的示例, 可以让我们更好地理解区域文件:

$ORIGIN example.com.
$TTL 1h
example.com. IN SOA ns.example.com. username.example.com. ( 2007120710 1d 2h 4w 1h )
example.com. IN NS ns
example.com. IN NS ns.somewhere.example.
example.com. IN MX 10 mail.example.com.
@ IN MX 20 mail2.example.com.
@ IN MX 50 mail3
example.com. IN A 192.0.2.1
IN AAAA 2001:db8:10::1
ns IN A 192.0.2.2
IN AAAA 2001:db8:10::2
www IN CNAME example.com.
wwwtest IN CNAME www
mail IN A 192.0.2.3
mail2 IN A 192.0.2.4
mail3 IN A 192.0.2.5

DNS记录有以下几种类型:

A记录和AAAA记录

A记录是IPv4主机记录, AAAA为IPv6主机记录, 如下面这一条:

example.com.  IN  A     192.0.2.1
IN AAAA 2001:db8:10::1

它表示主机example.com对应的IPv4地址为192.0.2.1, IPv6地址为2001:db8:10::1.

第二个字段IN表示Internet, 这一字段会出现在很多记录中.

最后加.表示采用绝对路径, 区域文件也可以用相对路径来配置.

下面两条记录的作用是一样的:

www.example.com. IN A 192.0.2.2

相对路径表示:

www IN A 192.0.2.2

@$ORIGIN记录了IP地址, 下面这条记录配置了example.com主机的IP地址:

@ IN A 192.0.2.1

SOA记录

授权开始(Start of Authority, SOA)记录是区域文件的第一条记录, 用于记录为本服务器授权的上级名称服务器.

example.com.  IN  SOA   ns.example.com. username.example.com. (
2007120710 ; serial number
1d ; refresh interval
2h ; retry interval
4w ; expiry period
1h ; negative TTL
)

上述记录表示域example.com的主名称服务器为ns.example.com.

username.example.com.表示管理员邮箱为username@example.com, 注意@被替换为..

后面的字段表示:

  • serial number表示本服务器记录的版本号, 每次修改版本号就会加1. 通过比较本服务器版本号和上级服务器版本号已进行同步.
  • refresh interval表示向SOA服务器请求更新记录的间隔
  • retry interval表示向SOA服务器请求更新记录失败时的重试周期
  • expiry period表示SOA服务器若在此时间内不响应, 则不再将其作为SOA服务器
  • negative ttl表示当查询结果为无此记录时, 缓存该结果的时间

NS记录

ns记录用于表示某个域的名称服务器:

example.com.  IN  NS    ns
example.com. IN NS ns2.example.com.

上述两条记录表示example.com域的名称服务器为ns.example.com, 备用名称服务器为ns2.example.com.

每个区域文件中至少定义两个名称服务器,以便在一个服务器出现问题时还能正确运行. 如果只有一个名称服务器,大多数 DNS 服务器软件都会认为区域文件无效.

在自顶向下查询过程中, 父域的名称服务器根据自己的ns记录确定子域的名称服务器.

MX记录

MX记录用于表示某个域的邮件服务器:

example.com.  IN  MX  10 mail.example.com.

上述记录表示mail.example.comexample.com域的邮件服务器.

也可以使用@表示根域, 使用相对路径表示邮件服务器.

@             IN  MX    20 mail2.example.com.
@ IN MX 50 mail3

记录中第4个字段的数字表示优先级, 数字越小优先级越高.

CNAME记录

CNAME记录用于记录域名别名:

www           IN  CNAME example.com.
wwwtest IN CNAME www

上述记录表示www.example.comexample.com的一个别名, wwwtest.example.com又是www.example.com的一个别名.

DNS工具

配置本地nameserver

在我们可以使用域名访问网络前, 需要先配置本地的名称服务器. 本地名称服务器可以由DHCP协议动态分配, 也可以手动配置.

Unix系列操作系统, 在/etc/resolv.conf配置文件中设置nameserver:

nameserver 172.18.49.59

为自己的网站配置域名

首先, 自己网站的服务器需要拥有一个公网IP, 使得我们在互联网上可以直接访问该主机.

随后可以在域名提供商处购买自己的域名, 比如finley.cn. 然后在域名提供商处添加A记录将域名解析到自己主机的公网ip.

查询所有者

whois指令可以查询域名所有者的信息:

& whois cnblogs.com
Domain Name: cnblogs.com
Registry Domain ID: 866509_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.35.com
Registrar URL: http://www.35.com
Updated Date: 2016-10-23T22:59:39Z
Creation Date: 2003-11-11T04:00:00Z
Registrar Registration Expiration Date: 2021-11-11T04:00:00Z
Registrar: 35 Technology Co., Ltd.
...

DNS查询

host命令可以查询某个域名的ip:

$ host cnblogs.com
cnblogs.com has address 42.121.252.58 cnblogs.com mail is handled by 30 aspmx2.googlemail.com.
cnblogs.com mail is handled by 30 aspmx3.googlemail.com.
cnblogs.com mail is handled by 30 aspmx4.googlemail.com.
cnblogs.com mail is handled by 30 aspmx5.googlemail.com.
cnblogs.com mail is handled by 10 aspmx.l.google.com.
cnblogs.com mail is handled by 20 alt1.aspmx.l.google.com.
cnblogs.com mail is handled by 20 alt2.aspmx.l.google.com.

nslookup可以交互式查询:

 $ nslookup
> cnblogs.com
Server: 172.18.49.59
Address: 172.18.49.59#53 Non-authoritative answer:
Name: cnblogs.com
Address: 42.121.252.58

dig命令可以看到DNS解析过程:

dig cnblogs.cn

; <<>> DiG 9.8.3-P1 <<>> cnblogs.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54154
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 0 ;; QUESTION SECTION:
;cnblogs.cn. IN A ;; ANSWER SECTION:
cnblogs.cn. 600 IN CNAME fw1.22.cn.
fw1.22.cn. 973 IN CNAME 22url.lncdn.com.
22url.lncdn.com. 27 IN A 103.13.73.87
22url.lncdn.com. 27 IN A 162.251.94.12
22url.lncdn.com. 27 IN A 162.251.94.101 ;; AUTHORITY SECTION:
lncdn.com. 112713 IN NS ns2.360dns.net.
lncdn.com. 112713 IN NS ns1.360dns.org.
lncdn.com. 112713 IN NS ns2.360dns.org.
lncdn.com. 112713 IN NS ns1.360dns.net. ;; Query time: 69 msec
;; SERVER: 172.18.49.59#53(172.18.49.59)
;; WHEN: Tue May 9 17:03:53 2017
;; MSG SIZE rcvd: 218

域名系统DNS简介的更多相关文章

  1. 带你简单了解域名系统DNS

    带你简单了解域名系统DNS 一.域名简介 1.1.DNS服务的作用 负责解析域名,将域名解析成IP地址. 1.2.域名系统概述 由于32位的IP地址并不容易记忆,人们往往喜欢记忆网站的域名.所以当我们 ...

  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. 域名系统DNS

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

  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 域名系统的简介

    一.DNS域名系统简介 1.网络中为了区别各个主机,必须为每台主机分配一个唯一的地址, 这个地址即称为“IP 地址.但这些数字难以记忆, 所以采用“域名” 的方式来取代这些数字. 2.当某台主机要与其 ...

随机推荐

  1. 51nod1305

    可以暴力,但这里学习了一个新思路,就是把原式进行分解会得到[1/a[i]+1/a[j]],因为向下取整,我们可以发现,1作用于1结果为2,1作用于除了1之外的数结果为1,2作用于2结果为1,所以我们只 ...

  2. Alpha 冲刺 (6/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...

  3. jquery中siblings方法配合什么方法一起使用

    siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的.接下来通过本文给大家介绍jQuery siblings()用法实例详解,需要的朋友参考下吧 siblings() 获得匹 ...

  4. 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图

    [源码下载] 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获 ...

  5. 准备情人节礼物比写代码难?来看看IT直男给女友们的礼物

    今天是情人节,据说IT直男在每个这样弥漫着恋爱气息的日子里都能把礼物送成"辣眼睛"现场,为了反(zheng)驳(shi)这个观点,小编特意走访了网易云的架构师.工程师.产品经理.程 ...

  6. Learning WCF:Fault Handling

    There are two types of Execptions which can be throwed from the WCF service. They are Application ex ...

  7. java之vector详细介绍

    1 vector介绍 Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口 ...

  8. 《Opencv 3 计算机视觉 python语言实现》· 第二遍 —— 读后笔记

    概览 代码实战 https://github.com/xinghalo/ml-in-action/tree/master/book-opencv

  9. kubernetes集群搭建(4):node节点安装

    下列所有操作需要在所有node节点上操作,并注意红色部分的修改 1.node节点不需要安装etcd来存储相关信息 yum -y install flannel kubernetes 2.修改flann ...

  10. docker学习篇(二)---- 基础篇

    引言 在之前的学习中,我知道了docker的三大组件分别是----镜像,容器,仓库.了解了这三个组件也就初步理解了docker.所以我学习了这三个组件,并记录下来. 镜像 docker在运行一个容器时 ...