TCP和UDP的區別及特點


一些基礎知識
IP地址:用來標識網絡中的一個通信實體的地址。通信實體可以是計算機、路由器等。 比如互聯網的每個服務器都要有自己的IP地址,而每個局域網的計算機要通信也要配置IP地址。目前主流使用的IP地址是IPV4,但是隨着網絡規模的不斷擴大,IPV4面臨着枯竭的危險,所以推出了IPV6。
IPV4:32位地址,並以8位為一個單位,分成四部分,以點分十進制表示,如192.168.0.1。因為8位二進制的計數范圍是00000000---11111111,對應十進制的0-255,所以-4.278.4.1是錯誤的IPV4地址。
IPV6:128位(16個字節)寫成8個16位的無符號整數,每個整數用四個十六進制位表示,每個數之間用冒號(:)分開,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
端口:根據上一條我們知道IP地址用來標識一台計算機的,但是一台計算機上可能提供多種網絡應用程序,如何來區分這些不同的程序呢?這就要用到端口。端口是虛擬的概念,並不是說在主機上真的有若干個端口。通過端口,可以在一個主機上運行多個網絡應用程序。 端口的表示是一個16位的二進制整數,對應十進制的0-65535。Oracle、MySQL、Tomcat、QQ、msn、迅雷、電驢、360等網絡程序都有自己的端口。
URL:在www上,每一信息資源都有統一且唯一的地址,該地址就叫URL(Uniform Resource Locator),它是www的統一資源定位符。URL由4部分組成:協議 (http://)、存放資源的主機域名(www.google.com)、端口號(可省略,如:80)和資源文件名(index.html),其后一般還有別的參數,如超鏈接和錨點(?xxx=xxx&xxx#xxx)。如果未指定該端口號,則使用協議默認的端口。例如http協議的默認端口為80。
定義
TCP/IP是互聯網相關的各類協議族的總稱,如TCP,UDP,IP,FTP,HTTP等都屬於TCP/IP族內的協議。(解釋不唯一)

TCP/IP的參考模型主要分為四層:應用層、傳輸層、網絡層和數據鏈路層。(有時還會加上物理層,因為無論何種協議和參考模型都是以二進制數據形式在物理媒體上傳輸數據)

應用層
向用戶提供一組常用的應用程序,比如電子郵件、文件傳輸等,應用層產生並處理應用的數據,將數據發送給傳輸層進行傳輸。

傳輸層
傳輸層負責應用程序間的通信,將來自應用層的信息流格式化封裝,並提供可靠傳輸,實現進程直接的通信。為了保證信息傳輸可靠性,傳輸層協議規定接收端必須發回確認,並且假如信息丟失,則必須重新發送,詳見“三次握手”過程。傳輸層協議主要就是:傳輸控制協議 TCP(Transmission Control Protocol) 和用戶數據報協議 UDP(User Datagram protocol)。

網絡層(又叫IP層)
網絡層將來自傳輸層的格式化信息流打包成IP數據包,交給數據鏈路層進行處理來實現不同主機之間的通信。其功能主要包括三方面。

發送數據時,處理來自傳輸層的發送請求,收到請求后,將要發送的數據裝入IP數據包,然后將IP數據包發往指定的網絡接口。
處理接收自別的主機的輸入數據包。
處理路徑、流控、阻塞等問題。

數據鏈路層
數據鏈路層是負責接收來自網絡層的IP數據包並封裝成幀再通過網絡發送;或者從網絡上接收物理幀,抽出IP數據包,再交給網絡層。

(數據鏈路層主要解決的三個問題:https://blog.csdn.net/SouthWind0/article/details/80038014)

TCP
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。

TCP 為了保證數據包傳輸的可靠行,會給每個包一個序號,同時此序號也保證了發送到接收端主機能夠按序接收。然后接收端主機對成功接收到的數據包發回一個相應的確認字符(ACK,Acknowledgement),如果發送端主機在合理的往返時延(RTT)內未收到確認字符ACK,那么對應的數據包就被認為丟失並將被重傳。

建立TCP連接(三次握手)
當一個基於TCP傳輸層協議的連接被建立時,發送端和接收端總共發送3個包,稱為建立連接時的3次握手。

當發送端發出SYN連接請求(SYN:同步序列編號Sychronize Sequence Numbers)后,等待接收端回復 SYN 和 ACK 信號,收到回復的確認信號后,發送端對對方的 SYN 再執行 ACK 確認。這種建立連接的方法可以防止產生錯誤的連接,TCP 使用的流量控制協議是可變大小的滑動窗口協議。如下圖所示:

 

 

 

第一次握手:客戶端發送一個TCP的SYN標志位置1的包指明客戶打算連接的服務器的端口,以及初始序號Seq=X,保存在包頭的序列號(Sequence Number)字段里。進入 SYN_SEND 狀態。
第二次握手:服務器發回確認包(SYN+ACK)應答,即SYN標志位和ACK標志位均為1。同時將確認序號ACK設置為客戶端的Seq加1,即X+1,此時確認包由SYN(Seq=Y)和ACK((ACK=X+1)組成。進入 SYN_RECV 狀態。
第三次握手:客戶端收到SYN+ACK后,再次回應確認包ACK(SYN標志位為0,ACK標志位為1),並且把服務器發來Seq字段+1(即ACK = Y + 1)放在確認字段中發送給服務端。進入 Established 狀態。
三次握手完成,TCP客戶端和服務器端成功建立連接,可以開始傳輸數據了。

終止TCP連接(四次揮手)
TCP連接的終止需要發送四個包,因此稱為四次揮手(four-way handshake),這是由於TCP的半關閉(half-close)造成的。在一個TCP連接下,客戶端或服務器均可主動發起揮手動作。在socket編程中,任何一端調用close()方法即可產生揮手操作。

 

 

 

某個應用進程首先調用 close(),稱該端執行“主動關閉”(active close)。該主動端的 TCP 於是發送一個 FIN 分節,表示數據發送完畢。其序列號Seq=X(等於前面已經傳過來的數據的最后一個字節的序號加1),此時被動端進入FIN-WAIT-1(終止等待1)狀態。
被動端收到主動端發來的連接終止報文,發回確認報文ACK=X+1,並且帶上自己的序列號Seq=Z,此時,被動端就進入了CLOSE-WAIT(關閉等待)狀態。#注:此時TCP服務器通知應用層的應用進程主動端向被動端的方向釋放了,這時候處於半關閉狀態,即主動端已經沒有數據要發送了,但是被動端若再發送數據,主動端依然接收。這個半關閉狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
主動端收到被動端發回的確認字段后,此時,主動端就進入FIN-WAIT-2(終止等待2)狀態,等待被動端發送連接終止報文(在這之前主動端還需接受被動端發送的最后的數據)。待被動端將最后的數據發送完畢后,就向主動端發送連接終止報文,FIN=1,ACK=X,由於先前在半關閉狀態時服務器很可能又發送了一些數據,因此假定此時的序列號為Seq=Y。此時,被動端就進入了LAST-ACK(最后確認)狀態,等待主動端的確認。
主動端收到被動端的連接終止報文后,必須發出確認,ACK=Y,而自己的序列號是Seq=X(此時主動端進入TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有終止,必須經過2∗MSL(最長報文段壽命)的時間后,才進入CLOSED狀態)。而被動端只要收到了主動端發出的確認,立即進入CLOSED狀態。可以看到,被動端結束TCP連接的時間要比主動端早一些。

 

 

 

 

 


動圖很形象的表示了這一過程(來源:https://blog.csdn.net/qzcsu/article/details/72861891)

UDP
UDP (User Datagram Protocol)協議,即用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯)參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。UDP與TCP協議一樣用於處理數據包,但UDP是一種無連接的協議,不保證可靠性。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之后,是無法得知其是否安全完整到達的。UDP 用來支持那些需要在計算機之間傳輸數據的網絡應用。

TCP和UDP的區別
TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接
TCP提供可靠的服務。UDP盡最大努力交付,即不保證可靠交付。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達,TCP通過校驗和,重傳控制,序號標識,滑動窗口、確認應答等機制實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。
UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高的通信或廣播通信。
每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信。
TCP對系統資源要求較多,UDP對系統資源要求較少。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM