先簡單介紹下TCP與UDP。? TCP是一種面向連接的協(xié)議,提供可靠的數(shù)據(jù)傳輸,一般服務(wù)質(zhì)量要求比較高的情況,使用這個(gè)協(xié)議。UDP—用戶數(shù)據(jù)報(bào)協(xié)議,是一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。? TCP與UDP的區(qū)別: UDP和TCP協(xié)議的主要區(qū)別是兩者在如何實(shí)現(xiàn)信息的可靠傳遞方面不同。TCP協(xié)議中包含了專門的傳遞保證機(jī)制,當(dāng)數(shù)據(jù)接收方收到發(fā)送方傳來的信息時(shí),會(huì)自動(dòng)向發(fā)送方發(fā)出確認(rèn)消息;發(fā)送方只有在接收到該確認(rèn)消息之后才繼續(xù)傳送其它信息,否則將一直等待直到收到確認(rèn)信息為止。 與TCP不同,UDP協(xié)議并不提供數(shù)據(jù)傳送的保證機(jī)制。如果在從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)報(bào)的丟失,協(xié)議本身并不能做出任何檢測(cè)或提示。因此,通常人們把UDP協(xié)議稱為不可靠的傳輸協(xié)議。相對(duì)于TCP協(xié)議,UDP協(xié)議的另外一個(gè)不同之處在于如何接收突發(fā)性的多個(gè)數(shù)據(jù)報(bào)。不同于TCP,UDP并不能確保數(shù)據(jù)的發(fā)送和接收順序。事實(shí)上,UDP協(xié)議的這種亂序性基本上很少出現(xiàn),通常只會(huì)在網(wǎng)絡(luò)非常擁擠的情況下才有可能發(fā)生。 既然UDP是一種不可靠的網(wǎng)絡(luò)協(xié)議,那么還有什么使用價(jià)值或必要呢?其實(shí)不然,在有些情況下UDP協(xié)議可能會(huì)變得非常有用。因?yàn)閁DP具有TCP所望塵莫及的速度優(yōu)勢(shì)。雖然TCP協(xié)議中植入了各種安全保障功能,但是在實(shí)際執(zhí)行的過程中會(huì)占用大量的系統(tǒng)開銷,無疑使速度受到嚴(yán)重的影響。反觀UDP由于排除了信息可靠傳遞機(jī)制,將安全和排序等功能移交給上層應(yīng)用來完成,極大降低了執(zhí)行時(shí)間,使速度得到了保證。 DNS在進(jìn)行區(qū)域傳輸?shù)臅r(shí)候使用TCP協(xié)議,其它時(shí)候則使用UDP協(xié)議; DNS的規(guī)范規(guī)定了2種類型的DNS服務(wù)器,一個(gè)叫主DNS服務(wù)器,一個(gè)叫輔助DNS服務(wù)器。在一個(gè)區(qū)中主DNS服務(wù)器從自己本機(jī)的數(shù)據(jù)文件中讀取該區(qū)的DNS數(shù)據(jù)信息,而輔助DNS服務(wù)器則從區(qū)的主DNS服務(wù)器中讀取該區(qū)的DNS數(shù)據(jù)信息。當(dāng)一個(gè)輔助DNS服務(wù)器啟動(dòng)時(shí),它需要與主DNS服務(wù)器通信,并加載數(shù)據(jù)信息,這就叫做區(qū)傳送(zone transfer)。 為什么既使用TCP又使用UDP? 首先了解一下TCP與UDP傳送字節(jié)的長度限制: UDP報(bào)文的最大長度為512字節(jié),而TCP則允許報(bào)文長度超過512字節(jié)。當(dāng)DNS查詢超過512字節(jié)時(shí),協(xié)議的TC標(biāo)志出現(xiàn)刪除標(biāo)志,這時(shí)則使用TCP發(fā)送。通常傳統(tǒng)的UDP報(bào)文一般不會(huì)大于512字節(jié)。? 區(qū)域傳送時(shí)使用TCP,主要有一下兩點(diǎn)考慮:? 1.輔域名服務(wù)器會(huì)定時(shí)(一般時(shí)3小時(shí))向主域名服務(wù)器進(jìn)行查詢以便了解數(shù)據(jù)是否有變動(dòng)。如有變動(dòng),則會(huì)執(zhí)行一次區(qū)域傳送,進(jìn)行數(shù)據(jù)同步。區(qū)域傳送將使用TCP而不是UDP,因?yàn)閿?shù)據(jù)同步傳送的數(shù)據(jù)量比一個(gè)請(qǐng)求和應(yīng)答的數(shù)據(jù)量要多得多。? 2.TCP是一種可靠的連接,保證了數(shù)據(jù)的準(zhǔn)確性。? 域名解析時(shí)使用UDP協(xié)議:? 客戶端向DNS服務(wù)器查詢域名,一般返回的內(nèi)容都不超過512字節(jié),用UDP傳輸即可。不用經(jīng)過TCP三次握手,這樣DNS服務(wù)器負(fù)載更低,響應(yīng)更快。雖然從理論上說,客戶端也可以指定向DNS服務(wù)器查詢的時(shí)候使用TCP,但事實(shí)上,很多DNS服務(wù)器進(jìn)行配置的時(shí)候,僅支持UDP查詢包。 UDP UDP?與?TCP?的主要區(qū)別在于?UDP?不一定提供可靠的數(shù)據(jù)傳輸。事實(shí)上,該協(xié)議不能保證數(shù)據(jù)準(zhǔn)確無誤地到達(dá)目的地。UDP?在許多方面非常有效。當(dāng)某個(gè)程序的目標(biāo)是盡快地傳輸盡可能多的信息時(shí)(其中任意給定數(shù)據(jù)的重要性相對(duì)較低),可使用?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ù)之間保持一個(gè)虛擬連接。TCP在數(shù)據(jù)包接收無序、丟失或在交付期間被破壞時(shí),負(fù)責(zé)數(shù)據(jù)恢復(fù)。它通過為其發(fā)送的每個(gè)數(shù)據(jù)包提供一個(gè)序號(hào)來完成此恢復(fù)。記住,較低的網(wǎng)絡(luò)層會(huì)將每個(gè)數(shù)據(jù)包視為一個(gè)獨(dú)立的單元,因此,數(shù)據(jù)包可以沿完全不同的路徑發(fā)送,即使它們都是同一消息的組成部分。這種路由與網(wǎng)絡(luò)層處理分段和重新組裝數(shù)據(jù)包的方式非常相似,只是級(jí)別更高而已。 為確保正確地接收數(shù)據(jù),TCP要求在目標(biāo)計(jì)算機(jī)成功收到數(shù)據(jù)時(shí)發(fā)回一個(gè)確認(rèn)(即?ACK)。如果在某個(gè)時(shí)限內(nèi)未收到相應(yīng)的?ACK,將重新傳送數(shù)據(jù)包。如果網(wǎng)絡(luò)擁塞,這種重新傳送將導(dǎo)致發(fā)送的數(shù)據(jù)包重復(fù)。但是,接收計(jì)算機(jī)可使用數(shù)據(jù)包的序號(hào)來確定它是否為重復(fù)數(shù)據(jù)包,并在必要時(shí)丟棄它。 TCP與UDP的選擇 如果比較UDP包和TCP包的結(jié)構(gòu),很明顯UDP包不具備TCP包復(fù)雜的可靠性與控制機(jī)制。與TCP協(xié)議相同,UDP的源端口數(shù)和目的端口數(shù)也都支持一臺(tái)主機(jī)上的多個(gè)應(yīng)用。一個(gè)16位的UDP包包含了一個(gè)字節(jié)長的頭部和數(shù)據(jù)的長度,校驗(yàn)碼域使其可以進(jìn)行整體校驗(yàn)。(許多應(yīng)用只支持UDP,如:多媒體數(shù)據(jù)流,不產(chǎn)生任何額外的數(shù)據(jù),即使知道有破壞的包也不進(jìn)行重發(fā)。) 很明顯,當(dāng)數(shù)據(jù)傳輸?shù)男阅鼙仨氉屛挥跀?shù)據(jù)傳輸?shù)耐暾?、可控制性和可靠性時(shí),TCP協(xié)議是當(dāng)然的選擇。當(dāng)強(qiáng)調(diào)傳輸性能而不是傳輸?shù)耐暾詴r(shí),如:音頻和多媒體應(yīng)用,UDP是最好的選擇。在數(shù)據(jù)傳輸時(shí)間很短,以至于此前的連接過程成為整個(gè)流量主體的情況下,UDP也是一個(gè)好的選擇,如:DNS交換。把SNMP建立在UDP上的部分原因是設(shè)計(jì)者認(rèn)為當(dāng)發(fā)生網(wǎng)絡(luò)阻塞時(shí),UDP較低的開銷使其有更好的機(jī)會(huì)去傳送管理數(shù)據(jù)。TCP豐富的功能有時(shí)會(huì)導(dǎo)致不可預(yù)料的性能低下,但是我們相信在不遠(yuǎn)的將來,TCP可靠的點(diǎn)對(duì)點(diǎn)連接將會(huì)用于絕大多數(shù)的網(wǎng)絡(luò)應(yīng)用。 TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。一個(gè)TCP連接必須要經(jīng)過三次“對(duì)話”才能建立起來。三次對(duì)話的簡單過程:主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對(duì)話;主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時(shí)候發(fā)?”,這是第二次對(duì)話;主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接著吧!”,這是第三次對(duì)話。三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。 UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去! UDP適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境。比如,我們經(jīng)常使用“ping”命令來測(cè)試兩臺(tái)主機(jī)之間TCP/IP通信是否正常,其實(shí)“ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來,那么網(wǎng)絡(luò)就是通的。例如,在默認(rèn)狀態(tài)下,一次“ping”操作發(fā)送4個(gè)數(shù)據(jù)包(如圖2所示)。大家可以看到,發(fā)送的數(shù)據(jù)包數(shù)量是4包,收到的也是4包(因?yàn)閷?duì)方主機(jī)收到后會(huì)發(fā)回一個(gè)確認(rèn)收到的數(shù)據(jù)包)。這充分說明了UDP協(xié)議是面向非連接的協(xié)議,沒有建立連接的過程。正因?yàn)閁DP協(xié)議沒有連接的過程,所以它的通信效果高;但也正因?yàn)槿绱耍目煽啃圆蝗鏣CP協(xié)議高。QQ就使用UDP發(fā)消息,因此有時(shí)會(huì)出現(xiàn)收不到消息的情況。HTTP是用TCP協(xié)議傳輸?shù)摹?? TCP協(xié)議與UDP協(xié)議的區(qū)別 TCP基于面向連接的協(xié)議,數(shù)據(jù)傳輸可靠,傳輸速度慢,適用于傳輸大量數(shù)據(jù),可靠性要求高的場(chǎng)合。 UDP協(xié)議面向非連接協(xié)議,數(shù)據(jù)傳輸不可靠,傳輸速度快,適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境。 ? 面向連接的TCP “面向連接”就是在正式通信前必須要與對(duì)方建立起連接。比如你給別人打電話,必須等線路接通了、對(duì)方拿起話筒才能相互通話。 TCP協(xié)議能為應(yīng)用程序提供可靠的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流無差錯(cuò)地發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù)。 ? 面向非連接的UDP協(xié)議 “面向非連接”就是在正式通信前不必與對(duì)方先建立連接,不管對(duì)方狀態(tài)就直接發(fā)送。這與現(xiàn)在風(fēng)行的手機(jī)短信非常相似:你在發(fā)短信的時(shí)候,只需要輸入對(duì)方手機(jī)號(hào)就OK了。 UDP適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境 UDP協(xié)議是面向非連接的協(xié)議,沒有建立連接的過程。正因?yàn)閁DP協(xié)議沒有連接的過程,所以它的通信效果高;但也正因?yàn)槿绱?,它的可靠性不如TCP協(xié)議高。QQ就使用UDP發(fā)消息,因此有時(shí)會(huì)出現(xiàn)收不到消息的情況。 TCP協(xié)議與UDP協(xié)議支持的應(yīng)用協(xié)議 TCP支持的應(yīng)用協(xié)議主要有:Telnet、FTP、SMTP等; UDP支持的應(yīng)用層協(xié)議主要有:NFS(網(wǎng)絡(luò)文件系統(tǒng))、SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)、DNS(主域名稱系統(tǒng))、TFTP(通用文件傳輸協(xié)議)等。 ?TCP和UDP都是位于OSI模型中的傳輸層中。 TCP優(yōu)點(diǎn):面向連接的,具有實(shí)時(shí)性,就象打電話一樣,兩者必須建立連接. 它保證你所傳輸?shù)臇|西是準(zhǔn)確到達(dá)的,并且收方要給你一個(gè)收到或沒有\(zhòng)?????收到的回復(fù),所以它具有安全性的特點(diǎn).. UDP優(yōu)點(diǎn):面向無連接的,就象給某人寄信一樣,對(duì)方不需要在郵局等著你的信到. 所以說,它沒有保障性,不能確保你一定能收到信,不象TCP那樣,,但是??它比TCP好的一點(diǎn),就是速度快,因?yàn)樗恍枰p方交流是否收到,對(duì)發(fā)的東西有一個(gè)確認(rèn)的過程.?
原文:https://www.lixiaodong.com.cn/archives/213