DNS原理

DNS简介

DNS全称Domain Name System,即域名解析系统。

域名(domain name)是IP地址的代号,域名解析系统(DNS, domain name system)就负责将域名翻译为对应的IP地址。DNS协议主要基于UDP,是应用层协议。

1、在浏览器的地址栏输入域名,而不是IP地址。减轻了互联网用户的记忆负担。

2、网站可能会变更IP地址。可以更改DNS中的对应关系,从而保持域名不变,而IP地址更新。

域名和IP地址的对应关系存储在DNS服务器(DNS server)中

域名的层级结构

主机名.次级域名.顶级域名.根域名

host.sld.tld.root

DNS解析过程

以下步骤中,DNS缓存中存在域名对应IP则DNS解析成功,若DNS服务器缓存中不存在域名对应IP,则自动进入下一步

  1. 浏览器缓存,当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址

  2. 系统缓存,检查用户计算机系统Hosts文件是否有该域名对应IP;

  3. 路由器缓存,当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;

  4. ISP(互联网服务提供商)DNS缓存,当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;

  5. 根域名服务器,全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;

  6. 顶级域名服务器,顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名(如ecdoer.com)服务器的IP地址告诉本地DNS服务器;

  7. 主域名服务器,主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器(www.ecdoer.com)进行查找,并重复该步骤直至找到正确纪录;

  8. 保存结果至缓存,本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接

hosts 映射

可以配置本地的域名解析

cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost 

DNS查询

查询是否正常解析

nslookup kailian.github.io
Server:     202.96.134.33
Address:    202.96.134.33#53

Non-authoritative answer:
kailian.github.io   canonical name = github.map.fastly.net.
github.map.fastly.net   canonical name = prod.github.map.fastlylb.net.
Name:   prod.github.map.fastlylb.net
Address: 151.101.36.133

查询注册情况

whois github.com

Whois Server Version 2.0

Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to http://www.internic.net
for detailed information.

GITHUB.COM.KHALEDELANSARI.COM
GITHUB.COM

...

dig显示整个查询过程

dig kailian.github.io

# 查询参数和统计
<<>> DiG 9.8.3-P1 <<>> kailian.github.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60058
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

# 查询内容
;; QUESTION SECTION:
;kailian.github.io.     IN  A

# DNS答复
;; ANSWER SECTION:
kailian.github.io.  2566    IN  CNAME   github.map.fastly.net.
github.map.fastly.net.  600 IN  CNAME   prod.github.map.fastlylb.net.
prod.github.map.fastlylb.net. 600 IN    A   151.101.16.133

#DNS传输信息
;; Query time: 39 msec
;; SERVER: 202.96.134.33#53(202.96.134.33)
;; WHEN: Sat Jul 16 21:46:39 2016
;; MSG SIZE  rcvd: 125 

分级查询

  • 从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录(IP地址)

  • 从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录(IP地址)

  • 从"次级域名服务器"查出"主机名"的IP地址

dig +trace kailian.github.io

; <<>> DiG 9.8.3-P1 <<>> +trace kailian.github.io
;; global options: +cmd
.           326984  IN  NS  m.root-servers.net.
.           326984  IN  NS  a.root-servers.net.
.           326984  IN  NS  b.root-servers.net.
.           326984  IN  NS  c.root-servers.net.
.           326984  IN  NS  d.root-servers.net.
.           326984  IN  NS  e.root-servers.net.
.           326984  IN  NS  f.root-servers.net.
.           326984  IN  NS  g.root-servers.net.
.           326984  IN  NS  h.root-servers.net.
.           326984  IN  NS  i.root-servers.net.
.           326984  IN  NS  j.root-servers.net.
.           326984  IN  NS  k.root-servers.net.
.           326984  IN  NS  l.root-servers.net.
;; Received 432 bytes from 202.96.134.33#53(202.96.134.33) in 201 ms

