一、DNS解析

DNS解析也即是我们说的域名解析,为了方便记忆,网站都是注册了一个域名,通过域名来访问网站。访问网站内容,实际是通过访问IP地址实现的,所以在域名和IP之前存在一种对应关系,而域名解析服务器即DNS服务器则完成将域名翻译成IP地址的任务。

对于用户来说,永远不需要关心访问的IP地址是多少,只需要输入域名即可,所以当IP发生变化时对用户没有一点影响,这就是动态域名解析。域名服务器承载着IP与域名的管理工作和解析工作,当域名对应的IP出现变化时,域名服务器需要重新进行配置。

动态域名:域名对应的IP地址不是固定的,是变化的,当IP变化后,计算机的域名软件会将新的IP发送到域名服务器,域名服务器进行配置更新。

静态域名:域名对应的IP地址是固定的。

二、各个环节的DNS缓存介绍

浏览器 DNS缓存

浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关。

浏览器在获取网站域名的实际IP地址后会对其IP进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的DNS缓存时间,其中Chrome的过期时间是1分钟,在这个期限内不会重新请求DNS。Chrome浏览器看本身的DNS缓存时间比较方便,在地址栏输入

chrome://net-internals/#dns

就能看到看浏览器的缓存

Windows

Windows2003之前的DNS缓存设置时间在注册表的位置是HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Dnscache/Parameters

键名MaxCacheEntryTtlLimit,为DNS缓存条目TTL最大值,在XP和2003系统中此项名称为MaxCacheTtl。

MSDN中对此有详细介绍:https://technet.microsoft.com/en-us/library/cc959517.aspx

非常详细的解释了DNS域TTL与操作系统的DNS缓存策略的关系:

The default value for MaxCacheEntryTtlLimit is DWORD = 0x15180 = 86400 seconds = 1 day

if DNS zone TTL < MaxCacheEntryTtlLimit, then DNS TTL is used

if DNS zone TTL > MaxCacheEntryTtlLimit, then MaxCacheEntryTtlLimit is used

以下命令windows系统可使用:

# 显示本机dns, 生存时间, 80-8000都有
ipconfig /displaydns 

# 刷新windows dns缓存
ipconfig /flushdns
Android

默认情况下,地址将缓存 600 秒(10 分钟)。失败的查找将缓存 10 秒钟。

域名解析缓存

在Android 4.0(Ice Cream Sandwich)及更早版本中,DNS缓存由InetAddress和C库执行,这意味着DNS TTL无法正确执行。在更高版本中,缓存仅由 C 库完成,并且支持 DNS TTL。

IOS

按照官方文档说法,iOS 设备上每24小时刷新一次DNS缓存

其他系统的DNS相关命令
# MAC
# 清缓存
lookupd-flushcache 

# Linux
# 清缓存
/etc/init.d/nscd restart
# 查看被缓存的域名解析
ipconfig/displaydns
# 清空DNS缓存
ipconfig/flushdns