基本概念详解之一——域名解析与DNS缓存

注意: 本文主要介绍了域名解析流程即DNS缓存相关知识

[转载请注明]

欢迎交流QQ群: 640765823

一、 DNS是什么?

DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

DNS协议是应用层协议,事实上它是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。

二、 域名是什么?

域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)

例如,www.wikipedia.org是一个域名,和IP地址208.80.152.2相对应。DNS就像是一个自动的电话号码簿,我们可以直接拨打wikipedia的名字来代替电话号码(IP地址)。我们直接调用网站的名字以后,DNS就会将便于人类使用的名字(如www.wikipedia.org)转化成便于机器识别的IP地址(如208.80.152.2)。

域名划分

顶级域名又称为根域名、一级域名、裸域名,一级域名中只含有一个“.”,且“.”左边要有内容字段。最后一个点的右边被称为一级域名,左边被称为二级域名,以此类推二级三级域名

顶级域名后缀列表:

.com:表示商业机构
.top:表示顶级、高端、事业突破
.xyz:表示创意创新、三维空间、无极限
.cx:表示创新、诚信
.red:表示吉祥、热情、勤奋
.net:表示网络服务机构
后缀名
后缀名
.org:表示非营利性组织
.gov:表示政府机构
.edu:表示教育机构
.mil:表示军事机构
.biz:表示商业机构
.name:表示个人网站
.info:表示信息提供
.mobi:专用手机域名
.国家缩写(如.cn):表示国家内部企业或个人

三、 浏览器发送Http请求时的域名解析过程

1、浏览器检查缓存中有没有该域名对应的IP地址,如果缓存中存在解析值,则直接将该IP返回

2、如果浏览器缓存中没有,则去操作系统的DNS缓存服务中查找,再去hosts文件中查找

3、如果操作系统缓存中没有 去local DNS Server(LDNS)本地DNS服务器中去找(比如 学校、小区里的互联网服务提供商电信联通的DNS服务器)

4、若LDNS没有命中,去Root Server DNS服务器 根域名服务器中找

5、返回给LDNS一个所查询域的主域名服务器地址gTLD Server(国际顶级域名服务器)如com、cn、org

6、LDNS向gTLD发送请求

7、gTLD返回给域名对应的Name Server

8、Name Server(就是你注册的域名服务器)查询域名对应的IP 连同TTL值(缓存的时间由TTL值控制)返回给LDNS

9、LNDS缓存域名与对应IP

10、返给用户 根据TTL 缓存在本地系统缓存中

下图为网上的DNS解析流程图,与上面的描述稍微有些区别:

DNS缓存记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少,经过实验,操作系统缓存DNS时会参考ttl值,但是不完全等于ttl值,而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。

修改hosts文件原理

在修改hosts文件后,所有操作系统中DNS缓存会被清空,而浏览器缓存则不发生变化。

为什么修改hosts文件之后,有时会立刻生效,有时却一直不生效呢?

其实原因很简单,这是因为浏览器缓存的过期时间,是从某个域名上次查询DNS记录开始计算的。

例如:我在00秒的时候使用chrome访问过www.google.com.hk,此时浏览器DNS缓存产生,然后我修改了hosts文件,将www.google.com.hk指向本地127.0.0.1,然后在05秒的时候尝试再次访问这个地址,因为浏览器DNS缓存未过期,所以hosts修改无法体现出来。

另一种情况下,很久都没有访问www.baidu.com了,然后我修改了hosts文件,将其指向127.0.0.1,这时因为浏览器没有DNS缓存,所以会查询操作系统中的DNS缓存,结果此时hosts文件生效!

修改hosts之后,等2分钟,一般都会生效。

四、DNS两种查询方式

递归查询

主机向本地域名服务器的查询一般都是采用递归查询。

递归查询是一种DNS server的查询模式,在该模式下DNS server接收到客户机请求,必须使用一个准确的查询结果回复客户机。假设DNS server本地没有存储查询DNS 信息,那么该server会询问其它server。并将返回的查询结果提交给客户机。

如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是返回一个失败的响应,表示无法查询到所需的IP地址。

迭代查询

本地域名服务器向根域名服务器的查询通常是采用迭代查询。

DNS server第二种查询方式为迭代查询,DNS server会向客户机提供其它可以解析查询请求的DNS server地址,当客户机发送查询请求时,DNS server并不直接回复查询结果。而是告诉客户机还有一台DNS server地址,客户机再向这台DNS server提交请求,依次循环直到返回查询的结果。

当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么返回给本地域名服务器所要查询的IP地址,要么返回给本地域名服务器下一步应当查询的域名服务器的IP地址。

参考

【原】老生常谈-从输入url到页面展示到底发生了什么

为什么修改hosts不立即生效?–浏览器DNS缓存机制分析

DNS解析的过程是什么,求详细的?

