百度公共DNS之域名查詢過(guò)程
以用戶在瀏覽器輸入m.fzmwdq.com為例,我們?cè)敿?xì)說(shuō)明一下實(shí)際域名查詢過(guò)程:
1. 用戶輸入m.fzmwdq.com,瀏覽器調(diào)用操作系統(tǒng)resolver發(fā)起域名查詢,此處不考慮瀏覽器的域名緩存;resolver封裝一個(gè)dns請(qǐng)求報(bào)文,并將其發(fā)給運(yùn)營(yíng)商分配的local dns地址(或者用戶自己配置的公共dns);
2. local dns查詢緩存,如果命中則返回響應(yīng)結(jié)果;否則向根服務(wù)器發(fā)起查詢;
3. 根服務(wù)器返回com地址。每一層級(jí)的DNS服務(wù)器都有緩存,實(shí)際都是先查緩存,沒(méi)有緩存才返回下級(jí)域,此處不再重復(fù);
4. local dns查詢com。com返回iisp.com地址;
5. local dns查詢baidu.com,baidu.com返回www.baidu.com對(duì)應(yīng)記錄結(jié)果。
理論上講域名查詢有兩種方式:
迭代查詢 A問(wèn)B一個(gè)問(wèn)題,B不知道答案說(shuō)你可以問(wèn)C,然后A再去問(wèn)C,C推薦D,然后A繼續(xù)問(wèn)D,如此迭代…
遞歸查詢 A問(wèn)B一個(gè)問(wèn)題,B問(wèn)C,C問(wèn)D… 然后D告訴C,C告訴B,B告訴A
上述過(guò)程中從resolver到遞歸DNS再到根的查詢過(guò)程為遞歸查詢,遞歸DNS到根、到com、到baidu.com的過(guò)程為迭代查詢。
注意,遞歸查詢需要從系統(tǒng)層面來(lái)看,很難單純的說(shuō)一臺(tái)DNS實(shí)現(xiàn)了遞歸查詢。