上一篇文章介绍了DNS域名解析的流程, 如果你只看流程,过几天就忘记了。今天介绍下如何实际操作,自己也加深下理解。本文以我的mac电脑为例介绍,Windows会写出相关命令,但是需要你自己亲测了。
如何查看域名的解析过程:mac 使用dig 命令来查询DNS的解析过程,如下图:
QUESTION SECTION: 表示查询域名是一个A记录,后面的文章就介绍
ANSWER SECTION : 表示这个域名对应的IP地址
还可以使用 trace 跟踪域名的解析过程,如下图所示:
从 根域名(.)到 gTLD Server(.xin)到Name Server(clips.xin)。整个过程都显示出来了。
清理DNS缓存:mac打开终端,输入:
sudo killall mDNSResponder
输入密码清理。windows系统使用
ipconfig/flshdns
Java jvm的DNS缓存Java JVM会将DNS解析结果进行缓存。在InetAddress类中完成的,看下面的代码:
public class Test { public static void main(String[] args) throws Exception { InetAddress i = InetAddress.getByName("www.clips.xin"); System.out.println(i.getHostAddress()); } }
会输出www.clips.xin对应的IP地址。
那么jVM如何配置缓存的信息的呢?以我的Java如下:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security
目录下 java.security 文件,默认的 配置为: networkaddress.cache.ttl=-1 ,networkaddress.cache.negative.ttl=10 如下图所示
默认networkaddress.cache.ttl=-1 表示用不失效, networkaddress.cache.negative.ttl=10 表示缓存10秒。
这种设置,如果线上的域名解析错了。但是jvm 用的还是缓存的地址,会报错。那么怎么修改呢?可以通过修改java.secutity文件的默认值。或者在Java启动参数设置: -Dsun.net.inetaddr.ttl=xxx 来修改默认值。
最后,InetAdress最好是单例模式,不能每次都会进行一次完整的解析,非常的耗时。
,