前端缓存--DNS缓存

1,727 阅读11分钟

之前我们提到过当本地缓存不能直接使用时,就需要向服务器(CDN节点)发起请求,但是要发起请求首先就需要建立连接,客户端需要把URL解析成IP,而这个解析的过程中我们也可以做一些文章.不仅操作系统会对DNS缓存,浏览器、应用程序、运营商等都会对DNS进行缓存,不需要我们每次都去根域服务器下查询(递归查询).

  1. DNS查询时,首先会搜索浏览器自身的DNS缓存,如果存在,返回IP地址.
  2. 如果浏览器的DNS缓存查找不到,就会尝试读取操作系统里的host文件,查找是否存在对应的域名IP,如果存在,返回IP地址.
  3. 如果host文件查找不到,那么就会去路由器的DNS缓存里查找,如果找到,返回IP地址
  4. 如果路由器的DNS缓存查找不到,就会尝试去网络供应商的DNS服务器中去查找,如果找到返回IP地址
  5. 如果找不到,就会尝试去根域服务器下找到(递归查询)

需要注意的是,操作系统的DNS缓存会参考DNS服务器返回的TTL,但是不完全等于TTL.TTL:Time to Live,存活时间.

注意:

  • 浏览器的DNS缓存时间和DNS服务器返回的TTL无关,浏览器在获得域名的实际IP后会对其进行缓存.每种浏览器都有一个固定的DNS缓存时间,其中chrome的过期时间为1分钟,在这个时间里不会重新请求DNS.chrome://net-internals/#dns-查看chrome浏览器dns缓存
  • 应用程序的DNS缓存由应用程序控制
  • 操作系统的DNS缓存会参考DNS服务器返回的TTL,但是不完全等于TTL.

TTL:Time To Live,存活时间.

DNS

Domain Name System,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够直接被机器读取的IP数字串.

DNS解析

DNS协议提供通过域名查找IP地址或者逆向从IP地址查找域名的服务,而通过域名查找到能够直接被机器解析的IP数字串的过程被称为域名解析,而域名解析的过程分为递归查询和迭代查询.DNS协议运行在UDP协议上,端口号为53. 114.114.114.114 和 8.8.8.8,这两个IP地址都属于公共域名解析服务DNS中的一部分,而且由于不是用于商业用途,这两个DNS都很纯净,不用担心因ISP运行商导致的DNS劫持等问题,而且都是免费提供给用户使用.

  • 递归查询:当DNS服务器不能回应客户端的查询时,会尝试向其他服务器发起查询,一般是向该域名的根域服务器查询,如果根域服务器能够查找到,则返回IP地址,否则根域服务器向它的下级一级一级查询,直到查询到结果返回
  • 迭代查询:当DNS服务器不能回应客户端的查询时,DNS服务器会把能够解析该域名的其他DNS服务器的IP地址返回给主机,由主机的DNS程序向这些DNS服务器发起查询,直到找到查询结果.
  • 114.114.114.114: 国内移动、电信和联通通用的DNS,移动端和PC端都可以使用,干净无广告,解析成功率相对较高,速度快、稳定,适用于国内的用户
  • 8.8.8.8:Google提供的DNS,全球通用,适用于国外以及访问国外网站的用户使用
  • DNS劫持:在DNS服务器中,将你访问域名的IP进行变化,解析得出的IP与原域名不对应
  • HTTP劫持:域名解析返回正确的IP,但是在和服务器交互的时候,劫持请求,在服务端响应之前响应请求.

DNS查询响应类型

  • 权威答复: 返回给客户端的正向答复,并且设置了DNS消息中的权威位,此答复代表从具有权威的DNS服务器响应
  • 正向答复: 包含了匹配客户端解析请求的资源记录
  • 参考答复: 只在迭代查询下返回,包含了其他有助于客户端解析请求的信息
  • 否定答复: 权威DNS服务器报告客户端查询的名字不存在;权威DNS服务器报告存在对应的名字但是不存在指定类型的资源记录

无论是正向答复还是否定答复,DNS客户端都会将结果保存在自己本地的缓存.

IP

Internet Protocol,即网际协议(互联网协议),适用于报文交换网络的一种面向数据的协议.IP是在TCP/IP协议中网络层的主要协议,任务仅仅是根据源主机和目的主机的地址传送数据.为此目的,IP定义了寻址方法和数据报的封装结构,即IP地址.

IP地址

IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,一次来屏蔽物理地址的差异.一个IP地址在整个因特网范围内是唯一的. IP地址 = 网络地址(网络号) + 主机地址(主机号) 网络地址标志着主机所接到的网络,每个网络地址在整个因特网范围必须是唯一的.主机地址标志着主机,每个主机地址在它的网络范围内必须是唯一的.

IPv4

IP地址以圆点分隔号的四个十进制数字表示,每个数字从0到255,如192.168.1.1 IP地址是一个 4 * 8bit(1字节),每个字节由 0/1 组成的数字串(IPv4由32位二进制组),如11000000.10101000.00000001.00000001

