
域名解析過程:
1、瀏覽器會檢查緩存中有沒有這個域名對應(yīng)的解析過的IP地址,如果緩存中存在,此解析過程到此就已經(jīng)結(jié)束。
2、如果用戶的瀏覽器緩存(通過host文件進行設(shè)置)中沒有,瀏覽器接下來會去操作系統(tǒng)緩存中查找是否有這個域名對應(yīng)的DNS解析數(shù)據(jù)。
3、前面兩個步驟都是在本機中進行的,如果再本機中沒有找到解析的IP緩存,操作系統(tǒng)就會把這個域名發(fā)送到本地區(qū)的域名服務(wù)器(Local DNS Server)LDNS。這個專門的域名解析服務(wù)器的性能一般都會很好,他們一般都會緩存域名的解析結(jié)果。其實大約有80%的域名解析的工作到這里就已經(jīng)完成了,所以LDNS主要承擔(dān)域名的解析工作。
4、如果LDNS還沒有找到,就會直接到Root Server域名服務(wù)器請求解析。根域名服務(wù)器會返回給LDNS一個所查詢域的主域名服務(wù)器(gTLD Server)地址(gTLD是國際頂級的域名服務(wù)器)。
5、LDNS再向上面接受的gTLD服務(wù)器發(fā)送請求。接收請求的gTLD服務(wù)器查找到此域名對應(yīng)的Name Server域名服務(wù)器(Name Server通常就是你注冊的域名服務(wù)器,假如你在某個域名服務(wù)商申請的域名,那么這個域名解析的任務(wù)就會由這個域名提供商的服務(wù)器來完成)的地址并返回。
6、Name Server 域名服務(wù)器會查詢存儲的域名和IP的映射關(guān)系表(正常情況下,會根據(jù)域名得到目標(biāo)的IP記錄,和一個TTL值),返回給DNS Server域名服務(wù)器。Local DNS Server會緩存這個域名和IP對應(yīng)的關(guān)系,緩存的事件由TTL值控制。
7、把解析的結(jié)果返回給用戶,用戶本機系統(tǒng)會根據(jù)TTL值來進行緩存。
大概的解析過程就是這樣的,但是實際中可能還有更加復(fù)雜的解析過程,比如Name Server是多級的,或者通過一個GTM來進行負(fù)載均衡的控制等。
清除緩存的域名
DNS解析的域名主要再兩個地方進行緩存,一個是Local DNS Server,另一個是本機。并且這兩個緩存都是通過TTL值和本機緩存大小控制的,但是最大緩存時間是TTL值。基本上Local DNS Server的緩存時間就是TTL控制的,很難人工進行介入。
本機緩存,Windows下在命令行模式下執(zhí)行ipconfig/flushdns命令來刷新緩存。
在Java應(yīng)用中JVM也會緩存DNS的解析結(jié)果,這個緩存是在InetAddress類中完成的,而且這個緩存時間有兩種緩存策略:一種是正確解析結(jié)果緩存(在配置項networkaddress.cache.ttl配置,默認(rèn)值是-1(永不失效)),一種是失敗的解析結(jié)果緩存(在配置項networkaddress.cache.negative.ttl配置,默認(rèn)值10(緩存10秒))。這兩個配置項是在%JAVA_HOME%\lib\security\java.security文件中配置的。
注意:如果我們需要用InetAddress類解析域名時,一定要是單例模式,不然會有嚴(yán)重的性能問題,如果每次都創(chuàng)建InetAdress實例,每次都要進行一次完整的域名解析,非常耗時。
幾種域名解析方式
A記錄。A代表的時Adress,用來指定域名對應(yīng)的IP地址。A記錄可以將多個域名解析到一個IP地址,但是不能將一個域名解析到多個IP地址。
MX記錄。表示的時Mail Exchange,就是可以將域名下的郵件服務(wù)器(Mail Server)指向自己
的。
CNAME記錄。Canonical Name(別名解析)。就是可以為一個域名設(shè)置一個或者多個別名。
NS記錄。為某個域名指定DNS解析服務(wù)器。
TXT記錄。為某個主機名或者域名設(shè)置說明。