當前位置:名人名言大全網 - 端午節短信 - TCP與UDP的差異對比分析

TCP與UDP的差異對比分析

寫在前面:

公司是智能硬件方向的,所以使用TCP和UDP協議進行通信。過幾天我會整理壹下這兩個協議在Android上的使用情況,但在此之前,我還是想知道這兩個協議有什麽異同,有什麽值得註意的地方。本文通過對比分析TCP和UDP的區別來幫助這些基礎知識點,能夠快速解決相應的問題。

TCP:

說到建立TCP連接,相信大多數人肯定能想到壹個詞,那就是“三次握手”。TCP通過“三次握手”建立連接,然後通過“四次握手”斷開連接。TCP在每壹波中做什麽?繼續往下看:

上圖從客戶端和服務器端的角度清晰地展示了TCP的三次握手和四波。

如您所見,當TCP嘗試建立連接時,三次握手意味著客戶端觸發了兩次,服務器觸發了壹次。

我們可以先明確TCP連接建立和初始化的目標是什麽?1.初始化資源2。告訴對方我的序列號。

三次握手的順序是這樣的:

步驟2和3可以簡化為壹個步驟,也就是說,ACK確認包和SYN序列化包被發送到客戶端。至此,我們簡單解釋了TCP連接的“三次握手”。

UDP:

我們都知道TCP是面向連接的可靠有序的傳輸層協議,而UDP是面向數據報的不可靠無序的傳輸協議,所以UDP根本不會建立任何連接。

就像發短信壹樣,UDP只需要知道對方的ip地址,然後逐個發送數據報。作為發送者,其他人不需要關心。

關於TCP和UDP之間數據傳輸的差異,它們之間的最大差異可以體現為:

TCP:

因為TCP是基於兩端連接的協議,所以理論上發送的數據流大小沒有限制。但是,由於緩沖區的大小限制,如果通過TCP發送壹大塊數據,它可能會被截斷成幾塊,接收者將依次接收它。

UDP:

因為UDP本身發送的是數據報,所以自然有上限。UDP每次發送的數據報大小由哪些因素決定?

首先,我們來看第壹個因素。UDP本身協議的報文長度為2 16-1,UDP包頭占8字節,IP包頭占20字節,所以最終長度為2 16-1-20-8 = 65507字節。

只看第壹個因素有點理想化,因為UDP是壹個不可靠的協議,我們應該盡量避免傳輸過程中的數據包分段。所以有壹個非常重要的概念MTU——也就是最大傳輸單元。

互聯網上MTU的值為576字節,因此互聯網上使用UDP協議,每個數據報的最大字節數為:576-20-8 = 548。

TCP:

再來說說數據的順序。

對於TCP來說,TCP本身有超時重傳、錯誤重傳等壹系列復雜的算法來保證TCP數據是有序的。假設您發送數據1,2,3,只要發送方和接收方保持連接,接收方收到的數據始終是1,2,3。

UDP:

UDP協議更加不受限制。無論服務器端的緩沖池有多大,接收客戶端發送的消息總是壹個接壹個地被接收。此外,由於UDP本身的不可靠性和混亂性,如果客戶端發送1、2和3,服務器可能會以任何順序接收任意數量的三個數據報。

其實大家都知道TCP本身是壹個可靠的協議,而UDP是壹個不可靠的協議。

TCP:

TCP內部的許多算法和機制使它在保持連接的過程中是可靠的。例如:TCP超時重傳、錯誤重傳、TCP流量控制、擁塞控制、慢速預熱算法、擁塞避免算法、快速恢復算法等等。

因此,TCP是壹種內部原理復雜但使用相對簡單的協議。

UDP:

UDP是壹種無連接協議。UDP發送的每個數據報都有自己的IP地址和接收方的IP地址。它不在乎數據報是否錯誤,只要它被發送。因此,讓我們研究壹下什麽會導致UDP數據包丟失:

在文章的最後壹部分,討論TCP和UDP的使用場景。

先說UDP。很多人會認為UDP在性能和速度上優於TCP。因為UDP不需要保持連續連接,也不需要確認發送和接收數據包。但事實上,經過這麽多年的發展,TCP已經有了足夠的算法和優化,在網絡狀況良好的情況下,TCP的整體性能優於UDP。

那麽我們什麽時候必須使用UDP呢?

上面我們已經談到了UDP的使用,在其他情況下,使用TCP是正確的。畢竟有句話說。

寫在後面:

本文主要介紹了TCP和UDP的概念,並從Android的角度總結了TCP和UDP的使用。