1、Chrome浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有www.linux178.com 对应的条目,而且没有过期,如果有且没有过期则解析到此结束。 注:我们怎么查看Chrome自身的缓存?可以使用 chrome://net-internals/#dns 来进行查看

2、如果浏览器自身的缓存里面没有找到对应的条目,那么Chrome会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束. 注:怎么查看操作系统自身的DNS缓存,以Windows系统为例,可以在命令行下使用 ipconfig /displaydns 来进行查看

3、如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件(位于C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功。

4、如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。如果没有找到对应的条目,则有运营商的DNS代我们的浏览器发起迭代DNS解析请求,它首先是会找根域的DNS的IP地址(这个DNS服务器都内置13台根域的DNS的IP地址),找打根域的DNS地址,就会向其发起请求(请问www.linux178.com这个域名的IP地址是多少啊?),根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去,于是运营商的DNS就得到了com域的IP地址,又向com域的IP地址发起了请求(请问www.linux178.com这个域名的IP地址是多少?),com域这台服务器告诉运营商的DNS我不知道www.linux178.com这个域名的IP地址,但是我知道linux178.com这个域的DNS地址,你去找它去,于是运营商的DNS又向linux178.com这个域名的DNS地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求(请问www.linux178.com这个域名的IP地址是多少?),这个时候linux178.com域的DNS服务器一查,诶,果真在我这里,于是就把找到的结果发送给运营商的DNS服务器,这个时候运营商的DNS服务器就拿到了www.linux178.com这个域名对应的IP地址,并返回给Windows系统内核,内核又把结果返回给浏览器,终于浏览器拿到了www.linux178.com对应的IP地址,该进行一步的动作了。

注:一般情况下是不会进行以下步骤的

如果经过以上的4个步骤,还没有解析成功,那么会进行如下步骤:

5、操作系统就会查找NetBIOS name Cache(NetBIOS名称缓存,就存在客户端电脑中的),那这个缓存有什么东西呢?凡是最近一段时间内和我成功通讯的计算机的计算机名和Ip地址,就都会存在这个缓存里面。什么情况下该步能解析成功呢?就是该名称正好是几分钟前和我成功通信过,那么这一步就可以成功解析。

6、如果第5步也没有成功,那会查询WINS 服务器(是NETBIOS名称和IP地址对应的服务器)

7、如果第6步也没有查询成功,那么客户端就要进行广播查找

8、如果第7步也没有成功,那么客户端就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)

如果第八步还没有解析成功,那么就宣告这次解析失败,那就无法跟目标计算机进行通信。只要这八步中有一步可以解析成功,那就可以成功和目标计算机进行通信。

最新文章

  1. 【原】JAVA SE编码规范
  2. iOS开发中的这些权限,你搞懂了吗?
  3. 无中间变量交换swap(a,b)
  4. 【转】apache 二级域名设置完整步骤
  5. 【生活没有希望】NOIP2010初赛 烽火传递 smartoj1475
  6. [SQLServer大对象]——FileTable从文件系统迁移文件
  7. iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController
  8. Android入门开发时注意的两个问题
  9. WPF 大数据加载过程中的等待效果——圆圈转动
  10. C#页面前台绑定数据 <%%><%#%><%=%>
  11. Android NDK构建资料
  12. 详解Bootstrap进度条组件
  13. 学习日记day 10 : JavaScript秋风扫落叶第一期
  14. js封装,一个JS文件引用多个JS文件
  15. 【转载】如何在德州仪器网站查找和下载PCB封装
  16. VB中判断空的几种方法,Null, Missing, Empty, Nothing, vbNullString区别
  17. mysql index的长度限制
  18. android 退出方案 导致内存泄露
  19. hibernate--ID生成策略--annotation
  20. C语言到C++(1) - 基本变化

热门文章

  1. ArrayList与List<T>的区别
  2. 分析abex'crackme#2
  3. 安卓构架组件——向项目添加组件(Adding Components to your Project)
  4. BZOJ 4034 树链剖分
  5. 激活密钥许可证VMware Workstation Pro 15 激活许可证
  6. QT + openssl + VS2015静态编译
  7. java Scanner输入数字、字符串
  8. 01.springboot入门--启用自动配置注解EnableAutoConfiguration
  9. WIN10无法识别安卓设备,提示Windows 无法验证此设备所需的驱动程序的数字签名
  10. 多线程模拟生产者消费者示例之wait/notify