DNS域名解析过程

当用户在浏览器输入wwww.xxx.com时,DNS解析将会有近10个步骤.

  1. 浏览器检查缓存有没有该域名对应的IP.如果有,这个解析过程就结束.浏览器缓存的域名是有限制的,不仅大小有限制,时间也有限制,通过TTL属性设置域名缓存时间.
  2. 浏览器缓存中没有,检查操作系统缓存中是否有解析结果.如果有,解析结束.没有的话,请求域名服务器解析该域名.
  3. 网络配置有配置DNS服务器地址,操作系统把域名送给这里的LDNS. Linux下通过以下命令查看.

    1
    cat /etc/resolv.conf
  4. LDNS未命中,直接到Root Server域名服务器请求解析.

  5. 根据域名服务器返回本地域名服务器一个服务器地址(gTLDServer).gTLD是国际顶级域名服务器, 如.com, .cn, .org等,全球只有13台左右.
  6. 本地域名服务器再向上一步返回的gTLD服务器发送请求.
  7. gTLD服务器查找并返回次域名对应的Name Server域名服务器地址,这个Name Server通常就时你注册的域名服务器.
  8. Name Server域名服务器查询存储的域名和IP映射关系,正常情况下查询到目标IP记录,连同一个TTL值返回给DNS Server域名服务器.
  9. 返回该域名对应的IP和TTL值, Local DNS Server会缓存该记录.
  10. 解析结果返回给用户, 用户根据TTL值缓存这个记录.
    实际过程,可能不止这10个步骤,如Name Server有多级或者有个GTM负载均衡控制,这都会影响域名解析的过程.

跟踪域名解析过程

