浏览器的DNS解析过程分析


前言

DNS(Domain Name System)域名系统,因为访问一台服务器只能通过IP来访问,所以需要先将域名转换成IP地址。

解析流程

以chrome浏览器访问mail.baidu.com网址为例,

  1. 检查浏览器缓存中是否存在该域名对应的IP,如果存在则解析结束,否则继续。

  2. 检查操作系统的hosts文件,以windows系统为例,一般在 C:\Windows\System32\drivers\etc 下,如果有则结束,否则继续。

  3. 检查操作系统的dns缓存,如果存在则结束,否则继续,以windows系统为例

     查询dns缓存           ipconfig /displaydns
     导出dns缓存到文件     ipconfig /displaydns > D:/testjar/dns.txt
     清除dns缓存           ipconfig /flushdns
    

    以博客园域名 www.cnblogs.com 为例,查询出的记录格式为

     记录名称. . . . . . . : www.cnblogs.com
     记录类型. . . . . . . : 1
     生存时间. . . . . . . : 229
     数据长度. . . . . . . : 4
     部分. . . . . . . . . : 答案
     A (主机)记录  . . . . : 101.37.113.127
    
  4. 到本地域名服务器去查询,有则结束,否则继续。以windows系统为例

     查询域名服务器地址  ipconfig /all
    

  5. 本地域名服务器去查询根域名服务器(全球只有13台),会返回下级服务器(顶级域名服务器)的地址

  6. 本地域名服务器去查询顶级域名服务器(在这里就是com服务器),同样返回二级域名服务器的地址

  7. 本地域名服务器去查询二级域名服务器(baidu.com服务器),同样返回三级域名服务器的

  8. 本地域名服务器去查询三级域名服务器(mail.baidu.com服务器),此时已经是最后一级,如果有则解析结束,且本地域名服务器缓存中加入此对应关系,方便下次查询,
    同时返回给浏览器,没有找到则浏览器网页报错。

上面的1,2,3,4步可以叫做递归查询,5,6,7,8步可以叫做迭代查询。

浏览器查看和清除dns缓存

清除dns缓存

以chrome浏览器为例,netlog_viewer页面(要FQ)

导入之前保存的文件,就可以查看dns信息了

java中进行DNS解析

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Client {

  public static void main(String[] args) throws UnknownHostException {
    InetAddress[] inetAddresses = InetAddress.getAllByName("www.baidu.com");
    for (InetAddress inetAddress : inetAddresses) {
      System.out.println(inetAddress.getHostAddress());
    }
    //36.152.44.96
    //36.152.44.95
  }

}

参考

浏览器之DNS解析过程详解

如何查看chrome浏览器的DNS缓存