DNS详解

DNS是域名系统,相当于互联网地址电话簿,DNS将baidu.com这样的域名解析为机器可以识别的服务器IP

DNS系统

DNS建立在UDP协议上

域名服务器

  1. 根域名服务器: .或者.root,一般都省略root直接是.
  2. 顶级域名服务器:
    1. 国家顶级域名: cn , jp , us等
    2. 通用顶级域名: com表示工商企业,net表示网络提供商,org表示非盈利组织,edu表示教育
  3. 二级域名/权威域名: baidu这种
  4. www这种是二级域名下的一个主机名

工作模式:

  1. 一开始浏览器,操作系统和路由器都没有DNS缓存
  2. 你后面访问的网站会先访问浏览器,操作系统,路由器的DNS缓存,如果有的话就直接访问
  3. 如果没有就从根域名服务器拿顶级域名服务器的位置,这样一路拿下去
  4. 拿到之后把这个ip加缓存并访问
  5. 这些操作是由电脑配置的本地DNS服务器帮我们做的,电脑先在缓存中查,没查到向本地DNS请求,本地DNS在向各级服务器查
  6. 电脑请求本地DNS是递归查询,本地DNS请求各级服务器是迭代查询

工作过程:

  1. 浏览器向本地DNS发请求得到目标服务器的地址,然后三次握手和目标服务器建立连接(如果是HTTPS,还会多一个TLS握手)
  2. 请求的结果两种情况第一种是返回200,表示直接就是页面资源,就可以直接解析
  3. 第二种是返回301/302,这是重定向状态码,他会给你另一个重定向的url,电脑再去访问新的url,直到得到200

DNS劫持

DNS解析是域名=>ip的解析过程,DNS劫持就是在这个解析过程动手脚来让DNS解析指向错误的ip地址,往往是钓鱼网站或病毒下载源

  1. 本地DNS: 篡改你本地电脑或路由器的DNS缓存
  2. 中间人攻击在网络链路上拦截DNS请求并返回虚假的DNS响应,往往在公共WIFI网络中风险较高
  3. DNS服务器劫持,攻击DNS服务器
  4. 域注册商劫持:篡改域注册商的记录

检查:

  1. 如果网站支持HTTPS,会提示证书错误
  2. dig 域名来检查对比已知的正确IP是否一致
  3. 临时把DNS更换为公共DNS(如8.8.8.8或1.1.1.1),如果问题消失是本地运营商DNS被劫持

防范:

  1. 使用加密DNS
  2. 修改路由器默认密码来加固路由器
  3. 优先访问HTTPS
  4. 使用信誉良好的公共DNS

浏览器预解析

浏览器会扫描当前页面中所有的显式域名,进行预解析

但是隐藏域名,即某些域名由js控制着在特定时间,交互时才会显式,这种浏览器不会预解析,需要前端手动进行预解析

往head中添加预解析标签

vue中一般在加载组件时再进行预解析,注意必须添加到head中,所以是

js 复制代码
const link = document.createElement('link')
link.rel = 'dns-prefetch'
link.href = `//${domain}`
document.head.appendChild()
相关推荐
代码中介商8 小时前
HTTPS加密原理:图解安全传输全流程
网络协议·http·https
“初生”8 小时前
Codex 桌面端新会话 5 次 Reconnecting 怎么办?HTTP/SSE 完美修复方案(2026最新)
网络·网络协议·http
2601_9618451511 小时前
专升本资料哪个好|教材+真题+网课对比推荐PDF
考研·http·微服务·容器·visual studio
xhtdj13 小时前
DuckDB Quack基于 HTTP的客户端 / 服务器协议面向多用户分析
服务器·网络协议·http
Steadfast_GG13 小时前
详解HTTP中的URL
网络协议·http
李白你好13 小时前
Burp Suite 自动注入 HTTP Header 的插件
网络·网络协议·http
宇砾14 小时前
HTTPS的工作流程
网络协议·http·https
sinat_255487811 天前
第七部分。介绍MVC(模型-视图-控制器)模式
java·ide·http·tomcat·intellij-idea
齐鲁大虾1 天前
如何彻底解决从公网HTTP页面请求私有HTTP资源跨域问题
网络·网络协议·http
韩曙亮1 天前
【Flutter】Flutter 中的 Android / iOS 特殊配置 ① ( 网络权限配置 | HTTP 明文传输配置 | 应用名称配置 )
android·网络·flutter·http·ios·网络权限