IPv6

IP地址以冒号分隔的8个16进制表示,IPv6地址范围从0000:0000:0000:0000:0000:0000:0000:0000ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff IPv6由128位二进制组成.

IP地址分类

IP地址分为五大类: A类、B类、C类、D类和E类.在这五类IP地址中,我们最常用的是A类、B类和C类地址.

  • A类地址

A类地址通常为大型网络而提供,全世界总共有126个A类网络,每个A类网络最多可以链接16777214台主机. 第一字节为网路号,其他三个字节为主机号. A类地址的网络号第一位固定为0,只有其余七位可以使用,可以指派的网络号是 2^7 - 2 = 126个,网络号0(00000000)的地址是IP地址的保留地址,意为本网络,网络号127(01111111)的地址是IP地址的保留地址,作为本地环回软件测试.A类地址的网络号取值在于1-126之间 A类地址的主机号占3个字节,每个A类网络中的最大主机数是2^24 - 2个,主机号全是0的IP地址表示本主机所连接到的单个网络,主机号全是1的IP地址表示是该网络上的所有主机.

  • B类地址

B类地址适用于中等规模网络,全世界大约有16000个B类网络,每个网络最多可连接65534台主机 前两个字节为网络号,后两个字节为主机号 B类地址的网络号第一、二位固定为10,网络号只有14位可用,可以指派的网络号是2^14-1个,网络号128.0(10000000.00000000)的IP地址是不指派的.B类地址的网络号取值介于128-191之间 B类地址的主机号占2个字节,每个B类网络中的最大主机数是2^16-2个,主机号全是0的IP地址表示本主机所连接的单个网络,主机号全是1的IP地址表示该网络上的所有主机

  • C类地址

C类地址适用于校园网等小型网络,每个C类网络最多可连接254台主机 前三个字节为网络号,最后一个字节为主机号 C类地址的网络号第一、二、三位固定为110,网络号有21位可以使用,可以指派的网络号为2^21-1个,网络号为192.0.0(11000000.00000000.00000000)的IP地址是不指派的.C类地址的网络号取值介于192-223之间. C类地址的主机号占一个字节,每个C类网络中最大的主机个数为2^8-2个.主机号全是0的IP地址表示本主机所连接到的单个网络,主机号全是1的IP地址表示是该网络上的所有主机.

子网掩码

Subnet Mask,网络掩码(地址掩码),是一个4 * 8bit(1字节),每个字节由 0/1 组成的数字串 它的作用是屏蔽IP地址的一部分来划分网络地址和主机地址两部分,并说明该IP地址是在局域网上还是远程网上 通过子网掩码可以把网络划分为子网,即VLSM(可变长子网掩码),也可以把小的网络归并成大的网络即超网. 子网掩码不能单独存在,它必须结合IP地址一起使用.对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说,默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0;

使用规则

10进制2进制
IP地址192.168.1.111000000.10101000.00000001.00000001
子网掩码255.255.255.011111111.11111111.11111111.00000000
  • 网络地址: 二进制IP地址中 被二进制子网掩码连续的1 遮住的部分,即 11000000.10101000.00000001.00000000=> 192.168.1.0.同一网络不是指物理连接,而是指网络地址,只有在同一个网络地址下才能够通信.
  • 主机地址: 二进制IP地址中 被二进制子网掩码连续的0 遮住的部分,即 00000000.000000000.00000000.00000001 => 0.0.0.1
  • 广播地址: 将网络地址的主机位全部转换为1,就是广播地址,即11000000.10101000.00000001.11111111 => 192.168.1.225.专门用于同时向网络中所有工作站进行发送的一个地址.

子网

基于每类IP网络可以进一步划分更小的网络,这就是子网,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是基于每类的网络地址的主机部分创建的. 通过子网掩码计算子网个数及每个子网中可使用的主机地址个数:

若要把 ...0/m(子网掩码1个数)划分为...0/n (m<n<32),得到的子网个数2^(n-m),去掉全0和全1,可用子网个数2^(n-m) - 2,每个子网可用的主机地址为2^(32-n) - 2;

网关

连接两个不同的网络的设备都可以叫网关设备,网关的作用就是实现两个网络之间的进行通讯和控制. 网关设备可以是交换机、路由器、启用路由协议的服务器、代理服务器、防火墙等. 网关地址就是网关设备的IP地址. 要实现两个网络之间的通信,必须通过网关.不配网关和DNS可以在同一网段的局域网内进行通信,只有配了网关和DNS才可以上网. 一台主机可以有多个网关,当主机找不到可用网关时,会把数据包发给默认指定的网关,有这个网关来处理数据包.现在主机使用的网关一般是默认网关.

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)

服务器自动给网络中的计算机分配IP地址、子网掩码和默认网关. 一旦网络的默认网关发生变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的计算机均获得新的默认网关的IP地址.