TCP和UDP的9個(gè)區(qū)別是什么

TCP和UDP是兩個(gè)傳輸層協(xié)議,廣泛應(yīng)用于網(wǎng)絡(luò)中不同主機(jī)之間傳輸數(shù)據(jù)势似。對(duì)任何程序員來(lái)說(shuō)顶岸,熟悉TCP和UDP的工作方式都是至關(guān)重要的腔彰。這就是為什么TCP和UDP是一個(gè)流行的Java編程面試問(wèn)題。我曾經(jīng)在各種不同的Java面試中見(jiàn)過(guò)這個(gè)問(wèn)題,尤其是對(duì)服務(wù)器端Java開(kāi)發(fā)人員的面試辖佣。由于FIX(金融信息交換)協(xié)議也是一個(gè)基于TCP協(xié)議,一些投資銀行,對(duì)沖基金,和交換解決方案提供商也在尋找有良好的TCP和UDP的知識(shí)的Java開(kāi)發(fā)人員霹抛。為高速電子交易平臺(tái)編寫(xiě)FIX引擎和服務(wù)器端組件需要能夠?qū)?shù)據(jù)結(jié)構(gòu)、算法以及網(wǎng)絡(luò)等基本知識(shí)都理解透徹的的開(kāi)發(fā)人員的

   順便說(shuō)一下,使用TCP和UDP并不局限于一個(gè)領(lǐng)域,它處于互聯(lián)網(wǎng)的中心位置卷谈。HTTP是基于TCP杯拐,而HTTP是整個(gè)互聯(lián)網(wǎng)的核心部分。另一個(gè)Java開(kāi)發(fā)人員應(yīng)該理解這兩個(gè)協(xié)議的理由是, java廣泛用于編寫(xiě)多線(xiàn)程世蔗、并行以及可伸縮的服務(wù)器程序端逼。Java還提供了豐富的基于TCP和UDP套接字編程API。在這篇文章中,我們將學(xué)習(xí)TCP和UDP協(xié)議之間的關(guān)鍵差異污淋。首先,TCP代表傳輸控制協(xié)議和UDP代表用戶(hù)數(shù)據(jù)報(bào)協(xié)議,兩者都廣泛的應(yīng)用于構(gòu)建互聯(lián)網(wǎng)應(yīng)用顶滩。

TCP與UDP之間的區(qū)別

   我喜歡比較兩事物的不同點(diǎn),這不僅使他們更加容易比較寸爆,而且會(huì)更容易記住他們之間的差異礁鲁。當(dāng)我們比較TCP,UDP赁豆,我們需要了解TCP和UDP各自的工作方式仅醇,了解哪種協(xié)議提供了可靠保證交付和而哪個(gè)又沒(méi)有。哪種協(xié)議是快速的魔种,他為什么更加快速析二,最重要的是,當(dāng)我們了解了這些节预,在建設(shè)我們自己的分布式應(yīng)用程序時(shí)叶摄,就知道該選擇TCP還是 UDP。在這篇文章中安拟,我們將看到9點(diǎn)UDP和TCP之間的差異准谚,例如,連接步驟去扣,排序,速度樊破,可靠性愉棱,開(kāi)銷(xiāo),頭大小哲戚,擁塞控制奔滑,應(yīng)用以及基于TCP和UDP協(xié)議不同,他們?nèi)绾蝹鬏敂?shù)據(jù)顺少。

1. 基于連接vs無(wú)連接

