TCP與UDP的介紹辕坝,TCP與UDP的區(qū)別

TCP/IP運(yùn)輸層的兩個(gè)主要協(xié)議分別是TCP(傳輸控制協(xié)議)與UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。傳送的數(shù)據(jù)單位分別叫“TCP報(bào)文段”或“UDP用戶數(shù)據(jù)報(bào)”荐健。

UDP(用戶數(shù)據(jù)報(bào)協(xié)議)

主要特點(diǎn):
1)無連接的酱畅,發(fā)送數(shù)據(jù)之前不需要連接,減少了開銷江场。
2)盡最大努力交付纺酸。即不保證可靠交付。
3)面向報(bào)文址否。發(fā)送方的UDP對(duì)應(yīng)用程序交下來的報(bào)文餐蔬,在添加首部后就向下交付IP層。同樣的佑附,IP層交上來的UDP用戶數(shù)據(jù)報(bào)樊诺,去除首部后就原封不動(dòng)的交付上面的應(yīng)用進(jìn)程。也就是說音同,一次交付一個(gè)完整的報(bào)文词爬。
4)沒有擁塞控制。因此網(wǎng)絡(luò)擁塞不會(huì)使主機(jī)發(fā)送速率降低权均。但是可能會(huì)丟失一些數(shù)據(jù)顿膨。
5)支持一對(duì)一,一對(duì)多叽赊,多對(duì)一和多對(duì)多的交互通信恋沃。
6)UDP首部開銷小,只有8個(gè)字節(jié)必指,比TCP的20個(gè)字節(jié)的首部要短囊咏。

UDP的首部格式
用戶數(shù)據(jù)報(bào)UDP有兩個(gè)字段:數(shù)據(jù)字段和首部字段。首部字段很簡(jiǎn)單只有8個(gè)字節(jié),由四個(gè)字段組成匆笤,每個(gè)字段的長(zhǎng)度都是2個(gè)字節(jié)研侣。意義如下:

  • 源端口:需要對(duì)方回信時(shí)選用,不需要時(shí)可用全0.
  • 目的端口:交付報(bào)文時(shí)需要炮捧。
  • 長(zhǎng)度:用戶數(shù)據(jù)報(bào)的長(zhǎng)度庶诡,最小值為8(僅有首部)。
  • 檢驗(yàn)和:檢測(cè)UDP用戶數(shù)據(jù)報(bào)在傳輸中是否有錯(cuò)咆课。有錯(cuò)就丟棄末誓。

TCP(傳輸控制協(xié)議)

TCP較復(fù)雜,因此先對(duì)TCP協(xié)議作一般的介紹书蚪,再逐步深入討論TCP的可靠傳輸喇澡、流量控制和擁塞控制等問題。

TCP最主要的特點(diǎn):
  • 面向連接的運(yùn)輸層協(xié)議殊校。這就是說晴玖,應(yīng)用程序在使用TCP協(xié)議之前,必須先建立TCP連接为流。在傳送數(shù)據(jù)完畢后呕屎,必須釋放已經(jīng)建立的TCP連接。也就是說敬察,應(yīng)用進(jìn)程之間的通信好像在“打電話”秀睛,通話之前要先撥號(hào)建立連接,通話結(jié)束后要掛機(jī)釋放連接莲祸。
  • 每一條TCP只能有兩個(gè)端點(diǎn)蹂安。每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的(一對(duì)一)。
  • TCP提供可靠交付锐帜。通過TCP連接傳送的數(shù)據(jù)田盈,無差錯(cuò)、不丟失不重復(fù)缴阎,并且按序到達(dá)缠黍。
  • TCP提供全雙工通信(全雙工通信:即通信的雙方可以同時(shí)發(fā)送和接收信息的信息交互方式。半雙工通信:即通信的雙方都可以發(fā)送和接受信息药蜻,但同一時(shí)刻只能有一個(gè)方向瓷式。)。
  • 面向字節(jié)流语泽。TCP中的“流”指的是流入到進(jìn)程或從進(jìn)程流出的字節(jié)序列贸典。發(fā)送方要先把數(shù)據(jù)轉(zhuǎn)化為字節(jié)流寫入發(fā)送緩存進(jìn)行發(fā)送,且接收方必須有能力識(shí)別字節(jié)流踱卵。
TCP的連接

TCP把連接作為最基本的抽象廊驼。TCP的許多特性都與TCP是面向連接的這個(gè)基本特性有關(guān)据过。
每一條TCP有兩個(gè)端點(diǎn)。我們稱之為套接字或端口(socket)妒挎。它并不是端口绳锅,也不是主機(jī)的IP地址,也不是應(yīng)用進(jìn)程酝掩。根據(jù)定義鳞芙,端口號(hào)拼接到IP地址構(gòu)成了套接字。因此期虾,套接字的表示方法是在點(diǎn)分十進(jìn)制的IP地址后面加上端口號(hào)原朝,中間用冒號(hào)或逗號(hào)隔開。
例:192.3.4.5:80镶苞。
每一條TCP連接唯一地被通信兩端的兩個(gè)端點(diǎn)(即兩個(gè)套接字)所確定喳坠。

