一、域名解析过程

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. 20135234mqy-——信息安全系统设计基础第三周学习总结

    (1)计算机将信息按位编码,通常组成字节序列.用不同的编码方式表示整数,师叔和字符串.不同的计算机模型在编码数字和多字节数据中的字节排序时使用不同的约定. (2)C语言的设计可以包容多种不同字长和数字 ...

  2. 复杂PC问题——信号量与共享存储区

    #include <stdio.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/sem.h ...

  3. arcgis for android apk太大

    原来大概都要20多M, 太大的原来是.so文件 arcgis for android api里面有armeabi armeabi-v7a  x86的 每个so都接近10m 要是都保留就20多m了 由于 ...

  4. 西门子S7系列PLC的主要种类及应用软件

    德国西门子(SIEMENS)公司生产的可编程序控制器在我国的应用也相当广泛,在冶金.化工.印刷生产线等领域都有应用.西门子(SIEMENS)公司的PLC产品包括LOGO,S7-200,S7-300,S ...

  5. vue 选项卡(转载)

    !DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-e ...

  6. 电脑CPU开机上电后的第一条指令

    结合上面的文章,CPU上电后第一条指令是通过CS:IP来指定的,CPU厂家会给其初始值,对于386处理器来说,CPU第一条指令地址是 0xFFFFFFF0 这里会有一个问题,CPU怎么能一上来就去0x ...

  7. php连接池 php–cp

    原文地址:http://blog.sina.com.cn/s/blog_9eaa0f400102v9fd.html 数据库连接池php-cp介绍时间 2015-01-23 11:53:05 数据库连接 ...

  8. 微信小程序 功能函数picker-view的弹出模态

    <view class="list"> <form bindsubmit="formSubmit"> <view class=&q ...

  9. Dubbo学习(九) Dubbo面试问题

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的 ...

  10. 笔记:delphi 与 Query

    以下不保存证正确 Query用SQL语言执行过的,没有必要Cancel.Post,因为其会对数据库直接操作:执行Update.Insert.Delete请用SQL语句: 用Table使用对当前记录直接 ...