他們之間的第一點(diǎn)并且最重要的區(qū)別是:TCP是面向連接的協(xié)議朋其,而UDP是無(wú)連接的協(xié)議王浴。這意味著當(dāng)一個(gè)客戶(hù)端和一個(gè)服務(wù)器通過(guò)TCP發(fā)送數(shù)據(jù)之前,必須先建立連接梅猿,他們可以通過(guò)TCP發(fā)送數(shù)據(jù)氓辣。建立連接的過(guò)程也被稱(chēng)為T(mén)CP握手,他通過(guò)控制消息在客戶(hù)端和服務(wù)器之間互換來(lái)實(shí)現(xiàn)袱蚓。下面的圖形象描述了TCP握手過(guò)程钞啸。客戶(hù)端喇潘,它也是TCP連接的發(fā)起者体斩,發(fā)送一個(gè)SYN消息給服務(wù)器,該服務(wù)器端正在監(jiān)聽(tīng)某個(gè)TCP端口颖低。服務(wù)器接收該消息并發(fā)送一個(gè)SYN-ACK消息絮吵,客戶(hù)端接受到該消息之后會(huì)再回一個(gè)ACK消息。一旦服務(wù)器收到ACK消息忱屑,TCP連接就建立成功蹬敲,準(zhǔn)備數(shù)據(jù)傳輸了。另一方面想幻,UDP是無(wú)連接的協(xié)議粱栖,和點(diǎn)對(duì)點(diǎn)連接之前不需要發(fā)送消息。這就是為什么脏毯,UDP更加適合消息的多播發(fā)布闹究,從單個(gè)點(diǎn)向多個(gè)點(diǎn)傳輸消息。

image

圖1:TCP消息握手(TCP - Handshake Message)

2. 可靠性 不同

TCP提供交付保證,這意味著一個(gè)使用TCP協(xié)議發(fā)送的消息是保證交付給客戶(hù)端的食店。如果消息在傳輸過(guò)程中丟失,那么它將重發(fā),這是由TCP協(xié)議本身控制的渣淤。另一方面,UDP是不可靠的,它不提供任何交付的保證。一個(gè)數(shù)據(jù)報(bào)包在運(yùn)輸途中可能會(huì)丟失吉嫩。這就是為什么UDP是不適合保證交付的項(xiàng)目价认。

3.有序性

除了提供交付保證,為T(mén)CP也保證了消息的有序性自娩。該消息將以從服務(wù)器端發(fā)出的同樣的順序發(fā)送到客戶(hù)端用踩,盡管這些消息到網(wǎng)絡(luò)的另一端時(shí)可能是無(wú)序的。TCP協(xié)議將會(huì)為你排好序忙迁。UDP不提供任何有序性或序列性的保證脐彩。數(shù)據(jù)包將以任何可能的順序到達(dá)。這就是為什么TCP是適合需要順序交付方式的應(yīng)用姊扔,盡管有基于UDP的協(xié)議通過(guò)使用序列號(hào)和重傳來(lái)提供有序和可靠性的應(yīng)用惠奸,如TIBCO Rendezvous,他實(shí)際上就是一個(gè)基于UDP的應(yīng)用恰梢。

4.數(shù)據(jù)邊界

TCP不保存數(shù)據(jù)的邊界佛南,而UDP保證梗掰。在傳輸控制協(xié)議,數(shù)據(jù)以字節(jié)流的形式發(fā)送嗅回,并沒(méi)有明顯的標(biāo)志表明傳輸信號(hào)消息(段)的邊界及穗。在UDP中,數(shù)據(jù)包單獨(dú)發(fā)送的妈拌,只有當(dāng)他們到達(dá)時(shí),才會(huì)再次集成猜惋。包有明確的界限來(lái)哪些包已經(jīng)收到著摔,這意味著在消息發(fā)送后,在接收器接口將會(huì)有一個(gè)讀操作定续,來(lái)生成一個(gè)完整的消息谍咆。雖然TCP也將在收集所有字節(jié)之后生成一個(gè)完整的消息,但是這些信息在傳給傳輸給接受端之前將儲(chǔ)存在TCP緩沖區(qū)私股,以確保更好的使用網(wǎng)絡(luò)帶寬

5.速度

總而言之摹察,TCP速度比較慢,而UDP速度比較快倡鲸,因?yàn)門(mén)CP必須創(chuàng)建連接供嚎,以保證消息的可靠交付和有序性克滴,他需要做比UDP多的多的事。這就是為什么UDP更適用于對(duì)速度比較敏感的應(yīng)用优床,例如:在線(xiàn)視頻媒體劝赔,電視廣播和多人在線(xiàn)游戲。

