先簡單介紹下TCP與UDP苍匆。? TCP是一種面向連接的協(xié)議,提供可靠的數(shù)據(jù)傳輸,一般服務(wù)質(zhì)量要求比較高的情況,使用這個協(xié)議。UDP—用戶數(shù)據(jù)報協(xié)議血筑,是一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)煎楣。? 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)絡(luò)非常擁擠的情況下才有可能發(fā)生鱼填。 既然UDP是一種不可靠的網(wǎng)絡(luò)協(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服務(wù)器嫂沉,一個叫主DNS服務(wù)器,一個叫輔助DNS服務(wù)器扮碧。在一個區(qū)中主DNS服務(wù)器從自己本機的數(shù)據(jù)文件中讀取該區(qū)的DNS數(shù)據(jù)信息趟章,而輔助DNS服務(wù)器則從區(qū)的主DNS服務(wù)器中讀取該區(qū)的DNS數(shù)據(jù)信息。當一個輔助DNS服務(wù)器啟動時慎王,它需要與主DNS服務(wù)器通信蚓土,并加載數(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,主要有一下兩點考慮:? 1.輔域名服務(wù)器會定時(一般時3小時)向主域名服務(wù)器進行查詢以便了解數(shù)據(jù)是否有變動诸典。如有變動剃毒,則會執(zhí)行一次區(qū)域傳送,進行數(shù)據(jù)同步。區(qū)域傳送將使用TCP而不是UDP赘阀,因為數(shù)據(jù)同步傳送的數(shù)據(jù)量比一個請求和應答的數(shù)據(jù)量要多得多益缠。? 2.TCP是一種可靠的連接,保證了數(shù)據(jù)的準確性基公。? 域名解析時使用UDP協(xié)議:? 客戶端向DNS服務(wù)器查詢域名幅慌,一般返回的內(nèi)容都不超過512字節(jié),用UDP傳輸即可轰豆。不用經(jīng)過TCP三次握手胰伍,這樣DNS服務(wù)器負載更低,響應更快酸休。雖然從理論上說骂租,客戶端也可以指定向DNS服務(wù)器查詢的時候使用TCP,但事實上斑司,很多DNS服務(wù)器進行配置的時候渗饮,僅支持UDP查詢包。 UDP UDP?與?TCP?的主要區(qū)別在于?UDP?不一定提供可靠的數(shù)據(jù)傳輸宿刮。事實上互站,該協(xié)議不能保證數(shù)據(jù)準確無誤地到達目的地。UDP?在許多方面非常有效僵缺。當某個程序的目標是盡快地傳輸盡可能多的信息時(其中任意給定數(shù)據(jù)的重要性相對較低)胡桃,可使用?UDP。ICQ?短消息使用?UDP?協(xié)議發(fā)送消息磕潮。 許多程序?qū)⑹褂脝为毜腡CP連接和單獨的UDP連接翠胰。重要的狀態(tài)信息隨可靠的TCP連接發(fā)送,而主數(shù)據(jù)流通過UDP發(fā)送自脯。 TCP TCP的目的是提供可靠的數(shù)據(jù)傳輸之景,并在相互進行通信的設(shè)備或服務(wù)之間保持一個虛擬連接。TCP在數(shù)據(jù)包接收無序冤今、丟失或在交付期間被破壞時闺兢,負責數(shù)據(jù)恢復。它通過為其發(fā)送的每個數(shù)據(jù)包提供一個序號來完成此恢復戏罢。記住屋谭,較低的網(wǎng)絡(luò)層會將每個數(shù)據(jù)包視為一個獨立的單元,因此龟糕,數(shù)據(jù)包可以沿完全不同的路徑發(fā)送桐磁,即使它們都是同一消息的組成部分。這種路由與網(wǎng)絡(luò)層處理分段和重新組裝數(shù)據(jù)包的方式非常相似讲岁,只是級別更高而已我擂。 為確保正確地接收數(shù)據(jù)衬以,TCP要求在目標計算機成功收到數(shù)據(jù)時發(fā)回一個確認(即?ACK)。如果在某個時限內(nèi)未收到相應的?ACK校摩,將重新傳送數(shù)據(jù)包看峻。如果網(wǎng)絡(luò)擁塞,這種重新傳送將導致發(fā)送的數(shù)據(jù)包重復衙吩。但是互妓,接收計算機可使用數(shù)據(jù)包的序號來確定它是否為重復數(shù)據(jù)包,并在必要時丟棄它坤塞。 TCP與UDP的選擇 如果比較UDP包和TCP包的結(jié)構(gòu)冯勉,很明顯UDP包不具備TCP包復雜的可靠性與控制機制。與TCP協(xié)議相同摹芙,UDP的源端口數(shù)和目的端口數(shù)也都支持一臺主機上的多個應用灼狰。一個16位的UDP包包含了一個字節(jié)長的頭部和數(shù)據(jù)的長度,校驗碼域使其可以進行整體校驗浮禾。(許多應用只支持UDP交胚,如:多媒體數(shù)據(jù)流,不產(chǎn)生任何額外的數(shù)據(jù)伐厌,即使知道有破壞的包也不進行重發(fā)承绸。) 很明顯裸影,當數(shù)據(jù)傳輸?shù)男阅鼙仨氉屛挥跀?shù)據(jù)傳輸?shù)耐暾哉豕臁⒖煽刂菩院涂煽啃詴r,TCP協(xié)議是當然的選擇轩猩。當強調(diào)傳輸性能而不是傳輸?shù)耐暾詴r卷扮,如:音頻和多媒體應用,UDP是最好的選擇均践。在數(shù)據(jù)傳輸時間很短晤锹,以至于此前的連接過程成為整個流量主體的情況下,UDP也是一個好的選擇彤委,如:DNS交換鞭铆。把SNMP建立在UDP上的部分原因是設(shè)計者認為當發(fā)生網(wǎng)絡(luò)阻塞時,UDP較低的開銷使其有更好的機會去傳送管理數(shù)據(jù)焦影。TCP豐富的功能有時會導致不可預料的性能低下车遂,但是我們相信在不遠的將來,TCP可靠的點對點連接將會用于絕大多數(shù)的網(wǎng)絡(luò)應用斯辰。 TCP(Transmission Control Protocol舶担,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說彬呻,在正式收發(fā)數(shù)據(jù)前衣陶,必須和對方建立可靠的連接柄瑰。一個TCP連接必須要經(jīng)過三次“對話”才能建立起來。三次對話的簡單過程:主機A向主機B發(fā)出連接請求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù)剪况,可以嗎教沾?”,這是第一次對話译断;主機B向主機A發(fā)送同意連接和要求同步(同步就是兩臺主機一個在發(fā)送详囤,一個在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以镐作,你什么時候發(fā)藏姐?”,這是第二次對話该贾;主機A再發(fā)出一個數(shù)據(jù)包確認主機B的要求同步:“我現(xiàn)在就發(fā)羔杨,你接著吧!”杨蛋,這是第三次對話兜材。三次“對話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次“對話”之后逞力,主機A才向主機B正式發(fā)送數(shù)據(jù)曙寡。 UDP(User Data Protocol,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應的協(xié)議寇荧。它是面向非連接的協(xié)議举庶,它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去揩抡! UDP適用于一次只傳送少量數(shù)據(jù)户侥、對可靠性要求不高的應用環(huán)境。比如峦嗤,我們經(jīng)常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常蕊唐,其實“ping”命令的原理就是向?qū)Ψ街鳈C發(fā)送UDP數(shù)據(jù)包,然后對方主機確認收到數(shù)據(jù)包烁设,如果數(shù)據(jù)包是否到達的消息及時反饋回來替梨,那么網(wǎng)絡(luò)就是通的。例如装黑,在默認狀態(tài)下副瀑,一次“ping”操作發(fā)送4個數(shù)據(jù)包(如圖2所示)。大家可以看到曹体,發(fā)送的數(shù)據(jù)包數(shù)量是4包俗扇,收到的也是4包(因為對方主機收到后會發(fā)回一個確認收到的數(shù)據(jù)包)。這充分說明了UDP協(xié)議是面向非連接的協(xié)議箕别,沒有建立連接的過程铜幽。正因為UDP協(xié)議沒有連接的過程滞谢,所以它的通信效果高;但也正因為如此除抛,它的可靠性不如TCP協(xié)議高狮杨。QQ就使用UDP發(fā)消息,因此有時會出現(xiàn)收不到消息的情況到忽。HTTP是用TCP協(xié)議傳輸?shù)摹?? TCP協(xié)議與UDP協(xié)議的區(qū)別 TCP基于面向連接的協(xié)議橄教,數(shù)據(jù)傳輸可靠,傳輸速度慢喘漏,適用于傳輸大量數(shù)據(jù)护蝶,可靠性要求高的場合。 UDP協(xié)議面向非連接協(xié)議翩迈,數(shù)據(jù)傳輸不可靠持灰,傳輸速度快,適用于一次只傳送少量數(shù)據(jù)负饲、對可靠性要求不高的應用環(huán)境堤魁。 ? 面向連接的TCP “面向連接”就是在正式通信前必須要與對方建立起連接。比如你給別人打電話返十,必須等線路接通了妥泉、對方拿起話筒才能相互通話。 TCP協(xié)議能為應用程序提供可靠的通信連接洞坑,使一臺計算機發(fā)出的字節(jié)流無差錯地發(fā)往網(wǎng)絡(luò)上的其他計算機盲链,對可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù)。 ? 面向非連接的UDP協(xié)議 “面向非連接”就是在正式通信前不必與對方先建立連接检诗,不管對方狀態(tài)就直接發(fā)送匈仗。這與現(xiàn)在風行的手機短信非常相似:你在發(fā)短信的時候瓢剿,只需要輸入對方手機號就OK了逢慌。 UDP適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應用環(huán)境 UDP協(xié)議是面向非連接的協(xié)議间狂,沒有建立連接的過程攻泼。正因為UDP協(xié)議沒有連接的過程,所以它的通信效果高鉴象;但也正因為如此忙菠,它的可靠性不如TCP協(xié)議高。QQ就使用UDP發(fā)消息纺弊,因此有時會出現(xiàn)收不到消息的情況牛欢。 TCP協(xié)議與UDP協(xié)議支持的應用協(xié)議 TCP支持的應用協(xié)議主要有:Telnet、FTP淆游、SMTP等傍睹; UDP支持的應用層協(xié)議主要有:NFS(網(wǎng)絡(luò)文件系統(tǒng))隔盛、SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)、DNS(主域名稱系統(tǒng))拾稳、TFTP(通用文件傳輸協(xié)議)等吮炕。 ?TCP和UDP都是位于OSI模型中的傳輸層中。 TCP優(yōu)點:面向連接的,具有實時性,就象打電話一樣,兩者必須建立連接. 它保證你所傳輸?shù)臇|西是準確到達的,并且收方要給你一個收到或沒有\(zhòng)?????收到的回復,所以它具有安全性的特點.. UDP優(yōu)點:面向無連接的,就象給某人寄信一樣,對方不需要在郵局等著你的信到. 所以說,它沒有保障性,不能確保你一定能收到信,不象TCP那樣,,但是??它比TCP好的一點,就是速度快,因為他不需要雙方交流是否收到,對發(fā)的東西有一個確認的過程.?
原文:https://www.lixiaodong.com.cn/archives/213