一、域名解析过程

1、浏览器检查缓存,域名缓存时间可以通过 TTL 属性来设置。

2、如果浏览器缓存中没有,浏览器会去查找操作系统缓存中是否有这个域名对应的 DNS 解析结果。如果要设置域名对应的 IP 地址,可以在Windows 中的配置文件 C:\Windows\System32\drivers\etc\hosts 来设置或在 Linux 中的配置文件 /etc/hosts 来设置,操作系统会缓存这个 IP 地址。

3、如果前两步无法解析时,会把域名发给 Local DNS 服务器(本地域名服务器)。如果要查询 LocalDNS 服务器的信息,在 Windows 下可以通过 ipconfig 命令查询,在 linux 下可以通过 cat /etc/resolv.conf 文件查询。

4、如果 Local DNS 仍然没有查询到,就直接到 Root DNS 服务器(根域名服务器)请求解析。

5、Root DNS 服务器返回给 Local DNS 服务器一个所查询域的 gTLD 服务器(主域名服务器),gTLD 是国际顶级域名服务器。

6、Local DNS 服务器向 gTLD 服务器发送请求。

7、gTLD 服务器返回域名对应的域名服务器地址,即域名解析任务由这个域名提供商的服务器完成。

8、在域名服务器查询到 IP 地址,连同 TTL 值返回给 Local DNS 服务器,在 Local NDS 服务器的缓存时间由 TTL 控制。

9、将解析结果返回给用户,并根据 TTL 的值在本地系统缓存。

二、查看解析结果

在 Linux 和 Windows 下都可以用 nslookup 命令来查询域名的解析结果,如下图。

另外在 Linux 系统中还可以使用 dig 命令来查询 DNS 解析过程。
 
 
三、清除域名缓存
域名解析后会主要在两个地方缓存结果,一个是 Local DNS 服务器,另一个是用户的本地机器。这两个缓存都是由 TTL 值和本地缓存大小控制的。在 Windows 中我们可以通过执行 ipconfig / flushdns 命令来刷新缓存,在 Linux 中我们可以通过执行 /etc/init.d/nscd restart 命令来清除缓存。
另外在 Java 的 JVM 中也会缓存 DNS 的解析结果,这个缓存是在 InetAddress类中完成的。它有两种缓存策略:一是正确解析后的结果缓存,另一种是失败的解析结果缓存。这两个缓存时间是在 %JAVA_HOME%\lib\security\java.security 文件中配置的。两个配置项分别是:networkaddress.cache.ttl 和 networkaddress.cache.negative.ttl,默认值分别为 -1(永不失效)和 10(缓存10秒)。如果使用InetAddress类解析域名必须是单例模式,否则每次创建实例时都要进行一次完整的域名解析,非常耗时。
 

四、域名解析的几种方式

域名解析记录主要分为 A 记录、MX 记录、CNAME 记录、NS 记录和 TXT 记录。

1、A 记录:即 Address,用来指定域名对应的 IP 地址。A 记录可以将多个域名解析到一个 IP 地址,但不能将一个域名解析到多个 IP 地址。

2、MX 记录:即 Mail Exchange,用来将某个域名下的邮件服务器指向自己的 Mail Server。设置之后正常 Web 请求仍然解析到 A 记录的 IP 地址,但是邮件的路由将会被解析到 MX 记录的 IP 地址。

3、CNAME 记录:即 Canonical Name(别名解析),可以为一个域名设置一个或多个别名。

4、NS 记录:为某个域名指定 DNS 解析服务器。

5、TXT 记录:为某个主机名或域名设置说明。

