TCP、UDP協議

關於TCP、UDP方面的知識,教科書上都會有相關的定義和解釋都有,對應初學者而言並不容易理解,我認爲主要原因是寫得過於抽象,太深奧,不利於學習和傳播,那麼小魚今天就帶大家一起來聊聊關於TCP、UDP協議通俗化理解。

先附張ISO七層模型圖:

ISO七層模型

什麼是TCP呢?

TCP是一種面向連接的、可靠的,基於字節流的傳輸層通信協議。爲兩臺主機提供高可靠性的數據通信服務。它可以將源主機的數據無差錯地傳輸到目標主機。當有數據要發送時,對應用進程送來的數據進行分片,以適合於在網絡層中傳輸;當接收到網絡層傳來的分組時,它要對收到的分組進行確認,還要對丟失的分組設置超時重發等。爲此TCP需要增加額外的許多開銷,以便在數據傳輸過程中進行一些必要的控制,確保數據的可靠傳輸。因此,TCP傳輸的效率比較低。

TCP的工作過程

TCP是面向連接的協議,TCP協議通過三個報文段完成類似電話呼叫的連接建立過程,這個過程稱爲三次握手,如圖所示:

                                                              

                                                                                         三次握手

第一次握手:建立連接時,客戶端發送SYN包(SEQ=x)到服務器,並進入SYN_SEND狀態,等待服務器確認。

第二次握手:服務器收到SYN包,必須確認客戶的SYN(ACK=x+1),同時自己也發送一個SYN包(SEQ=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態。

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=y+1),此包發送完畢,客戶端和服務器進入Established狀態,完成三次握手。

傳輸數據

一旦通信雙方建立了TCP連接,連接中的任何一方都能向對方發送數據和接收對方發來的數據。TCP協議負責把用戶數據(字節流)按一定的格式和長度組成多個數據報進行發送,並在接收到數據報之後按分解順序重新組裝和恢復用戶數據,利用TCP傳輸數據時,數據是以字節流的形式進行傳輸的。

連接的終止

建立一個連接需要三次握手,而終止一個連接要經過四次握手,這是由TCP的半關閉(half-close)造成的。具體過程如圖所示:

                                                              

                                                                                               四次握手

TCP的主要特點

TCP最主要的特點如下:

(1) 是面向連接的協議。(2) 端到端的通信。每個TCP連接只能有兩個端點,而且只能一對一通信,不能一點對多點直接通信。(3) 高可靠性。通過TCP連接傳送的數據,能保證數據無差錯、不丟失、不重複地準確到達接收方,並且保證各數據到達的順序與其發出的順序相同。(4) 全雙工方式傳輸。(5) 數據以字節流的方式傳輸。(6) 傳輸的數據無消息邊界。

注:全雙工(Full Duplex)是通訊傳輸的一個術語。通信允許數據在兩個方向上同時傳輸,它在能力上相當於兩個單工通信方式的結合。全雙工指可以同時(瞬時)進行信號的雙向傳輸(A→B且B→A)。指A→B的同時B→A,是瞬時同步的,單工就是在只允許甲方向乙方傳送信息,而乙方不能向甲方傳送 。(比喻汽車的單行道。)

同步與異步

同步工作方式是指利用TCP編寫的程序執行到監聽或接收語句時,在未完成工作(偵聽到連接請求或收到對方發來的數據)前不再繼續往下執行,線程處於阻塞狀態,直到該語句完成相應的工作後才繼續執行下一條語句。異步工作方式是指程序執行到監聽或接收語句時,不論工作是否完成,都會繼續往下執行。

什麼是UDP呢?

UDP是一種簡單的、面向數據報的無連接的協議,提供的是不一定可靠的傳輸服務。所謂“無連接”是指在正式通信前不必與對方先建立連接,不管對方狀態如何都直接發送過去。這與發手機短信非常相似,只要知道對方的手機號就可以了,不要考慮對方手機處於什麼狀態。UDP雖然不能保證數據傳輸的可靠性,但數據傳輸的效率較高。

UDP與TCP的區別

(1) UDP可靠性不如TCP

TCP包含了專門的傳遞保證機制,當數據接收方收到發送方傳來的信息時,會自動向發送方發出確認消息;發送方只有在接收到該確認消息之後才繼續傳送其他信息,否則將一直等待直到收到確認信息爲止。與TCP不同,UDP並不提供數據傳送的保證機制。如果在從發送方到接收方的傳遞過程中出現數據報的丟失,協議本身並不能做出任何檢測或提示。因此,通常人們把UDP稱爲不可靠的傳輸協議。

(2) UDP不能保證有序傳輸

UDP不能確保數據的發送和接收順序。對於突發性的數據報,有可能會亂序。

UDP的優勢

(1) UDP速度比TCP快

由於UDP不需要先與對方建立連接,也不需要傳輸確認,因此其數據傳輸速度比TCP快得多。對於強調傳輸性能而不是傳輸完整性的應用(比如網絡音頻播放、視頻點播和網絡會議等),使用UDP比較合適,因爲它的傳輸速度快,使通過網絡播放的視頻音質好、畫面清晰。

(2) UDP有消息邊界

發送方UDP對應用程序交下來的報文,在添加首部後就向下直接交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界。使用UDP不需要考慮消息邊界問題,這樣使得UDP編程相比TCP,在對接收到的數據的處理方面要方便的多。在程序員看來,UDP套接字使用比TCP簡單。UDP的這一特徵也說明了它是一種面向報文的傳輸協議。

(3) UDP可以一對多傳輸

由於傳輸數據不建立連接,也就不需要維護連接狀態(包括收發狀態等),因此一臺服務器可以同時向多個客戶端傳輸相同的消息。利用UDP可以使用廣播或組播的方式同時向子網上的所有客戶進程發送消息,這一點也比TCP方便。其中,速度快是UDP的首要優勢,由於TCP協議中植入了各種安全保障功能,在實際執行的過程中會佔用大量的系統開銷,無疑使速度受到嚴重影響。反觀UDP,由於拋棄了信息可靠傳輸機制,將安全和排序等功能移交給上層應用完成,極大地降低了執行時間,使速度得到了保證。簡而言之,UDP的“理念”就是“不顧一切,只爲更快地發送數據”。

                                            

                                                                              UDP爲什麼更快

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章