零基础学习PHP编程——基本概念详解之域名解析与DNS缓存相关推荐

  1. 零基础学习CSS---05.CSS背景属性详解

    CSS属性 一.背景属性 1.background-color(背景颜色):red: 2.background-image(背景图片):background-image:url(图片地址); 3.ba ...

  2. Kotlin 视频课程系列一:《零基础学习 Kotlin 编程》

    Kotlin 系列课程一:<零基础学习 Kotlin 编程> 课程简介 在你决定要打开这个页面阅读的瞬间,风云巨变互联网行业里拼搏的你, 已经得到了一个引领时代 , 改变命运,突破瓶颈的机 ...

  3. 零基础学习PHP编程——程序的编写和运行过程

    零基础学习PHP编程--程序的编写和运行过程 注意: 本文主要写给零基础的同学,作为编程的入门引导, 如有不当之处,还请指正. 访问源站 欢迎交流QQ群: 640765823 回顾上一节,我们已经基本 ...

  4. 小白零基础学习Java编程好学吗?

    Java作为一门基础性编程语言,伴随着IT行业的兴起.目前,学习Java的人变得越来越多,但是想要学好Java通过自学可没有那么容易,尤其是对于初学者而言.那么小白零基础学习Java编程好学吗? IT ...

  5. 零基础学习PHP编程——学习PHP编程从认识计算机开始

    零基础学习PHP编程--学习PHP编程从认识计算机开始 注意: 本文主要写给零基础的同学,作为编程入门引导, 如有不当之处,还请指正. 访问源站点 欢迎交流QQ群: 640765823 一. 什么是计 ...

  6. 零基础学习Java编程培训需要了解哪些知识

    作为最受欢迎的编程语言之一,Java是很多人转行的首选,对于零基础而言,在学习西安Java编程培训前要了解哪些语言特征和常识呢?下面,西安鸥鹏IT培训就为大家分享零基础学习西安Java编程培训必须了解 ...

  7. 零基础学习java编程,真的很难吗?手把手将你带入编程世界。

    零基础学习java真的很难吗?本人脑袋比较笨,从接触java到职业生涯已经小有4年了.怎么说呢,就是现在我依然能够保持着当年的那份不断学习的热情,是不是很不可思议.我告诉你,这是最基本最基础从事编程行 ...

  8. 零基础学习PHP编程——详解Apache、PHP和Mysql之间的关系

    详解Apache.PHP和Mysql之间的关系 注意: 本文主要写给基础薄弱的同学, 如有不当之处,还请指正. 访问源站 原创不易,转载请注明 欢迎交流: 640765823  学习方法 弄清楚Apa ...

  9. UG零基础学习UG编程从什么学起?如…

    因为ug在工程上用的比较多,UG零基础在学习UG编程时,需要先学习绘制三维图,然后学习刀具知识,再就是学数控指令. UG编程学习又包括三大模块:加工模块(编程,后处理).建模模块(拆电极,3D设计). ...

最新文章

  1. Beetlsql自定义生成entity,mapper,md代码
  2. 在Windows下使用MinGW静态编译Assimp
  3. c语言里的%p的作用,C语言中geiwei=m%10什么意思,求解!
  4. 开源项目托管GitHub简单使用
  5. java执行shell命令
  6. 用c语言实现串的存储结构是指,数据结构学习笔记-串(C语言实现)
  7. oracle用户密码已过期,oracle用户密码过期的处理方法
  8. 006-虚拟机中centos7实现nat静态ip上网
  9. mnist数据集python导入_导入MNIST数据集时出错
  10. opencv打开的图片应用于nn.Conv2d()(一)(H, W, C)转为 (C, H, W)
  11. 为什么中台是传统企业数字化转型的关键?
  12. Clojure 学习入门(5)- 关键字
  13. 缓冲器(跟随器)电路
  14. 货币php是什么,php做什么的【货币问答】- php做什么的所有答案 - 联合货币
  15. 隐藏桌面上计算机图标不见了怎么办,电脑的快捷图标不见了怎么办
  16. Linux服务器中SVN版本库的创建与配置
  17. WinRM 服务无法创建以下 SPN: /WSMAN/DC.contoso.com; WSMAN/DC
  18. vue基于promise可以用于浏览器和node.js的网络请求库【axios封装-收藏版】
  19. rmarkdown入门
  20. 如何解释阀门定位器的单作用和双作用?

热门文章

  1. android吧 iphone,用过iPhone之后换回安卓,网友:我还是用苹果吧
  2. World2013中三个减号或等号再回车产生的分割线的删除和设置
  3. 循环-13. 求特殊方程的正整数解(15)
  4. C++ 二维vector初始化、resize()
  5. 关于jupyter使用R语言的一些问题的解决
  6. kl散度度量分布_浅谈KL散度
  7. 实地址方式下的可屏蔽中断服务程序设计
  8. opencv报错LNK2019
  9. USB接口芯片汇总(转)
  10. Python requests ip代理爬虫报错 HTTPSConnectionPool(host=‘xxxxx‘, port=443): Max retries exceed...