TCP與UDP的介紹,TCP與UDP的區別

TCP/IP運輸層的兩個主要協議分別是TCP(傳輸控制協議)與UDP(用戶數據報協議)。傳送的數據單位分別叫“TCP報文段”或“UDP用戶數據報”。

UDP(用戶數據報協議)

主要特點:
1)無連接的,發送數據之前不需要連接,減少了開銷。
2)盡最大努力交付。即不保證可靠交付。
3)面向報文。發送方的UDP對應用程序交下來的報文,在添加首部后就向下交付IP層。同樣的,IP層交上來的UDP用戶數據報,去除首部后就原封不動的交付上面的應用進程。也就是說,一次交付一個完整的報文。
4)沒有擁塞控制。因此網絡擁塞不會使主機發送速率降低。但是可能會丟失一些數據。
5)支持一對一,一對多,多對一和多對多的交互通信。
6)UDP首部開銷小,只有8個字節,比TCP的20個字節的首部要短。

UDP的首部格式
用戶數據報UDP有兩個字段:數據字段和首部字段。首部字段很簡單只有8個字節,由四個字段組成,每個字段的長度都是2個字節。意義如下:

  • 源端口:需要對方回信時選用,不需要時可用全0.
  • 目的端口:交付報文時需要。
  • 長度:用戶數據報的長度,最小值為8(僅有首部)。
  • 檢驗和:檢測UDP用戶數據報在傳輸中是否有錯。有錯就丟棄。

TCP(傳輸控制協議)

TCP較復雜,因此先對TCP協議作一般的介紹,再逐步深入討論TCP的可靠傳輸、流量控制和擁塞控制等問題。

TCP最主要的特點:
  • 面向連接的運輸層協議。這就是說,應用程序在使用TCP協議之前,必須先建立TCP連接。在傳送數據完畢后,必須釋放已經建立的TCP連接。也就是說,應用進程之間的通信好像在“打電話”,通話之前要先撥號建立連接,通話結束后要掛機釋放連接。
  • 每一條TCP只能有兩個端點。每一條TCP連接只能是點對點的(一對一)。
  • TCP提供可靠交付。通過TCP連接傳送的數據,無差錯、不丟失不重復,并且按序到達。
  • TCP提供全雙工通信(全雙工通信:即通信的雙方可以同時發送和接收信息的信息交互方式。半雙工通信:即通信的雙方都可以發送和接受信息,但同一時刻只能有一個方向。)。
  • 面向字節流。TCP中的“流”指的是流入到進程或從進程流出的字節序列。發送方要先把數據轉化為字節流寫入發送緩存進行發送,且接收方必須有能力識別字節流。
TCP的連接

TCP把連接作為最基本的抽象。TCP的許多特性都與TCP是面向連接的這個基本特性有關。
每一條TCP有兩個端點。我們稱之為套接字或端口(socket)。它并不是端口,也不是主機的IP地址,也不是應用進程。根據定義,端口號拼接到IP地址構成了套接字。因此,套接字的表示方法是在點分十進制的IP地址后面加上端口號,中間用冒號或逗號隔開。
例:192.3.4.5:80。
每一條TCP連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。

可靠傳輸的工作原理:

TCP發送的報文段是交給IP層傳送的,而IP層只能提供盡最大努力服務,也就是說,TCP下面的網絡鎖提供的是不可靠的傳輸。因此,TCP必須采用適當的措施才能使得兩個運輸層之間的通信變得可靠。
停止等待:每發送完一個分組就停止發送等待對方的確認。在收到確認后在發送下一個分組。

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

停止等待協議可用下圖說明。(a)代表無差錯情況。A發送分組M1,發完就暫停發送,等待B確認。B收到M1就向A發送確認。A收到對M1的確認后,再發送下一個分組M2。

2) 出現差錯