可靠傳輸?shù)墓ぷ髟恚?/h5>

TCP發(fā)送的報(bào)文段是交給IP層傳送的,而IP層只能提供盡最大努力服務(wù)茂蚓,也就是說壕鹉,TCP下面的網(wǎng)絡(luò)鎖提供的是不可靠的傳輸。因此聋涨,TCP必須采用適當(dāng)?shù)拇胧┎拍苁沟脙蓚€(gè)運(yùn)輸層之間的通信變得可靠晾浴。
停止等待:每發(fā)送完一個(gè)分組就停止發(fā)送等待對(duì)方的確認(rèn)。在收到確認(rèn)后在發(fā)送下一個(gè)分組牛郑。

傳遞過程:
1)無差錯(cuò)情況

停止等待協(xié)議可用下圖說明怠肋。(a)代表無差錯(cuò)情況敬鬓。A發(fā)送分組M1,發(fā)完就暫停發(fā)送淹朋,等待B確認(rèn)。B收到M1就向A發(fā)送確認(rèn)钉答。A收到對(duì)M1的確認(rèn)后础芍,再發(fā)送下一個(gè)分組M2。

2) 出現(xiàn)差錯(cuò)

B接受M1時(shí)檢測(cè)出了差錯(cuò)数尿,就丟棄M1仑性,其他什么也不做(不通知A有差錯(cuò)的分組)。B不會(huì)發(fā)送任何信息右蹦≌锔耍可靠傳輸協(xié)議是這樣設(shè)計(jì)的:A只要超過了一段時(shí)間任然沒有收到確認(rèn),就認(rèn)為剛才發(fā)送的分組丟失了何陆,因而重傳前面發(fā)送過的分組晨汹。這就叫超時(shí)重傳。要實(shí)現(xiàn)超時(shí)重傳贷盲,就要在每發(fā)送完一個(gè)分組時(shí)設(shè)置一個(gè)超時(shí)計(jì)時(shí)器淘这。若收到,取消超時(shí)計(jì)時(shí)器的設(shè)置。
注意以下三點(diǎn):

  • 第一铝穷,A在發(fā)送完一個(gè)分組后钠怯,必須暫時(shí)保留已發(fā)送分組的副本。只有在收到相應(yīng)的確認(rèn)后才能清除暫時(shí)保留的分組副本曙聂。
  • 第二晦炊,分組和確認(rèn)分組都必須進(jìn)行編號(hào)。這樣才能明確是哪一個(gè)發(fā)送出去的分組收到了確認(rèn)筹陵,而哪一個(gè)分組還沒有收到確認(rèn)刽锤。
  • 第三,超時(shí)計(jì)時(shí)器設(shè)置的重傳時(shí)間應(yīng)當(dāng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r(shí)間更長(zhǎng)一些朦佩。


    image.png
3)確認(rèn)丟失和確認(rèn)遲到

下圖(a)說明并思,B發(fā)送的對(duì)M1的確認(rèn)丟失了。A在設(shè)定的超時(shí)重傳時(shí)間內(nèi)沒有收到確認(rèn)语稠,并無法知道自己發(fā)送的分組出錯(cuò)宋彼,丟失,或者是B發(fā)送的確認(rèn)丟失了仙畦。因此A在超時(shí)計(jì)時(shí)器到期后就要重傳M1输涕。假定B又收到了M1,這時(shí)應(yīng)采取兩個(gè)行動(dòng):
1)丟棄這個(gè)重復(fù)的分組M1慨畸,不向上層交付莱坎。
2)向A發(fā)送確認(rèn)南片。A收到了B收到的確認(rèn)消息后盒犹,將繼續(xù)傳送M2。

圖b也是一種可能出現(xiàn)的情況深夯,傳輸過程中沒有出現(xiàn)差錯(cuò)弱卡,但B對(duì)分組M1的確認(rèn)遲到了乃正。A會(huì)收到重復(fù)的確認(rèn)。對(duì)重復(fù)的確認(rèn)處理很簡(jiǎn)單:收下后就丟棄婶博。

使用上述方法就可以在不可靠的傳輸網(wǎng)絡(luò)上實(shí)現(xiàn)可靠的通信瓮具。

image.png
TCP報(bào)文段的首部格式

TCP的傳送數(shù)據(jù)單元是報(bào)文段。分為首部和數(shù)據(jù)兩部分凡人,而TCP全部功能都體現(xiàn)在它首部中各字段的作用名党。因此,只有弄清TCP首部各字段的作用才能掌握TCP的工作原理挠轴。

首部格式:

前20個(gè)字節(jié)是固定的传睹,后面有4n字節(jié)是根據(jù)需要而增加的選項(xiàng)(n為int)。因此TCP首部最小長(zhǎng)度是20字節(jié)忠荞。

image.png
TCP的控制位:

