DNS同時占用UDP和TCP端口53是公認的,這種單個應用協(xié)議同時使用兩種傳輸協(xié)議的情況在TCP/IP棧也算是個另類。但很少有人知道DNS分別在什么情況下使用這兩種協(xié)議。
DNS同時占用UDP和TCP端口53是公認的,這種單個應用協(xié)議同時使用兩種傳輸協(xié)議的情況在TCP/IP棧也算是個另類。但很少有人知道DNS分別在什么情況下使用這兩種協(xié)議。
TCP與UDP
TCP:面向連接的協(xié)議,提供可靠的數(shù)據(jù)傳輸,一般服務質(zhì)量要求比較高的情況,使用這個協(xié)議。
UDP:用戶數(shù)據(jù)報協(xié)議,是一種無連接的傳輸層協(xié)議,提供面向事務的簡單不可靠信息傳送服務。
TCP與UDP的區(qū)別
UDP和TCP協(xié)議的主要區(qū)別是兩者在如何實現(xiàn)信息的可靠傳遞方面不同。
TCP協(xié)議中包含了專門的傳遞保證機制,當數(shù)據(jù)接收方收到發(fā)送方傳來的信息時,會自動向發(fā)送方發(fā)出確認消息;發(fā)送方只有在接收到該確認消息之后才繼續(xù)傳送其它信息,否則將一直等待直到收到確認信息為止。
與TCP不同,UDP協(xié)議并不提供數(shù)據(jù)傳送的保證機制。如果在從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)報的丟失,協(xié)議本身并不能做出任何檢測或提示。因此,通常人們把UDP協(xié)議稱為不可靠的傳輸協(xié)議。
相對于TCP協(xié)議,UDP協(xié)議的另外一個不同之處在于如何接收突發(fā)性的多個數(shù)據(jù)報。不同于TCP,UDP并不能確保數(shù)據(jù)的發(fā)送和接收順序。事實上,UDP協(xié)議的這種亂序性基本上很少出現(xiàn),通常只會在網(wǎng)絡非常擁擠的情況下才有可能發(fā)生。
既然UDP是一種不可靠的網(wǎng)絡協(xié)議,那么還有什么使用價值或必要呢?其實不然,在有些情況下UDP協(xié)議可能會變得非常有用。因為UDP具有TCP所望塵莫及的速度優(yōu)勢。
雖然TCP協(xié)議中植入了各種安全保障功能,但是在實際執(zhí)行的過程中會占用大量的系統(tǒng)開銷,無疑使速度受到嚴重的影響。
反觀UDP由于排除了信息可靠傳遞機制,將安全和排序等功能移交給上層應用來完成,極大降低了執(zhí)行時間,使速度得到了保證。
DNS在進行區(qū)域傳輸?shù)臅r候使用TCP協(xié)議,其它時候則使用UDP協(xié)議。
DNS的規(guī)范規(guī)定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。
在一個區(qū)中主DNS服務器從自己本機的數(shù)據(jù)文件中讀取該區(qū)的DNS數(shù)據(jù)信息,而輔助DNS服務器則從區(qū)的主DNS服務器中讀取該區(qū)的DNS數(shù)據(jù)信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,并加載數(shù)據(jù)信息,這就叫做區(qū)傳送(zone transfer)。
為什么既使用TCP又使用UDP?
首先了解一下TCP與UDP傳送字節(jié)的長度限制:
UDP報文的最大長度為512字節(jié),而TCP則允許報文長度超過512字節(jié)。當DNS查詢超過512字節(jié)時,協(xié)議的TC標志出現(xiàn)刪除標志,這時則使用TCP發(fā)送。通常傳統(tǒng)的UDP報文一般不會大于512字節(jié)。
區(qū)域傳送時使用TCP,主要有一下兩點考慮:
· 輔助域名服務器會定時(一般是3小時)向主域名服務器進行查詢以便了解數(shù)據(jù)是否有變動。如有變動,則會執(zhí)行一次區(qū)域傳送,進行數(shù)據(jù)同步。區(qū)域傳送將使用TCP而不是UDP,因為數(shù)據(jù)同步傳送的數(shù)據(jù)量比一個請求和應答的數(shù)據(jù)量要多得多。
· TCP是一種可靠的連接,保證了數(shù)據(jù)的準確性。
域名解析時使用UDP協(xié)議
客戶端向DNS服務器查詢域名,一般返回的內(nèi)容都不超過512字節(jié),用UDP傳輸即可。不用經(jīng)過TCP三次握手,這樣DNS服務器負載更低,響應更快。
雖然從理論上說,客戶端也可以指定向DNS服務器查詢的時候使用TCP,但事實上,很多DNS服務器進行配置的時候,僅支持UDP查詢包。
相關文章