6.重量級(jí)vs輕量級(jí)

由于上述的開(kāi)銷(xiāo)胆敞,TCP被認(rèn)為是重量級(jí)的協(xié)議仍翰,而與之相比,UDP協(xié)議則是一個(gè)輕量級(jí)的協(xié)議幽钢。因?yàn)閁DP傳輸?shù)男畔⒅胁怀袚?dān)任何間接創(chuàng)造連接,保證交貨或秩序的的信息傅是。這也反映在用于承載元數(shù)據(jù)的頭的大小匪燕。

7. 頭大小

TCP具有比UDP更大的頭蕾羊。一個(gè)TCP數(shù)據(jù)包報(bào)頭的大小是20字節(jié),UDP數(shù)據(jù)報(bào)報(bào)頭是8個(gè)字節(jié)帽驯。TCP報(bào)頭中包含序列號(hào)龟再,ACK號(hào),數(shù)據(jù)偏移量尼变,保留利凑,控制位,窗口嫌术,緊急指針哀澈,可選項(xiàng),填充項(xiàng)度气,校驗(yàn)位割按,源端口和目的端口。而UDP報(bào)頭只包含長(zhǎng)度磷籍,源端口號(hào)适荣,目的端口,和校驗(yàn)和院领。下圖是TCP和UDP頭:

image

圖2:TCP包格式(TCP Packet Format)

image

圖3:UDP包格式(UDP Packet format)

8. 擁塞或流控制

TCP有流量控制弛矛。在任何用戶(hù)數(shù)據(jù)可以被發(fā)送之前,TCP需要三數(shù)據(jù)包來(lái)設(shè)置一個(gè)套接字連接比然。TCP處理的可靠性和擁塞控制丈氓。另一方面,UDP不能進(jìn)行流量控制谈秫。

9. 用法和應(yīng)用

在互聯(lián)網(wǎng)中扒寄,TCP和UDP都運(yùn)行在哪些環(huán)境中了?在了解了TCP和UDP之間的關(guān)鍵差異之后拟烫,我們可以很容易地得出結(jié)論该编,哪種情況適合他們。由于TCP提供可靠交付和有序性的保證硕淑,它是最適合需要高可靠并且對(duì)傳輸時(shí)間要求不高的應(yīng)用课竣。UDP是更適合的應(yīng)用程序需要快速,高效的傳輸?shù)膽?yīng)用置媳,如游戲于樟。UDP是無(wú)狀態(tài)的性質(zhì),在服務(wù)器端需要對(duì)大量客戶(hù)端產(chǎn)生的少量請(qǐng)求進(jìn)行應(yīng)答的應(yīng)用中是非常有用的拇囊。在實(shí)踐中迂曲,TCP被用于金融領(lǐng)域,如FIX協(xié)議是一種基于TCP的協(xié)議寥袭,而UDP是大量使用在游戲和娛樂(lè)場(chǎng)所路捧。

基于TCP和UDP的協(xié)議

基于TCP協(xié)議的最好例子是HTTP協(xié)議和HTTPS協(xié)議关霸,他們幾乎存在于互聯(lián)網(wǎng)的任何地方,實(shí)際上杰扫,絕大多數(shù)你所熟悉的通常協(xié)議队寇,都是基于TCP的,例如:Telnet章姓,F(xiàn)TP以及SMTP協(xié)議佳遣。UDP協(xié)議沒(méi)有TCP協(xié)議那么受歡迎,但是也被廣泛應(yīng)用凡伊,比如DHCP以及DNS協(xié)議零渐,其他還有一些基于UDP的協(xié)議如SNMP,TFTP,BOOTP以及NFS(早期版本)。

