域名解析過程:
1绷跑、瀏覽器會檢查緩存中有沒有這個域名對應的解析過的IP地址触趴,如果緩存中存在氮发,此解析過程到此就已經(jīng)結(jié)束。
2冗懦、如果用戶的瀏覽器緩存(通過host文件進行設置)中沒有爽冕,瀏覽器接下來會去操作系統(tǒng)緩存中查找是否有這個域名對應的DNS解析數(shù)據(jù)。
3披蕉、前面兩個步驟都是在本機中進行的颈畸,如果再本機中沒有找到解析的IP緩存乌奇,操作系統(tǒng)就會把這個域名發(fā)送到本地區(qū)的域名服務器(Local DNS Server)LDNS。這個專門的域名解析服務器的性能一般都會很好眯娱,他們一般都會緩存域名的解析結(jié)果礁苗。其實大約有80%的域名解析的工作到這里就已經(jīng)完成了,所以LDNS主要承擔域名的解析工作困乒。
4寂屏、如果LDNS還沒有找到,就會直接到Root Server域名服務器請求解析娜搂。根域名服務器會返回給LDNS一個所查詢域的主域名服務器(gTLD Server)地址(gTLD是國際頂級的域名服務器)迁霎。
5、LDNS再向上面接受的gTLD服務器發(fā)送請求百宇。接收請求的gTLD服務器查找到此域名對應的Name Server域名服務器(Name Server通常就是你注冊的域名服務器考廉,假如你在某個域名服務商申請的域名,那么這個域名解析的任務就會由這個域名提供商的服務器來完成)的地址并返回携御。
6昌粤、Name Server 域名服務器會查詢存儲的域名和IP的映射關系表(正常情況下,會根據(jù)域名得到目標的IP記錄啄刹,和一個TTL值)涮坐,返回給DNS Server域名服務器。Local DNS Server會緩存這個域名和IP對應的關系誓军,緩存的事件由TTL值控制袱讹。
7、把解析的結(jié)果返回給用戶昵时,用戶本機系統(tǒng)會根據(jù)TTL值來進行緩存捷雕。
大概的解析過程就是這樣的,但是實際中可能還有更加復雜的解析過程壹甥,比如Name Server是多級的救巷,或者通過一個GTM來進行負載均衡的控制等。
清除緩存的域名
DNS解析的域名主要再兩個地方進行緩存句柠,一個是Local DNS Server浦译,另一個是本機。并且這兩個緩存都是通過TTL值和本機緩存大小控制的溯职,但是最大緩存時間是TTL值管怠。基本上Local DNS Server的緩存時間就是TTL控制的缸榄,很難人工進行介入组题。
本機緩存吧凉,Windows下在命令行模式下執(zhí)行ipconfig/flushdns命令來刷新緩存春塌。
在Java應用中JVM也會緩存DNS的解析結(jié)果,這個緩存是在InetAddress類中完成的侍匙,而且這個緩存時間有兩種緩存策略:一種是正確解析結(jié)果緩存(在配置項networkaddress.cache.ttl配置,默認值是-1(永不失效))欧募,一種是失敗的解析結(jié)果緩存(在配置項networkaddress.cache.negative.ttl配置茄茁,默認值10(緩存10秒))。這兩個配置項是在%JAVA_HOME%\lib\security\java.security文件中配置的碉输。
注意:如果我們需要用InetAddress類解析域名時籽前,一定要是單例模式,不然會有嚴重的性能問題敷钾,如果每次都創(chuàng)建InetAdress實例枝哄,每次都要進行一次完整的域名解析,非常耗時阻荒。
幾種域名解析方式
A記錄挠锥。A代表的時Adress,用來指定域名對應的IP地址侨赡。A記錄可以將多個域名解析到一個IP地址蓖租,但是不能將一個域名解析到多個IP地址。
MX記錄羊壹。表示的時Mail Exchange蓖宦,就是可以將域名下的郵件服務器(Mail Server)指向自己
的。
CNAME記錄油猫。Canonical Name(別名解析)稠茂。就是可以為一個域名設置一個或者多個別名。
NS記錄眨攘。為某個域名指定DNS解析服務器主慰。
TXT記錄。為某個主機名或者域名設置說明鲫售。