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