Dig是linux中域名解析工具,功能比nslookup强很多,Dig是Domain information groper的缩写.
  1. Dig命令告诉我们他的版本,全局的设置选以及返回的技术信息: dig www.google.cn

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.google.cn
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28138
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;www.google.cn. IN A

    ;; ANSWER SECTION:
    www.google.cn. 52 IN A 203.208.43.81
    www.google.cn. 52 IN A 203.208.43.80
    www.google.cn. 52 IN A 203.208.43.83
    www.google.cn. 52 IN A 203.208.43.82
    www.google.cn. 52 IN A 203.208.43.84

    ;; Query time: 0 msec
    ;; SERVER: 127.0.1.1#53(127.0.1.1)
    ;; WHEN: Tue Oct 25 19:39:01 CST 2016
    ;; MSG SIZE rcvd: 122
  2. 默认情况下Dig采用udp协议进行查询,如果要采用tcp方式可以手动指定,+tcp参数: dig www.google.cn +tcp

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.google.cn +tcp
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42783
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4000
    ;; QUESTION SECTION:
    ;www.google.cn. IN A

    ;; ANSWER SECTION:
    www.google.cn. 223 IN A 203.208.51.49
    www.google.cn. 223 IN A 203.208.51.48
    www.google.cn. 223 IN A 203.208.51.52
    www.google.cn. 223 IN A 203.208.51.50
    www.google.cn. 223 IN A 203.208.51.51

    ;; Query time: 8 msec
    ;; SERVER: 127.0.1.1#53(127.0.1.1)
    ;; WHEN: Tue Oct 25 19:41:12 CST 2016
    ;; MSG SIZE rcvd: 122
  3. +trace参数,显示从根域逐级查询的过程: dig www.google.cn +trace

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    ; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.google.cn +trace
    ;; global options: +cmd
    . 55112 IN NS c.root-servers.net.
    . 55112 IN NS f.root-servers.net.
    . 55112 IN NS b.root-servers.net.
    . 55112 IN NS e.root-servers.net.
    . 55112 IN NS d.root-servers.net.
    . 55112 IN NS a.root-servers.net.
    . 55112 IN NS l.root-servers.net.
    . 55112 IN NS j.root-servers.net.
    . 55112 IN NS g.root-servers.net.
    . 55112 IN NS k.root-servers.net.
    . 55112 IN NS m.root-servers.net.
    . 55112 IN NS h.root-servers.net.
    . 55112 IN NS i.root-servers.net.
    ;; Received 884 bytes from 127.0.1.1#53(127.0.1.1) in 0 ms

    cn. 172800 IN NS a.dns.cn.
    cn. 172800 IN NS b.dns.cn.
    cn. 172800 IN NS c.dns.cn.
    cn. 172800 IN NS d.dns.cn.
    cn. 172800 IN NS e.dns.cn.
    cn. 172800 IN NS ns.cernet.net.
    cn. 86400 IN DS 41470 8 2 3623FB6E3B1F69C6855DA1E48D3A38236DD2EDF0380FB018FF538650 EAC2C4DD
    cn. 86400 IN RRSIG DS 8 1 86400 20161106170000 20161024160000 39291 . fmJlodyHRq9ERhlLTlS05bjk7no2ueo7HK/8tOsYP7TmgqcZbRzi/i03 ikzRj7/ylilLHVikgnOhIrxOl/h80Q9O2M0FinXEpbKWN+weGM9Ge3Fe 8qiOFoV1xCwEVCats7v+jrw+1ZRtZB01Z8OqAD18ufIeQW+8UvX3C4WQ dDPcnI4E0L/Trs6I7DKlGKODHcWfx9NXgLWkgHTGoRkXKjSHxpqiBNbP wGD4CsiOFqlCm0uLL+rW3NnQ8MoEBvCY8zbBtGy61Oa6ylPlQApnWQYZ 6BSI1+cviiDzRGkqOeuUxDYnbhN38IC9sOKHg9j6PXaGAj8PyUQFOnLR v546ZA==
    ;; Received 640 bytes from 198.41.0.4#53(a.root-servers.net) in 56 ms

    google.cn. 86400 IN NS ns2.google.com.
    google.cn. 86400 IN NS ns3.google.com.
    google.cn. 86400 IN NS ns1.google.com.
    google.cn. 86400 IN NS ns4.google.com.
    3QDAQA092EE5BELP64A74EBNB8J53D7E.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3QLMP0QRNQ96G5AFGOPNB7U7IJ4MBP4B NS SOA RRSIG DNSKEY NSEC3PARAM
    3QDAQA092EE5BELP64A74EBNB8J53D7E.cn. 21600 IN RRSIG NSEC3 8 2 21600 20161111130302 20161012120730 55980 cn. N0v6FtihjDGw5I01bRGdQ8HFdbSjfQX0MD33qY7xbPM0SZ+7Js7yyTr/ G3HqI9tdgkyxKklGy2FDpZtVqcOjzkjAG1NrDx/1+ZYCX8FB52C4zG/g eOS2DynLI0Szt5nXnE2hEDwPsWgeeBRENaRuBfi4qFbZSh3fFLErZIAZ 4sM=
    8TM10SUG7NMG1C1GU6KIL3P61OE3JKI2.cn. 21600 IN NSEC3 1 1 10 AEF123AB 8TN7D4R99B9F9CM0C56QGJVQNGD0TU04 CNAME RRSIG
    8TM10SUG7NMG1C1GU6KIL3P61OE3JKI2.cn. 21600 IN RRSIG NSEC3 8 2 21600 20161110135823 20161011130746 55980 cn. s7Nxb8qiRzJhbC4nZoJj22gfiUn41CHGYQuvscLkoBOwL0VMsch+UHCr xIYLSr7ArNc4fzjHtdpjIqC3VbcK0+Z/R0lrJ5jB4swYtYJTnj8tgL3R sRdNwrpp7JjKPCgUK+U/96UZJi/EE75KFxCoA2PZIG7I14i9nyHQ7+Zz yD8=
    ;; Received 615 bytes from 203.119.29.1#53(e.dns.cn) in 33 ms

    www.google.cn. 300 IN A 203.208.51.83
    www.google.cn. 300 IN A 203.208.51.81
    www.google.cn. 300 IN A 203.208.51.80
    www.google.cn. 300 IN A 203.208.51.84
    www.google.cn. 300 IN A 203.208.51.82
    ;; Received 111 bytes from 216.239.36.10#53(ns3.google.com) in 63 ms
  4. 当我们需要一个快速回答时, +short选项可以用起来: dig www.google.cn +short

    1
    2
    3
    4
    5
    203.208.48.49
    203.208.48.52
    203.208.48.51
    203.208.48.50
    203.208.48.48

几种域名解析方式

  • A记录,指定域名对应IP
  • MX记录,表示Mail Exchange,将某个域名下邮件服务器指向自己Mail Server.正常通过Web请求仍然解析A记录IP.
  • CNAME记录, Canonical Name(别名解析).
  • NS记录,为某个域名指定DNS解析服务器.
  • TXT记录,为某个主机名或域名设置说明.