特別需要記住的是窗声,TCP是面向連接的相恃,可靠的,緩慢的笨觅,可靠交付以及保證消息順序的拦耐,而UDP是無(wú)連接的,不可靠的见剩,沒(méi)有序列保證杀糯,但是一個(gè)快速傳輸?shù)膮f(xié)議。TCP頭開(kāi)銷(xiāo)也比UDP高得多苍苞,因?yàn)樗總€(gè)數(shù)據(jù)包中藥發(fā)送更多的元數(shù)據(jù)固翰。值得一提的是,TCP頭的大小是20個(gè)字節(jié)羹呵,而UDP頭大小是8個(gè)字節(jié)骂际。如果你不想丟失任何消息,使用TCP協(xié)議冈欢,而UDP能夠高速傳輸數(shù)據(jù)歉铝,并且丟失少量的數(shù)據(jù)包是可以接受的,如視頻流或在線(xiàn)多玩家游戲凑耻。對(duì)于基于TCP / UDP協(xié)議太示,運(yùn)行在Linux上的應(yīng)用,需要牢記的基本網(wǎng)絡(luò)命令香浩,如Telnet和netstat类缤,他們極大的幫助調(diào)試和排除任何連接問(wèn)題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邻吭,一起剝皮案震驚了整個(gè)濱河市餐弱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖膏蚓,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猖败,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡降允,警方通過(guò)查閱死者的電腦和手機(jī)邓嘹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)膜赃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人茫负,你說(shuō)我怎么就攤上這事破停〕崧ィ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵真慢,是天一觀(guān)的道長(zhǎng)毅臊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)黑界,這世上最難降的妖魔是什么管嬉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮朗鸠,結(jié)果婚禮上蚯撩,老公的妹妹穿的比我還像新娘。我一直安慰自己烛占,他們只是感情好胎挎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著忆家,像睡著了一般犹菇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芽卿,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天揭芍,我揣著相機(jī)與錄音,去河邊找鬼蹬竖。 笑死沼沈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的币厕。 我是一名探鬼主播列另,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旦装!你這毒婦竟也來(lái)了页衙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎店乐,沒(méi)想到半個(gè)月后艰躺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡眨八,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年腺兴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廉侧。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡页响,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出段誊,到底是詐尸還是另有隱情闰蚕,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布连舍,位于F島的核電站没陡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏索赏。R本人自食惡果不足惜盼玄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潜腻。 院中可真熱鬧强岸,春花似錦、人聲如沸砾赔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)暴心。三九已至妓盲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間专普,已是汗流浹背悯衬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留檀夹,地道東北人筋粗。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像炸渡,于是被迫代替她去往敵國(guó)和親娜亿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自原文:TCP督赤、UDP以及TCP滑窗嘁灯,它們的區(qū)別注:文中提到TCP傳輸過(guò)程的特點(diǎn),以及“粘包”的原因和解決方案躲舌,...
    半島夏天閱讀 3,486評(píng)論 2 31
  • 先簡(jiǎn)單介紹下TCP與UDP没卸。TCP是一種面向連接的協(xié)議枯冈,提供可靠的數(shù)據(jù)傳輸,一般服務(wù)質(zhì)量要求比較高的情況办悟,使用這個(gè)...
    小胖東不吃肉閱讀 1,299評(píng)論 0 1
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記滩褥,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評(píng)論 0 8
  • 本篇文章主要是從運(yùn)輸層協(xié)議概述病蛉、UDP、TCP瑰煎、可靠傳輸?shù)墓ぷ髟砥倘弧CP首部格式、TCP可靠傳輸?shù)膶?shí)現(xiàn)酒甸、TCP流...
    SeanMa閱讀 3,879評(píng)論 2 13
  • TCP UDP TCP和UDP的區(qū)別tcp連接就像打電話(huà)魄健,兩者之間必須有一條不間斷的通路,數(shù)據(jù)不到達(dá)對(duì)方插勤,對(duì)方就一...
    Aniugel閱讀 20,300評(píng)論 0 24