1. 程式人生 > >TCP和UDP的9個區別是什麼及對應應用層協議

TCP和UDP的9個區別是什麼及對應應用層協議

 TCPUDP是兩個傳輸層協議,廣泛應用於網路中不同主機之間傳輸資料。對任何程式設計師來說,熟悉TCPUDP的工作方式都是至關重要的。這就是為什麼TCPUDP是一個流行的Java程式設計面試問題。我曾經在各種不同的Java面試中見過這個問題,尤其是對伺服器端Java開發人員的面試。由於FIX(金融資訊交換)協議也是一個基於TCP協議,一些投資銀行,對衝基金,和交換解決方案提供商也在尋找有良好的TCPUDP的知識的Java開發人員。為高速電子交易平臺編寫FIX引擎和伺服器端元件需要能夠對資料結構、演算法以及網路等基本知識都理解透徹的的開發人員的

順便說一下,使用TCPUDP並不侷限於一個領域

,它處於網際網路的中心位置。HTTP是基於TCP,而HTTP是整個網際網路的核心部分。另一個Java開發人員應該理解這兩個協議的理由是, java廣泛用於編寫多執行緒、並行以及可伸縮的伺服器程式。Java還提供了豐富的基於TCPUDP套接字程式設計API。在這篇文章中,我們將學習TCPUDP協議之間的關鍵差異。首先,TCP代表傳輸控制協議和UDP代表使用者資料報協議,兩者都廣泛的應用於構建網際網路應用。

TCP與UDP之間的區別

我喜歡比較兩事物的不同點,這不僅使他們更加容易比較,而且會更容易記住他們之間的差異。當我們比較TCP,UDP,我們需要了解TCP和UDP各自的工作方式,瞭解哪種協議提供了可靠保證交付和而哪個又沒有。哪種協議是快速的,他為什麼更加快速,最重要的是,當我們瞭解了這些,在建設我們自己的分散式應用程式時,就知道該選擇TCP還是 UDP。在這篇文章中,我們將看到9點UDP和TCP之間的差異,例如,連線步驟,排序,速度,可靠性,開銷,頭大小,擁塞控制,應用以及基於TCP和UDP協議不同,他們如何傳輸資料。

1. 基於連線vs無連線

他們之間的第一點並且最重要的區別是:TCP是面向連線的協議,而UDP是無連線的協議。這意味著當一個客戶端和一個伺服器通過TCP傳送資料之前,必須先建立連線,他們可以通過TCP傳送資料。建立連線的過程也被稱為TCP握手,他通過控制訊息在客戶端和伺服器之間互換來實現。下面的圖形象描述了TCP握手過程。客戶端,它也是TCP連線的發起者,傳送一個SYN訊息給伺服器,該伺服器端正在監聽某個TCP埠。伺服器接收該訊息併發送一個SYN-ACK訊息,客戶端接受到該訊息之後會再回一個ACK訊息。一旦伺服器收到ACK訊息,TCP連線就建立成功,準備資料傳輸了。另一方面,UDP是無連線的協議,和點對點連線之前不需要傳送訊息。這就是為什麼,UDP更加適合訊息的

多播發布,從單個點向多個點傳輸訊息。


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

2. 可靠性 不同

TCP提供交付保證,這意味著一個使用TCP協議傳送的訊息是保證交付給客戶端的。如果訊息在傳輸過程中丟失,那麼它將重發,這是由TCP協議本身控制的。另一方面,UDP是不可靠的,它不提供任何交付的保證。一個數據報包在運輸途中可能會丟失。這就是為什麼UDP是不適合保證交付的專案。

3.有序性

除了提供交付保證,為TCP也保證了訊息的有序性。該訊息將以從伺服器端發出的同樣的順序傳送到客戶端,儘管這些訊息到網路的另一端時可能是無序的。TCP協議將會為你排好序。UDP不提供任何有序性或序列性的保證。資料包將以任何可能的順序到達。這就是為什麼TCP是適合需要順序交付方式的應用,儘管有基於UDP的協議通過使用序列號和重傳來提供有序和可靠性的應用,如TIBCO Rendezvous,他實際上就是一個基於UDP的應用。

4.資料邊界

TCP不儲存資料的邊界,而UDP保證。在傳輸控制協議,資料以位元組流的形式傳送,並沒有明顯的標誌表明傳輸訊號訊息(段)的邊界。在UDP中,資料包單獨傳送的,只有當他們到達時,才會再次整合。包有明確的界限來哪些包已經收到,這意味著在訊息傳送後,在接收器介面將會有一個讀操作,來生成一個完整的訊息。雖然TCP也將在收集所有位元組之後生成一個完整的訊息,但是這些資訊在傳給傳輸給接受端之前將儲存在TCP緩衝區,以確保更好的使用網路頻寬

