DNS通常是基于UDP的,但當(dāng)數(shù)據(jù)長(zhǎng)度大于512字節(jié)的時(shí)候,為了保證傳輸質(zhì)量,就會(huì)使用基于TCP的實(shí)現(xiàn)方式
從數(shù)據(jù)包的數(shù)量以及占有網(wǎng)絡(luò)資源的層面
使用基于UDP的DNS協(xié)議只要一個(gè)請(qǐng)求、一個(gè)應(yīng)答就好了; 而使用基于TCP的DNS協(xié)議要三次握手、發(fā)送數(shù)據(jù)以及應(yīng)答、四次揮手; 明顯基于TCP協(xié)議的DNS更浪費(fèi)網(wǎng)絡(luò)資源!
從數(shù)據(jù)一致性層面
DNS數(shù)據(jù)包不是那種大數(shù)據(jù)包,所以使用UDP不需要考慮分包,如果丟包那么就是全部丟包,如果收到了數(shù)據(jù),那就是收到了全部數(shù)據(jù)!所以只需要考慮丟包的情況,那就算是丟包了,重新請(qǐng)求一次就好了。而且DNS的報(bào)文允許填入序號(hào)字段,對(duì)于請(qǐng)求報(bào)文和其對(duì)應(yīng)的應(yīng)答報(bào)文,這個(gè)字段是相同的,通過(guò)它可以區(qū)分DNS應(yīng)答是對(duì)應(yīng)的哪個(gè)請(qǐng)求