DNS同時占用UDP和TCP端口53是公認(rèn)的,這種單個應(yīng)用協(xié)議同時使用兩種傳輸協(xié)議的情況在TCP/IP棧也算是個另類。
什么是TCP和UDP
TCP是一種面向連接的協(xié)議,提供可靠的數(shù)據(jù)傳輸,一般服務(wù)質(zhì)量要求比較高的情況,使用這個協(xié)議。
UDP是用戶數(shù)據(jù)報協(xié)議,是一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。
DNS在進(jìn)行區(qū)域傳輸?shù)臅r候使用TCP協(xié)議,其它時候則使用UDP協(xié)議。
區(qū)域傳輸:
DNS的規(guī)范規(guī)定了2種類型的DNS服務(wù)器,一個叫主DNS服務(wù)器,一個叫輔助DNS服務(wù)器。在一個區(qū)中主DNS服務(wù)器從自己本機(jī)的數(shù)據(jù)文件中讀取該區(qū)的DNS數(shù)據(jù)信息,而輔助DNS服務(wù)器則從區(qū)的主DNS服務(wù)器中讀取該區(qū)的DNS數(shù)據(jù)信息。當(dāng)一個輔助DNS服務(wù)器啟動時,它需要與主DNS服務(wù)器通信,并加載數(shù)據(jù)信息,這就叫做區(qū)傳送(zone transfer)。
為什么及使用TCP又使用UDP?
TCP和UDP傳輸字節(jié)的大?。?/strong>
UDP報文的最大長度為512字節(jié),而TCP則允許報文長度超過512字節(jié)。當(dāng)DNS查詢超過512字節(jié)時,協(xié)議的TC標(biāo)志出現(xiàn)刪除標(biāo)志,這時則使用TCP發(fā)送。通常傳統(tǒng)的UDP報文一般不會大于512字節(jié)。
區(qū)域傳送時使用TCP的解析:
1.輔域名服務(wù)器會定時(一般時3小時)向主域名服務(wù)器進(jìn)行查詢以便了解數(shù)據(jù)是否有變動。如有變動,則會執(zhí)行一次區(qū)域傳送,進(jìn)行數(shù)據(jù)同步。區(qū)域傳送將使用TCP而不是UDP,因?yàn)閿?shù)據(jù)同步傳送的數(shù)據(jù)量比一個請求和應(yīng)答的數(shù)據(jù)量要多得多。
2.TCP是一種可靠的連接,保證了數(shù)據(jù)的準(zhǔn)確性。
域名解析時使用UDP協(xié)議:
客戶端向DNS服務(wù)器查詢域名,一般返回的內(nèi)容都不超過512字節(jié),用UDP傳輸即可。不用經(jīng)過TCP三次握手,這樣DNS服務(wù)器負(fù)載更低,響應(yīng)更快。雖然從理論上說,客戶端也可以指定向DNS服務(wù)器查詢的時候使用TCP,但事實(shí)上,很多DNS服務(wù)器進(jìn)行配置的時候,僅支持UDP查詢包
UDP詳解
UDP 與 TCP 的主要區(qū)別在于 UDP 不一定提供可靠的數(shù)據(jù)傳輸。事實(shí)上,該協(xié)議不能保證數(shù)據(jù)準(zhǔn)確無誤地到達(dá)目的地。UDP 在許多方面非常有效。當(dāng)某個程序的目標(biāo)是盡快地傳輸盡可能多的信息時(其中任意給定數(shù)據(jù)的重要性相對較低),可使用 UDP。ICQ 短消息使用 UDP 協(xié)議發(fā)送消息。
許多程序?qū)⑹褂脝为?dú)的TCP連接和單獨(dú)的UDP連接。重要的狀態(tài)信息隨可靠的TCP連接發(fā)送,而主數(shù)據(jù)流通過UDP發(fā)送。
TCP詳解
TCP的目的是提供可靠的數(shù)據(jù)傳輸,并在相互進(jìn)行通信的設(shè)備或服務(wù)之間保持一個虛擬連接。TCP在數(shù)據(jù)包接收無序、丟失或在交付期間被破壞時,負(fù)責(zé)數(shù)據(jù)恢復(fù)。它通過為其發(fā)送的每個數(shù)據(jù)包提供一個序號來完成此恢復(fù)。記住,較低的網(wǎng)絡(luò)層會將每個數(shù)據(jù)包視為一個獨(dú)立的單元,因此,數(shù)據(jù)包可以沿完全不同的路徑發(fā)送,即使它們都是同一消息的組成部分。這種路由與網(wǎng)絡(luò)層處理分段和重新組裝數(shù)據(jù)包的方式非常相似,只是級別更高而已。
為確保正確地接收數(shù)據(jù),TCP要求在目標(biāo)計(jì)算機(jī)成功收到數(shù)據(jù)時發(fā)回一個確認(rèn)(即 ACK)。如果在某個時限內(nèi)未收到相應(yīng)的 ACK,將重新傳送數(shù)據(jù)包。如果網(wǎng)絡(luò)擁塞,這種重新傳送將導(dǎo)致發(fā)送的數(shù)據(jù)包重復(fù)。但是,接收計(jì)算機(jī)可使用數(shù)據(jù)包的序號來確定它是否為重復(fù)數(shù)據(jù)包,并在必要時丟棄它。