5.速度

總而言之,TCP速度比較慢,而UDP速度比較快,因為TCP必須建立連線,以保證訊息的可靠交付和有序性,他需要做比UDP多的多的事。這就是為什麼UDP更適用於對速度比較敏感的應用,例如:線上視訊媒體,電視廣播和多人線上遊戲。

6.重量級vs輕量級

由於上述的開銷,TCP被認為是重量級的協議,而與之相比,UDP協議則是一個輕量級的協議。因為UDP傳輸的資訊中不承擔任何間接創造連線,保證交貨或秩序的的資訊。這也反映在用於承載元資料的頭的大小。

7. 頭大小

TCP具有比UDP更大的頭。一個TCP資料包報頭的大小是20位元組,UDP資料報報頭是8個位元組。TCP報頭中包含序列號,ACK號,資料偏移量,保留,控制位,視窗,緊急指標,可選項,填充項,校驗位,源埠和目的埠。而UDP報頭只包含長度,源埠號,目的埠,和校驗和。下圖是TCP和UDP頭:

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


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

8. 擁塞或流控制

TCP有流量控制。在任何使用者資料可以被髮送之前,TCP需要三資料包來設定一個套接字連線。TCP處理的可靠性和擁塞控制。另一方面,UDP不能進行流量控制。

9. 用法和應用

在網際網路中,TCP和UDP都執行在哪些環境中了?在瞭解了TCP和UDP之間的關鍵差異之後,我們可以很容易地得出結論,哪種情況適合他們。由於TCP提供可靠交付和有序性的保證,它是最適合需要高可靠並且對傳輸時間要求不高的應用。UDP是更適合的應用程式需要快速,高效的傳輸的應用,如遊戲。UDP是無狀態的性質,在伺服器端需要對大量客戶端產生的少量請求進行應答的應用中是非常有用的。在實踐中,TCP被用於金融領域,如FIX協議是一種基於TCP的協議,而UDP是大量使用在遊戲和娛樂場所。

TCPUDP的區別?

TCP提供面向連線的、可靠的資料流傳輸,而UDP提供的是非面向連線的、不可靠的資料流傳輸。

TCP傳輸單位稱為TCP報文段,UDP傳輸單位稱為使用者資料報。

TCP注重資料安全性,UDP資料傳輸快,因為不需要連線等待,少了許多操作,但是其安全性卻一般。

TCP對應的協議和UDP對應的協議

TCP對應的協議:

1 FTP:定義了檔案傳輸協議,使用21埠。

2 Telnet:一種用於遠端登陸的埠,使用23埠,使用者可以以自己的身份遠端連線到計算機上,可提供基於DOS模式下的通訊服務。

3 SMTP:郵件傳送協議,用於傳送郵件。伺服器開放的是25號埠。

4 POP3:它是和SMTP對應,POP3用於接收郵件。POP3協議所用的是110埠。

5HTTP:是從Web伺服器傳輸超文字到本地瀏覽器的傳送協議。

UDP對應的協議:

1 DNS:用於域名解析服務,將域名地址轉換為IP地址。DNS用的是53號埠。

2 SNMP:簡單網路管理協議,使用161號埠,是用來管理網路裝置的。由於網路裝置很多,無連線的服務就體現出其優勢。

3 TFTP(Trival File Tran敏感詞er Protocal),簡單檔案傳輸協議,該協議在熟知埠69上使用UDP服務。

DNS域名系統,它的工作原理是:

DNS客戶機需要在程式中使用名稱時,它會查詢DNS伺服器來解析該名稱。客戶機發送的每條查詢資訊包括三條資訊:包括:指定的DNS域名,指定的查詢型別,DNS域名的指定類別。基於UDP服務,埠53. 該應用一般不直接為使用者使用,而是為其他應用服務,如HTTPSMTP等在其中需要完成主機名到IP地址的轉換。

面向連線和非面向連線的服務的特點是:

面向連線的服務,通訊雙方在進行通訊之前,要先在雙方建立起一個完整的可以彼此溝通的通道,在通訊過程中,整個連線的情況一直可以被實時地監控和管理。

非面向連線的服務,不需要預先建立一個聯絡兩個通訊節點的連線,需要通訊的時候,傳送節點就可以往網路上傳送資訊,讓資訊自主地在網路上去傳,一般在傳輸的過程中不再加以監控。