1)URG:URG=1時(shí)蒋歌,表示此報(bào)文段有緊急數(shù)據(jù)帅掘,應(yīng)盡快傳送(優(yōu)先級(jí)高),而非排隊(duì)順序傳送堂油。
2)ACK:ACK=1時(shí)有效修档,ACK=0時(shí)無效。TCP規(guī)定府框,連接建立后所有傳送的報(bào)文段都必須把ACK置1吱窝。
3)PSH:推送。兩個(gè)應(yīng)用進(jìn)程交互式通信時(shí)迫靖,有時(shí)在一端的應(yīng)用進(jìn)程希望在鍵入一個(gè)命令后立即就能夠收到對(duì)方的響應(yīng)院峡。在這種情況下,TCP就可以使用推送操作系宜,PSH=1照激。立即創(chuàng)建一個(gè)報(bào)文段發(fā)送出去。
4)RST:復(fù)位盹牧。RST=1時(shí)表示TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)俩垃,必須釋放連接,然后再重新建立連接汰寓。
5)SYN:在連接建立時(shí)用來同步序號(hào)口柳。當(dāng)SYN=1而ACK=0時(shí),表明這是個(gè)連接請(qǐng)求報(bào)文段有滑。對(duì)方若同意建立連接跃闹,則應(yīng)在響應(yīng)的報(bào)文段中使SYN和ACK置1。
6)FIN:用來釋放一個(gè)連接毛好。當(dāng)FIN=1時(shí)望艺,表明此報(bào)文段的發(fā)送方得數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接睛榄。

UDP與TCP的區(qū)別

  • UDP在傳送數(shù)據(jù)之前不需要先建立連接荣茫。遠(yuǎn)地主機(jī)運(yùn)輸層在收到UDP報(bào)文后想帅,不需要給出任何確認(rèn)场靴。因此UDP不提供可靠交付,但是效率高港准。TCP則提供面向連接的服務(wù)旨剥。在傳送數(shù)據(jù)之前必須先建立連接,數(shù)據(jù)傳送結(jié)束后要釋放連接浅缸。TCP要提供可靠的轨帜、面向連接的運(yùn)輸服務(wù),因此不可避免地增加了許多的開銷衩椒,如確認(rèn)蚌父、流量控制等哮兰。
  • TCP和UDP在發(fā)送報(bào)文時(shí)所采用的方式完全不同。TCP并不關(guān)心進(jìn)程一次把多長(zhǎng)的報(bào)文發(fā)送到TCP的緩存中苟弛,而是根據(jù)對(duì)方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞程度決定一個(gè)報(bào)文段包含多少字節(jié)喝滞,而UDP發(fā)送報(bào)文長(zhǎng)度是應(yīng)用進(jìn)程給出的。如果應(yīng)用進(jìn)程傳送到TCP緩存的數(shù)據(jù)塊太長(zhǎng)膏秫,TCP就劃分短一些再傳送右遭。若過短也可以等待積累足夠多的字節(jié)后再構(gòu)成報(bào)文段發(fā)送出去。
  • UDP程序結(jié)構(gòu)比較簡(jiǎn)單缤削。它的首部最少為8字節(jié)而TCP最少為20字節(jié)窘哈。
  • UDP不保證數(shù)據(jù)的順序結(jié)構(gòu),而TCP必須保證數(shù)據(jù)的順序結(jié)構(gòu)亭敢。
  • TCP面向字節(jié)流滚婉,實(shí)際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報(bào)文的,UDP沒有擁塞控制帅刀,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用满哪,如IP電話,實(shí)時(shí)視頻會(huì)議等)劝篷。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哨鸭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子娇妓,更是在濱河造成了極大的恐慌像鸡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哈恰,死亡現(xiàn)場(chǎng)離奇詭異只估,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)着绷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蛔钙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荠医,你說我怎么就攤上這事吁脱。” “怎么了彬向?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵兼贡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我娃胆,道長(zhǎng)遍希,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任里烦,我火速辦了婚禮凿蒜,結(jié)果婚禮上禁谦,老公的妹妹穿的比我還像新娘。我一直安慰自己废封,他們只是感情好枷畏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虱饿,像睡著了一般拥诡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氮发,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天渴肉,我揣著相機(jī)與錄音,去河邊找鬼爽冕。 笑死仇祭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颈畸。 我是一名探鬼主播乌奇,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼眯娱!你這毒婦竟也來了礁苗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤徙缴,失蹤者是張志新(化名)和其女友劉穎试伙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于样,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疏叨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了穿剖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚤蔓。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糊余,靈堂內(nèi)的尸體忽然破棺而出秀又,到底是詐尸還是另有隱情,我是刑警寧澤啄刹,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布涮坐,位于F島的核電站凄贩,受9級(jí)特大地震影響誓军,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昵时,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一捷雕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壹甥,春花似錦救巷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溯职,卻和暖如春精盅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谜酒。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工叹俏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人僻族。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓粘驰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親述么。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝌数,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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