1. 程式人生 > >TCP和UDP比較

TCP和UDP比較

雙工 tty 才幹 來看 電話 系統 那不 文件 pin

一、TCP/IP協議

TCP/IP協議,你一定常常聽說吧,當中TCP(Transmission Control Protocol)稱為傳輸控制協議,IP(Internet Protocol)稱為因特網互聯協議。

事實上TCP/IP協議,是一個協議簇,就是一大堆協議的集合。
這一大套協議定義了整個互聯網通信的基礎,比方一次網絡鏈接要經過哪些步驟,一塊傳輸數據過程中應該怎樣解釋,這塊數據該怎樣展示給編程者等等問題。


舉個樣例:就好比小時候玩過家家的遊戲。誰負責當爸。誰負責當媽,誰負責當兒子,都有明白的指派,誰負責買菜,買菜之後的錢交給誰來管理。假設沒花了,怎麽辦,每天應該幾點起床。起床之後應該誰疊被。都會明白指出,每一個人都會默默遵從人物角色和規則。

TCP/IP整個協議集合大概做的就是這個事情,他包括了非常多個不同的角色(相應於協議),並定義好了數據怎樣傳輸,不同角色之間怎樣協商。

理解了TCP/IP是什麽,時時刻刻覺得,它裏面包涵非常多個協議,這些協議就是一整套規則,它定義了整個互聯網怎樣連接,怎樣協商的最基礎規則。

TCP/IP協議又分為了4層,分別為:應用層,傳輸層,IP層,物理層。

二、重點介紹下傳輸層,也就是TCP,UDP兩個協議。

技術分享
TCP和UDP(User Datagram Protocol)這兩個協議,是用來傳輸數據的,由於他們叫傳輸層嘛,那不做這個事情。毫無用處了。


我們想象一個場景,網絡中隨意兩個端要通信。會採用什麽樣的傳輸方式呢?

想象下人類之間的通信吧。

第一種是撥電話。我撥通了你的手機號碼,直到你回答“餵,你好”,我聽到了這個話之後。我們之間才繼續進行交談。


另外一種是發短信。我給你的手機號碼發送一條短信,然後就沒有然後了,有可能你沒收到,有可能你收到了一會兒又給我回復。

第一種相應的就是TCP,另外一種相應的是UDP,TCP是須要對方確認的,也就是傳輸之前須要進行“三次握手”(這裏又是一個專有名詞,就是傳輸的兩端要經過三次確認。才幹開始通信)。UDP是比較粗暴的,無論對方什麽情況,直接發送。不須要確認過程。

非常多博客和書籍中說的。TCP是可靠的鏈接(由於中間有個Control的單詞。帶上了這個單詞。以為著更可靠哦),UDP是不可靠的鏈接就是這個意思。

可靠的鏈接帶來的是效率的下降。比方一次網絡請求非常大一部分時間都是浪費在互相確認的過程當中,資源消耗比較多,可是保證了數據的傳輸是可靠的,而且傳輸數據是有序的。不可靠的鏈接帶來的是效率的提升,但可能服務質量有下降。

要擺脫一種人為的誤區,不要以為UDP不可靠。就沒有什麽應用場景。據說QQ發送數據就是靠UDP發送的呢,盡管是不可靠的鏈接,可是還是用了非常多校驗算法保證了數據質量的穩定,同一時候保證了效率。TCP盡管耗時,可是對於穩定性優先的場景,還是應該有限選用TCP,比方瀏覽器中訪問網頁用的就是TCP。此外在一些長連接系統裏面。比方微信,連接通道應該也是用TCP建立的。由於要維護一條穩定的信息傳輸通道。

詳細協議是怎樣控制的,數據包是怎樣傳輸的,怎麽校驗數據的正確性。還有重傳特性。這些都是協議中重要的控制過程,可是不做詳述了,不但枯燥。而且對於實際的產品並沒有什麽卵用。詳細選用什麽樣的傳輸數據方式,應該依據場景而定。

安全的東西往往不快。反之也是如此,而TCP和UDP他們之間也是這種:

  • TCP(傳輸控制協議)
    是基於連接的。在正式收發數據之前必須要與對方建立連接。這之間須要經過三次“對話”,首先A主機須要和B主機之間建立數據的收發,A須要發送一個請求,詢問B:“我須要連接”,B收到詢問後會給A發送一個回應:“能夠連接”,這時A主機得到B主機的回應後。他們之間就建立了連接,就能夠進行數據的傳輸了。
  • UDP(用戶數報協議)它與TCP相相應的協議,是面向非連接的,不與對方建立連接。直接把數據包發送出去,UDP適用於一次傳輸少量的數據。對可靠性要求不高的應用環境。日常生活中使用的ping命令測試兩臺主機是否通信正常,其原理就是通過UDP實現的。

三、理解TCP和UDP

TCP(Transmission Control Protocol,傳輸控制協議)是基於連接的協議。也就是說,在正式收發數據前,必須和對方建立可靠的連接。

一個TCP連接必須要經過三次“對話”才幹建立起來,當中的過程非常復雜。我們這裏僅僅做簡單、形象的介紹,你僅僅要做到能夠理解這個過程就可以。

三次對話:

我們來看看這三次對話的簡單過程:主機A向主機B發出連接請求數據包:“我想給你發數據,能夠嗎?”。這是第一次對話;主機B向主機A發送允許連接和要求同步(同步就是兩臺主機一個在發送,一個在接收,協調工作)的數據包:“能夠。你什麽時候發?”,這是第二次對話。主機A再發出一個數據包確認主機B的要求同步:“我如今就發,你接著吧!

”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之後。主機A才向主機B正式發送數據。

UDP(User Data Protocol,用戶數據報協議)是與TCP相相應的協議。

它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去!

UDP適用於一次僅僅傳送少量數據、對可靠性要求不高的應用環境。
比方,我們常常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常。事實上“ping”命令的原理就是向對方主機發送UDP數據包。然後對方主機確認收到數據包,假設數據包是否到達的消息及時反饋回來。那麽網絡就是通的。

比如,在默認狀態下,一次“ping”操作發送4個數據包。

大家能夠看到。發送的數據包數量是4包,收到的也是4包(由於對方主機收到後會發回一個確認收到的數據包)。這充分說明了UDP協議是面向非連接的協議。沒有建立連接的過程。正由於UDP協議沒有連接的過程,所以它的通信效果高;但也正由於如此,它的可靠性不如TCP協議高。QQ就使用UDP發消息,因此有時會出現收不到消息的情況。

四、適用場合

TCP:Transfer Control Protocol,傳輸控制協議。


這是一個全雙工的、面向連接的、可靠的而且是精確控制的協議。

主要是用在那些實時性不強、但要求不能出錯的應用。比方說,網頁的瀏覽、文件的下載(不是BT、電驢下載)、郵件的收發等場合,就須要TCP協議進行傳輸(由於不會出錯)。

當然,它在網絡方面的開銷是昂貴的。

UDP:User Datagram Protocol。用戶數據報協議。

這是一個不可靠的傳輸協議。由於它不排序所要發送的數據段、不關心這些數據段到達目的方的順序(所以它才不可靠),所以它在網絡的開銷要比TCP小非常多。因此UDP適合用在那些實時性強、允許出錯的場合。

比方說:即時通信(MSN、QQ),視頻,語音等方面。

TCP和UDP比較