io.         172800  IN  NS  ns-a1.io.
io.         172800  IN  NS  ns-a2.io.
io.         172800  IN  NS  ns-a3.io.
io.         172800  IN  NS  ns-a4.io.
io.         172800  IN  NS  ns-d1.io.
io.         172800  IN  NS  ns-l1.io.
io.         172800  IN  NS  ns-y1.io.
;; Received 427 bytes from 193.0.14.129#53(193.0.14.129) in 9275 ms

github.io.      86400   IN  NS  ns2.p16.dynect.net.
github.io.      86400   IN  NS  ns3.p16.dynect.net.
github.io.      86400   IN  NS  ns4.p16.dynect.net.
github.io.      86400   IN  NS  ns1.p16.dynect.net.
;; Received 121 bytes from 64.251.31.179#53(64.251.31.179) in 512 ms

kailian.github.io.  3600    IN  CNAME   github.map.fastly.net.
;; Received 70 bytes from 204.13.251.16#53(204.13.251.16) in 384 ms

列出根域名.的所有NS记录,即所有根域名服务器

根据内置的根域名服务器IP地址,DNS服务器向所有这些IP地址发出查询请求,询问域名的顶级域名服务器io.的NS记录。

DNS的记录

记录格式

Domain_name Time_to_live Class Type Value

Time_to_live 生存时间,记录最多可以缓存多久

value 如果是A记录,则value是一个IPv4地址;CNAME记录,则是别名

常见的记录类型type如下:

记录类型 含义
A 主机的IPv4地址
AAAA 主机的IPv6地址
NS 该域名所在域的权威域名服务器
MX 接受特定域名电子邮件的服务器域名
CNAME 当前域名的一个别名

DNS相关优化

1) 增加DNS服务器数量

减小服务器压力,当单位服务器需要处理的DNS请求数量较少时速度会更快;

2) 全国多地分布DNS服务器

用户网络访问速度跟用户计算机到服务器的距离有关,若可以让用户就近访问所在省份的服务器便可以加速DNS解析速度;

3) 双线线路域名解析

当用户网络线路跟服务器网络线路一致时速度较快,而不一致时则较慢,如:用户使用电信的线路但服务器是联通的线路,访问速度下降

同时解析联通和电信,默认的或者通用的走电信线路,联通的就走联通线路

4) 配置比较快的公共DNS,优先配置国内的

5) DNS预解析

DNS预解析,对页面出现的的域名提前解析

<link rel="dns-prefetch" href="//domain.com">

6)减少域名数量

减少不同域名的数量减少DNS的查询,包括页面中的链接,图片,脚本文件,样式表,Flash对象等,将组件分布在两到四个域名之间

公共DNS

公共DNS服务器,即系统默认的DNS解析服务器。配置国外的DNS,可能导致域名有时候解析失败。

查看配置

cat /etc/resolv.conf

search DHCP HOST
nameserver 202.96.134.33
nameserver 202.96.128.86

常用的公共DNS

114 DNS

114.114.114.114
114.114.115.115

阿里 AliDNS

223.5.5.5
223.6.6.6

baidu DNS

180.76.76.76

Google DNS

8.8.8.8
8.8.4.4

广东电信 DNS

202.96.128.86
202.96.128.166
202.96.134.33
202.96.128.68

参考

DNS解析过程原理

DNS 原理入门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202...
    爱睡觉的魚阅读 608评论 1 4
  • dns查询过程解析 DNS查询模式有递归查询和迭代查询,他们的区别如下: (1)递归查询 递归查询是一种DNS 服...
    think_lonely阅读 799评论 0 1
  • 作者:阮一峰原文地址:http://www.ruanyifeng.com/blog/2016/06/dns.htm...
    IT程序狮阅读 823评论 0 6
  • 古有一人,名怀德,面善而正,好口福,为官数年,得提携入京,亲属具往。 是夜,天降大雨,幸得孤宅。宅内老翁...
    榆钱串串阅读 312评论 0 1
  • 这2天接触了微信服务号的开发, 分享一下我的小技巧 存在问题 由于需要和微信服务器进行主动和被动通信. 在做微信开...
    PeterQ1998阅读 873评论 0 1