DNS(Domain Name System,域名系统)

在这里插入图片描述

域名和 IP 是多对一的关系,一个 IP 可以有多个域名,但一个域名只能有一个 IP。

DNS 是应用层协议,运行UDP协议之上,使用端口43

为什么需要 DNS ?

用户与互联网上某台主机通信时,必须要知道对方的 IP 地址。但是用户难以记住长达32位的二进制地址。域名系统就是将互联网上的主机名字转换为 IP 地址。

端口需要DNS解析吗 ?

不需要,有默认端口,http(80)、https(443),如果要指定端口直接在URL里面写。

DNS 查询过程

一般而言,「本地服务器查询是递归查询」,而**「本地 DNS 服务器向其他域名服务器请求的过程是迭代查询的过程」**。

  • 查找浏览器缓存。如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。
  • 查找系统缓存。如果系统缓存中也找不到,那么查询请求就会发向路由器,它一般会有自己的DNS缓存。
  • 查找路由器缓存。如果未找到
  • 查找ISP DNS 缓存。大约80%的域名解析都到这里就已经完成了,因为ISP DNS主要承担了域名的解析工作。
  • 最无奈的情况发生了, 在前面都没有办法命中的DNS缓存的情况下
    • 本地 DNS 服务器将该请求转发到互联网上的根域(即一个完整域名最后面的那个点,通常省略不写)
    • 根域将所要查询域名中的顶级域(假设要查询ke.qq.com,该域名的顶级域就是com)的服务器IP地址返回到本地DNS
    • 本地 DNS 根据返回的IP地址,再向顶级域(就是com域)发送请求
    • 顶级域服务器再将域名中的二级域(即ke.qq.com中的qq)的IP地址返回给本地DNS
    • 本地 DNS 再向二级域发送请求进行查询
    • 之后不断重复这样的过程,直到本地 DNS 服务器得到最终的查询结果,并返回到主机
    • 这时候主机才能通过域名访问该网站

DNS 为什么使用 UDP 协议作为传输层协议

「DNS 使用 UDP 协议作为传输层协议的主要原因是为了避免使用 TCP 协议时造成的连接时延。」

  • 为了得到一个域名的 IP 地址,往往会向多个域名服务器查询,如果使用 TCP 协议,那么每次请求都会存在连接时延,这样使 DNS 服务变得很慢。
  • 大多数的地址查询请求,都是浏览器请求页面时发出的,这样会造成网页的等待时间过长。

DNS 劫持

域名劫持指攻击者利用一些手段,篡改某个域名进行解析后的结果,这就使域名原本解析的IP地址换成了另一个IP地址,所以在访问时,用户可能会访问不到你的网站,而被劫持去了另一个网站。

怎么防止DNS劫持攻击

  • 建议使用复杂的密码重置路由器的默认密码。
  • 使用DNS注册器时使用双因素身份验证,并修补路由器中存在的所有漏洞以避免危害。
  • 最好远离不受信任的网站,避免下载任何免费的东西。
  • 如果已被感染,建议删除HOSTS文件的内容并重置Hosts File。
  • 为防止DNS劫持,始终建议使用良好的安全软件和防病毒程序,并确保定期更新软件。
  • 安全专家建议使用公共DNS服务器。
  • 定期检查DNS设置是否已修改,确保DNS服务器是安全的。

DNS实现负载平衡

DNS 是可以用于在冗余的服务器上实现负载平衡。

**原因:**这是因为一般的大型网站使用多台服务器提供服务,因此一个域名可能会对应多个服务器地址。

举个例子来说

  • 当用户发起网站域名的 DNS 请求的时候,DNS 服务器返回这个域名所对应的服务器 IP 地址的集合
  • 在每个回答中,会循环这些 IP 地址的顺序,用户一般会选择排在前面的地址发送请求。
  • 以此将用户的请求均衡的分配到各个不同的服务器上,这样来实现负载均衡。

DNS 预解析

DNS预解析是浏览器试图在用户访问链接之前解析域名,这是计算机的正常DNS解析机制。域名解析后,如果用户确实访问该域名,那么DNS解析时间将不会有延迟。最明显的例子,DNS预解析在某个页面中包含非常多的域名非常有效,如搜索结果页。遇到网页中的超链接,DNS prefetching从中提取域名并将其解析为IP地址,这些工作在用户浏览网页时与页面实际内容并行发生(而不是串行),使用最少的CPU和网络在后台进行解析。

使用:X-DNS-Prefetch-Control: on|off 头控制着浏览器的DNS预解析功能

示例
打开和关闭DNS预读取
<meta http-equiv="x-dns-prefetch-control" content="off">
强制查询特定主机名
<link rel="dns-prefetch" href="http://www.xuanfengge.com/">

在这个例子中,Firefox将预解析域名”www.xuanfengge.com”。

特性

Chrome 会记住最近使用的 10 个 domain,并且在开启浏览器时自动解析,因此在打开这些常用页面的时候,并不会有域名解析的延迟情况。chrome 使用8个线程专门做 DNS Prefetching,而且 chrome 本身不做dns记录的cache,是直接从操作系统读dns。所以**直接修改系统的dns记录或者host是可以直接影响chrome。**浏览器会对a标签的href自动启用DNS Prefetching,所以a标签里包含的域名不需要在head中手动设置link。但是在HTTPS下面不起作用,需要meta来强制开启功能。这个限制的原因是防止窃听者根据DNS Prefetching推断显示在HTTPS页面中超链接的主机名。DNS解析的包很小,一个UDP的包小于100 bytes,却平均可节省200ms。本地缓存DNS数量有限,可暂存50-200个domain,Chrome会决定该删除哪些domain的缓存,常用的网站会被标记为“最近使用”,不会那么快被删除。

场景

页面中的静态资源在不同的domain下,如CSS、JS、图片等文件

适合在以下场景中使用:

  • 电商网站的商品页大量载入不同domain下的商品图,如淘宝。手机网页。大型网站。js或服务端重定向
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值