謝謝網(wǎng)絡(luò)極客的邀請(qǐng)。為什么有的DNS使用的是UDP而不是TCP?
UDP和TCP是網(wǎng)絡(luò)通信的兩種基本協(xié)議,這兩種協(xié)議各有優(yōu)缺點(diǎn)。TCP采用連接式的通信方式,可進(jìn)行多數(shù)據(jù)包的傳輸,并保證多數(shù)據(jù)包的傳輸順序,防止丟包, TCP是一種信賴度較高的方式。但是,TCP傳輸延遲的問題比較明顯,而且一次則只能向一臺(tái)已建立連接的主機(jī)發(fā)送請(qǐng)求。TCP不適用于需要實(shí)時(shí)和多方通信的場(chǎng)合。UDP是非連接的傳送方式,除了傳送數(shù)據(jù)以外什么都不做。UDP的傳輸速度較快,但容易丟包。UDP比較適合進(jìn)行單一數(shù)據(jù)包的傳輸,一個(gè)數(shù)據(jù)包大小是512字節(jié),它的傳輸速度非???,同時(shí),UDP還可以同時(shí)向網(wǎng)段內(nèi)多臺(tái)主機(jī)發(fā)送數(shù)據(jù)包,這也使得UDP被很多需要實(shí)時(shí)和多方通信的應(yīng)用所青睞。為了提高UDP數(shù)據(jù)傳輸?shù)男刨嚩?,在UDP的基礎(chǔ)上,人們還開發(fā)了RTP等實(shí)時(shí)傳輸協(xié)議。
網(wǎng)絡(luò)通信依靠的是IP地址,但I(xiàn)P地址不太容易記憶。因此,人們給網(wǎng)絡(luò)上的主機(jī)起了一些比較容易記憶的名稱。最初,這些名稱被保存在名為hosts.txt的文本文件中,這種方法現(xiàn)在仍然被保留著,比如,Linux上該文件被保存在/etc/hosts下。為了共享這些信息,人們把hosts.txt保存在FTP服務(wù)器上,并通過匿名訪問實(shí)現(xiàn)統(tǒng)一管理。但是,這個(gè)文件迅速增大,同時(shí),F(xiàn)TP服務(wù)器也不堪重負(fù),于是,80年代初人們制定了DNS標(biāo)準(zhǔn)(RFC1034和RFC1035),對(duì)域名實(shí)施分布式管理。
域名服務(wù)器同時(shí)使用TCP和UDP。進(jìn)行域名解析的時(shí)候使用UDP,此時(shí)用一個(gè)UDP包就夠了,延遲少響應(yīng)快的優(yōu)勢(shì)可以最大限度地發(fā)揮出來。客戶端或者輔助DNS需要同主DNS上的域名列表緩存進(jìn)行同步時(shí)(一般3小時(shí)一次),則使用TCP協(xié)議,因?yàn)榇藭r(shí)的數(shù)據(jù)已經(jīng)遠(yuǎn)超一個(gè)UDP包的大小了。
隨著IPv6的使用,域名解析的數(shù)據(jù)包已經(jīng)超過了512字節(jié),使用UDP進(jìn)行域名解析就不那么可靠了,面對(duì)這個(gè)新課題,人們正在研究擴(kuò)展UDP協(xié)議的辦法。
聯(lián)系客服