当我们打开浏览器,输入一个URL去请求我们需要的资源,但是URL是需要解析成对应的IP地址才能与远程主机建立连接,如何将URL解析成IP就是DNS的工作范畴,即使作为开发人员,这个过程我们也感觉不到,但是它却真实的存在,如果任何一台DNS服务器坏掉都会导致非常严重的互联网灾难。

  DNS服务器的解析过程如下图所示:

这个DNS解析大概有十个步骤:

第一步:浏览器会检查缓存中有没有这个域名对应的解析过的IP,如果缓存中有,这个解析过程就将结束。所以很多时候因为浏览器的DNS缓存的问题,导致访问某个资源出现问题,是因为DNS的解析出问题了。

第二步:如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。

第三步:如何、怎么知道域名服务器呢?我们的网络配置中都会有“DNS服务器地址”这个选项,如果前面的两个过程无法解析,则会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器。如下图所示:

一般这种专门的域名解析器性能都会非常好,它们一般都会缓存域名解析结果,大约80%的域名解析工作都到这里就已经完成了,所以LDNS主要承担了域名的解析工作。

第四步:如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析。

第五步:根据域名服务器返回给本地域名服务器一个所查询的主域名服务器(gLTD Server)地址。gLTD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。

第六步:本地域名服务器(Local DNS Server)再向上一步返回的gLTD服务器发送请求。

第七步:接受请求的gLTD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。

第八步:Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下根据域名得到目标的IP记录,连同一个TTL值返回给DNS Server域名服务器。

第九步:返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。

第十步:把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

清除缓存的域名:

在一般的windows环境下的命令如下图:

详解Web请求中的DNS域名解析的更多相关文章

  1. 详解web.xml中元素的加载顺序

    一.背景 最近在项目中遇到了启动时出现加载service注解注入失败的问题,后来经过不懈努力发现了是因为web.xml配置文件中的元素加载顺序导致的,那么就抽空研究了以下tomcat在启动时web.x ...

  2. 【转】详解web.xml中元素的加载顺序

    顺序为: context-param --> listeners --> filters --> servlets(如DispatcherServlet等) 详见<https: ...

  3. TOMCAT原理详解及请求过程(转载)

    转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...

  4. 详解SpringMVC请求的时候是如何找到正确的Controller

    详解SpringMVC请求的时候是如何找到正确的Controller[附带源码分析] 目录 前言 源码分析 重要接口介绍 SpringMVC初始化的时候做了什么 HandlerExecutionCha ...

  5. 详解WebService开发中四个常见问题(2)

    详解WebService开发中四个常见问题(2)   WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WO ...

  6. 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别

    详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别 http://blog.sina.com.cn/s/blog_686999de0100jgda.html   实例: ...

  7. [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    [转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...

  8. 详解WebService开发中四个常见问题(1)

    详解WebService开发中四个常见问题(1)   WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WO ...

  9. 详解 Go 语言中的 time.Duration 类型

    swardsman详解 Go 语言中的 time.Duration 类型swardsman · 2018-03-17 23:10:54 · 5448 次点击 · 预计阅读时间 5 分钟 · 31分钟之 ...

随机推荐

  1. Nodejs+Express构建网站

    1.预先安装(系统环境widows): nodejs  可在官网下载安装  https://nodejs.org/en/ visual studio code  可在官网下载安装  http://co ...

  2. Spring是什么 包括SpringBean SpringMVC SpringBoot SpringCloud

    什么是Spring:spring是个开源框架,spring mvc是基于spring的一个mvc框架,spring boot是基于spring4的条件注册的一套快速开发整合包. Spring两大特征: ...

  3. 使用commons-pool2实现FTP连接池

    ​ GitHub : https://github.com/jayknoxqu/ftp-pool 一. 连接池概述 ​ 频繁的建立和关闭连接,会极大的降低系统的性能,而连接池会在初始化的时候会创建一定 ...

  4. javascript中常见错误类型

    js中控制台报错主分两大类: 第一类:语法错误,这一类错误在javascript预解析的过程中如果遇到,则会导致整个js文件都无法执行. 另一类:统称为异常,这一类的错误会导致在错误出现的那一行之后的 ...

  5. 悟空模式-java-建造者模式

    [此是锻炼神冰铁,磨琢成工光皎洁.老君自己动钤锤,荧惑亲身添炭屑.五方五帝用心机,六丁六甲费周折.造成九齿玉垂牙,铸就双环金坠叶.身妆六曜排五星,体按四时依八节.短长上下定乾坤,左右阴阳分日月.六爻神 ...

  6. Linux CentOS 6.5 + Apache + Mariadb + PHP环境搭建

    Web自动化测试-服务端测试环境部署 by:授客 目录 一. 二. 三. 四. 五. 六. 七. 八. 九. 十. 操作系统环境:CentOS 6.5-x86_64 下载地址:http://www.c ...

  7. 通过 Cobalt Strike 利用 ms14-068

    拓扑图 攻击者(kali) 位于 192.168.245.0/24 网段,域环境位于 192.168.31.0/24 网段. 域中有一台 win7 有两张网卡,可以同时访问两个网段,以这台机器作为跳板 ...

  8. 用AndroidStudio创建so

    Android开发中经常遇到so,下面介绍用Android Studio创建so.Android Studio版本3.0.1. 一 编写代码 1 创建java类myJNI.java,并且声明一个nat ...

  9. JAVA:函数的定义、使用

      本文内容: 什么是函数 函数的定义格式 函数的重载(overload): 函数的调用使用注意 关于形式参数的使用 首发时间:2017-06-23 修改时间:2018-03-21:修改了布局,修改了 ...

  10. python中pip

    经常在安装软件过程中用pip 安装,当时的我总觉得pip是给linux还有mac用的,所以就从没有仔细研究过pip,后来用了python才知道pip这么好用 今天总结一下pip的用法 我的电脑是win ...