IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 前端开发也要知道的 DNS -> 正文阅读

[系统运维]前端开发也要知道的 DNS

DNS是什么

关于这个,网上的说明非常多。通俗一点。DNS其实就是一个电话本翻译系统,用来把域名解析成对应的IP地址;

在这里插入图片描述
对于前端来说,DNS就是从浏览器输入域名后,浏览器与DNS服务器交互,最终浏览器向DNS解析返回的IP地址建立TCP连接的过程;

DNS的解析过程

这里网络教程也非常多。这里一张图说明。总结一下:

从输入域名到返回结果,经历的每一步,都可能有缓存。如果有缓存,就不会进行下一步,直到达到全球只有13台的跟域名服务器;

在这里插入图片描述

大部分开发能接触到的,只有到本地DNS服务器这一层。针对前端开发来说,也只需要了解到这一层即可。本篇幅重点讨论这几个流程间的交互;

本地DNS服务器配置

使用window Server可以轻易的配置本地DNS服务器。如果你想自己动手试试,可以参考这里

DNS的缓存策略分析

浏览器缓存dns策略

为了测试各个浏览器的DNS缓存,通过如下方式实现;

  • 1、dns服务器添加一个新域名
  • 2、本地浏览器访问域名
  • 3、清除本地缓存(后续会说明如何清除)
  • 4、继续访问该域名,查看什么时候不能访问

chrome浏览器

版本 :100.0.4896.88

缓存时间
项目缓存时间
关闭浏览器后立即打开20分钟+
在页面f5刷新20分钟+
在页面ctrl+f5(强制)刷新20分钟+
新开标签页复制地址enter20分钟+
缓存清理

网上的方案如下:

在地址栏输入以下地址回车,点击 Clear host cache 即可:

chrome://net-internals/#dns

然而20分钟过去了。浏览器依旧能够访问删除的DNS地址;

于是我加上了 ctrl+shift+delete,删除浏览器缓存,才恢复了正常;

在这里插入图片描述

firefox浏览器

版本:99.0.1

缓存时间
项目缓存时间
关闭浏览器后立即打开0
在页面f5刷新10分钟
在页面ctrl+f5(强制)刷新0
新开标签页复制地址enter10分钟
缓存清理

方案如下:

Firefox 之前有几个扩展非常方便,可惜都已经下线了 (SYSIN):dns-flusher、clear-dns-cache
现在实现方法如下:
在地址栏输入:about:config,回车,“接受风险并继续”,然后搜索 f,出现如下 3 项:

  • network.dnsCacheEntries 400
  • network.dnsCacheExpiration 60
  • network.dnsCacheExpirationGracePeriod 60
    将数值都修改为 0 即可。

注意:

修改后为禁用 DNS 缓存 (SYSIN)。
该操作对网络浏览体验可能有一定影响,仅用于调试。
如果有新的扩展出现,使用扩展更佳。

补充:修改上述数组实测浏览器缓存DNS策略不变;

ie浏览器

缓存时间
项目缓存时间
关闭浏览器后立即打开0
在页面f5刷新20分钟+
在页面ctrl+f5(强制)刷新20分钟+
新开标签页复制地址enter0
缓存清理

需要写注册表。参见 https://www.muzijie.com/a1/v09l1m70.html。我没有尝试过

host文件缓存

在操作系统缓存中,包含了host文件的读取。即,如果你的host文件配置了域名,那么匹配上之后,永远不会进行下一步查询(优先级最高);
在这里插入图片描述
host文件配置地址:C:\Windows\System32\drivers\etc

配置方式文件内已经给了说明:

# localhost name resolution is handled within DNS itself.
100.100.100.1 console.demo.com

缓存时间

永久(配置后永久生效)

缓存查看

本地host文件

缓存清理

删除对应映射即可。

本地缓存

缓存查看

ipconfig /displaydns

建议通过 查看

ipconfig /displaydns > C:\Users\dnscache.txt

缓存时间

在测试DNS服务器上创建一个新的域名 指向 200.xx.xx.131,发现默认缓存时间是1h(通过不断打印缓存查看)

在这里插入图片描述

但是,这个时间受到各种因素影响;例如当我实测禁用/启用本地网卡时,缓存会被重新更新(猜测应该是重新轮询了本地DNS服务器);
在这里插入图片描述

缓存清理

通过如下指令可以强制清除本地DNS缓存

ipconfig /flushdns

可以发现清理后,使用缓存查看指令,只能看到如下一些记录:

在这里插入图片描述
这部分就是host文件记录的优先级最高的DNS记录了!所以对于host文件记录的内容,不会受缓存刷新影响,也应证了host文件的最高优先级

host文件:
在这里插入图片描述

DNS一对多情况下的浏览器的处理

DNS可以实现一对多。即一个域名对应多个IP。这种情况对于网站保活容灾具有相当的应用价值;
例如我同一个域名,常备4台服务器。常态只有一台服务器活着,其他ip无法ping通。此时dns解析就会优先选择能通的服务器Ip作为解析结果;

但是如果4个ip都通,那么浏览器解析规则是什么呢?接下来我们进行测试;

测试前置工作

为了避免浏览器缓存和本地缓存的影响,我们每次测试使用一个新的域名;每个域名均对应2个不同的ip地址(2个ip均可访问,是相同的产品,部署在不同服务器);

测试一、每个浏览器解析一个新域名

5个域名解析结果(IPA 记为 A ,IPB记为B);

是否受本地缓存影响 指不清除操作系统本地缓存下,纯粹通过刷新浏览器,清除DNS缓存,清除缓存等方式,使IP解析结果发生变化;

浏览器首次打开解析地址(5次)改变解析地址需要努力是否受本地缓存影响解析改变后是否改变本地缓存
FirefixA B B A B折腾5分钟
IEB B A A B15分钟无果
chromeA A A B B15分钟无果
edgeB B A A B15分钟无果

结论

  • 当域名对应多个IP时,浏览器每次随机解析,几乎50%;
  • 浏览器存在缓存,一旦缓存解析结果,则解析地址不受系统本地缓存影响,且较难改变;

另外在测试过程中发现一点规律:

每次新开一个浏览器解析一个新的域名,windows本地缓存都会发生变化。且解析域名的排列顺序,总是浏览器实际解析出来的域名排在第一个,结合上述数据,证明本地缓存是每次重新解析DNS(向DNS服务器发起请求)后生成的。解析完成后顺便把第一个地址给浏览器;

如下图,108 IP总是新的浏览器解析的ip地址。

在这里插入图片描述

测试二、浏览器的DNS选择

浏览器解析域名是否会根据根据服务器的状态选择性使用某台服务器?答案是会的:

验证:新开一个域名对应2个IP地址(ip1,ip1),测试浏览器端访问结果。如果访问到ip1的服务器,则将ip1服务器nginx容器kill掉,亲测浏览器会解析到ip2;

如下图:
在这里插入图片描述
由于客户端先前DNS解析到131,故kill掉131后,刷新浏览器,在与131服务器建链失败后(推测是收到了[RST ACK]头),尝试与80(正常服务器)进行通讯,建立client hello;

但是经过我的这篇文章的验证。在一对多域名解析情况下,浏览器进行轮询遍历,此时浏览器只能够识别服务器最基本的端口状态,如果端口完全不存在,才会进行下一个IP的尝试,直到找到一个成功的ip并进行解析;

总结

DNS解析流程在浏览器和客户端层面都有涉及。作为前端开发应该了解其基本原理和缓存机制,方便后续定位解决问题。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:16:32  更:2022-05-10 12:17:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:31:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码