[Web] Web请求过程之二:DNS 域名解析的更多相关文章

  1. 使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之二

    好了,废话也不多说,咱们直接来看看这款MVC的造型——你可能会大吼:“这……这特么的都是些什么鬼?” 靠,告诉你吧,我也不知道这都是些什么鬼,反正以前我是没有见过这样的MVC.咦,老纸的config文 ...

  2. Java Web DNS域名解析

    一.什么是DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串 ...

  3. 域名下Web项目重定向出现DNS域名解析错误问题

    问题: 项目使用的是阿里云的ESC,前几天为IP地址添加了域名 发现发送正常请求时跳转没问题,但发送重定向请求时,页面就会出现DNS域名解析错误的情况 1.我在Tomcat的server.xml中配置 ...

  4. 深入web的请求过程

    一.深入web的请求过程 1.1.B/S网络架构概述 · 从前端到后端,都基于应用层协议HTTP来交互数据.一个请求就对应了一个操作,完成操作之后就断开了连接.基于这样的特点可以用来满足海量的用户的操 ...

  5. ASP.NET Web API 控制器创建过程(二)

    ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...

  6. Delphi 6 Web Services初步评估之二(转)

    Delphi 6 Web Services初步评估之二(转)   ★ 测试环境:CPU:PIII 550内存: 256MBOS: Windows2000 Server + SP2Web Server: ...

  7. web页面请求历程

    web页面请求历程 1)准备DHCP,UDP,IP和以太网 客户端要访问www.google.com的网站. 首先客户端要与网络相接,没有IP地址地址就不能做什么事情,所以客户端采取的一个网络相关的动 ...

  8. 手把手和你一起实现一个Web框架实战——EzWeb框架(二)[Go语言笔记]Go项目实战

    手把手和你一起实现一个Web框架实战--EzWeb框架(二)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 上一篇文章我们实现了框架的雏形,基本地 ...

  9. IIS7.5使用web.config设置伪静态的二种方法

    转自 网上赚钱自学网 .http://www.whosmall.com/post/121 近几天公司里开发的项目有几个运行在IIS7.5上,由于全站采用的是伪静态,因此从网上找到两两种方法来实现.这两 ...

随机推荐

  1. 实验二 Java面向对象程序化设计

    实验二 Java面向对象程序设计 一.  实验要求 1.完成实验.撰写实验报告,以博客方式发表在博客园 2.实验报告重点是运行结果.遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办 ...

  2. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段 在一个人孤身奋斗了将近半个学期以后,终于迎来的我们的第一次团队协作共同编码,也就是,我们的第一个结对编程练 ...

  3. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段 如今的编写,进入了一段时间的中坚阶段,小伙伴的思路虽然很一致,但是总是存在着一定问题,这就造成了我们中坚阶 ...

  4. 仿ArrayList功能的bag类

    仿ArrayList功能的bag类 要想做到能够实现ArrayList功能,首先要有一个能往里填任何类型元素的的空间,但是不能用ArrayList来创建空间,这样这个项目就没有意义,因此,我创建了一个 ...

  5. 每天学一点easyui②

    Form插件 <!DOCTYPE html> <html>       <head>         <meta charset="utf-8&qu ...

  6. 假如 GFW 遇上 ML

    我稍微试了一下梯子 我稍微试了一下梯子,在有梯子的情况下进行google搜索,然后wireshark 抓包.所有问题跃然纸上 当前我认为:> 只要你和一个非国内的服务器长时高频交换数据,基本上就 ...

  7. 数据库SQL中Like的用法总结

    最先做项目多次用到LIKE语句,下面总结下经常用到了. 语法 match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ] 参数 ...

  8. jquery 点击弹出层自身以外的任意位置,关闭弹出层

    <!--弹出层---> <div class="mask">    <div class="wrap"></div&g ...

  9. c++的继承方式

    c++的继承,因为学完过的时间太长,忘了,现在再温习一下. c++的继承方式 1. 公有继承(public) 2. 私有继承(private) 3. 保护继承(protected) 从一个基类派生的继 ...

  10. ubuntu 中安装memcache,并给出一个简单的实例·

    Memcache分为两部分,Memcache服务端和客户端.Memcache服务端是作为服务来运行的,所有数据缓存的建立,存储,删除实际上都是在这里完成的.客户端,在这里我们指的是PHP的可以调用的扩 ...