B接受M1時檢測出了差錯,就丟棄M1,其他什么也不做(不通知A有差錯的分組)。B不會發送任何信息。可靠傳輸協議是這樣設計的:A只要超過了一段時間任然沒有收到確認,就認為剛才發送的分組丟失了,因而重傳前面發送過的分組。這就叫超時重傳。要實現超時重傳,就要在每發送完一個分組時設置一個超時計時器。若收到,取消超時計時器的設置。
注意以下三點:

  • 第一,A在發送完一個分組后,必須暫時保留已發送分組的副本。只有在收到相應的確認后才能清除暫時保留的分組副本。
  • 第二,分組和確認分組都必須進行編號。這樣才能明確是哪一個發送出去的分組收到了確認,而哪一個分組還沒有收到確認。
  • 第三,超時計時器設置的重傳時間應當比數據在分組傳輸的平均往返時間更長一些。


    image.png
3)確認丟失和確認遲到

下圖(a)說明,B發送的對M1的確認丟失了。A在設定的超時重傳時間內沒有收到確認,并無法知道自己發送的分組出錯,丟失,或者是B發送的確認丟失了。因此A在超時計時器到期后就要重傳M1。假定B又收到了M1,這時應采取兩個行動:
1)丟棄這個重復的分組M1,不向上層交付。
2)向A發送確認。A收到了B收到的確認消息后,將繼續傳送M2。

圖b也是一種可能出現的情況,傳輸過程中沒有出現差錯,但B對分組M1的確認遲到了。A會收到重復的確認。對重復的確認處理很簡單:收下后就丟棄。

使用上述方法就可以在不可靠的傳輸網絡上實現可靠的通信

image.png
TCP報文段的首部格式

TCP的傳送數據單元是報文段。分為首部和數據兩部分,而TCP全部功能都體現在它首部中各字段的作用。因此,只有弄清TCP首部各字段的作用才能掌握TCP的工作原理。

首部格式:

前20個字節是固定的,后面有4n字節是根據需要而增加的選項(n為int)。因此TCP首部最小長度是20字節。

image.png
TCP的控制位:

1)URG:URG=1時,表示此報文段有緊急數據,應盡快傳送(優先級高),而非排隊順序傳送。
2)ACK:ACK=1時有效,ACK=0時無效。TCP規定,連接建立后所有傳送的報文段都必須把ACK置1。
3)PSH:推送。兩個應用進程交互式通信時,有時在一端的應用進程希望在鍵入一個命令后立即就能夠收到對方的響應。在這種情況下,TCP就可以使用推送操作,PSH=1。立即創建一個報文段發送出去。
4)RST:復位。RST=1時表示TCP連接中出現嚴重差錯,必須釋放連接,然后再重新建立連接。
5)SYN:在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是個連接請求報文段。對方若同意建立連接,則應在響應的報文段中使SYN和ACK置1。
6)FIN:用來釋放一個連接。當FIN=1時,表明此報文段的發送方得數據已發送完畢,并要求釋放運輸連接。

UDP與TCP的區別

  • UDP在傳送數據之前不需要先建立連接。遠地主機運輸層在收到UDP報文后,不需要給出任何確認。因此UDP不提供可靠交付,但是效率高。TCP則提供面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束后要釋放連接。TCP要提供可靠的、面向連接的運輸服務,因此不可避免地增加了許多的開銷,如確認、流量控制等。
  • TCP和UDP在發送報文時所采用的方式完全不同。TCP并不關心進程一次把多長的報文發送到TCP的緩存中,而是根據對方給出的窗口值和當前網絡擁塞程度決定一個報文段包含多少字節,而UDP發送報文長度是應用進程給出的。如果應用進程傳送到TCP緩存的數據塊太長,TCP就劃分短一些再傳送。若過短也可以等待積累足夠多的字節后再構成報文段發送出去。
  • UDP程序結構比較簡單。它的首部最少為8字節而TCP最少為20字節。
  • UDP不保證數據的順序結構,而TCP必須保證數據的順序結構。
  • TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的,UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容