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()
相关推荐
灰子学技术17 小时前
Envoy HTTP Connection Manager (HCM) 技术文档
网络·网络协议·http
七七powerful1 天前
AI+运维提效--HTTPS 证书有效期监控方案
网络协议·http·https
环流_2 天前
HTTP 协议的基本格式
java·网络协议·http
Rust研习社2 天前
Rust + PostgreSQL 极简技术栈应用开发
开发语言·数据库·后端·http·postgresql·rust
RunningBComeOn2 天前
为什么无法抓取到http之间的明文传输
网络·网络协议·http
(Charon)2 天前
【C++/Qt】Qt 实现 HTTP 测试工具:从请求构思到 GET/POST 实现
c++·qt·http
灰子学技术2 天前
Envoy HTTP 协议实现技术文档
网络·网络协议·http
Lucis__2 天前
HTTP协议深度解析—从HTTP原理到手写实现服务器
服务器·网络协议·http