傳輸層的TCP和UDP協議

圖片描述

做者:HerryLogit

原文永久連接: https://github.com/AttemptWeb...github

TCP/IP協議, 你必定經常聽到,其中TCP(Transmission Control Protocol)稱爲 傳輸控制協議,IP(Internet Protocol) 稱爲網際協議算法

圖片描述

事實上TCP/IP協議,是一個協議族,是一個協議的集合。瀏覽器

TCP/IP協議,定義了一整套規則。它定義整個互聯網如何鏈接,如何通訊,如何協商的最基礎規則。安全

TCP/IP協議分爲五層,分別是應用層、傳輸層、網絡層、數據鏈路層、物理層。每層都有對應的相關協議,其中TCP和UDP是傳輸層的兩個協議。微信

理解TCP和UDP

TCP/UDP
既然他們是傳輸層的協議,那麼他們的做用固然就是用來負責傳輸數據了。網絡

咱們想象一個場景,網絡中隨意的兩端要通訊,會採起什麼傳輸方式呢?測試

能夠先想象一下人類之間的通訊。spa

第一種是打電。我撥通電話你的電話,直到你回答「你好」,我聽到聲音以後,咱們之間才繼續進行交談。視頻

另外一個是發短信。我給你的手機號發送一條短信,沒法知道你是否收到,而後我就只能等待你的回覆了。

其中第一種方式對應TCP,而第二種對應UDP。TCP是須要對方確認的,也就是傳輸以前須要進行三次握手(傳輸的兩端須要通過三次握手,纔開始通訊)。UDP着比較粗暴,不論對方什麼狀況,直接發送,不須要確認過程。

而上圖中的看到的,TCP是可靠的,UDP是不可靠的,就是這個意思。

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

要擺脫一種人爲的誤區,不要覺得UDP不可靠,就沒有應用場景。聽說QQ發送數據就是靠UDP發送的,儘管是不可靠的鏈接,但是仍是用了很是多的校驗算法保證了數據質量穩定,同也保證了效率。TCP儘管耗時,但是對於穩定性優先的場景,仍是應該有限選用TCP,比方瀏覽器中訪問網頁用的就是TCP。此外在一些長鏈接系統裏面,比方微信,鏈接通道應該也是用TCP創建的,因爲要維持一條穩定的信息傳輸通道。

協議是怎麼控制,數據包是怎麼傳輸,怎麼校驗數據的正確性,還有重傳特性。這些都是協議中重要的控制過程,在這裏不作詳解,由於對於實際的產品並無太大的用。至於如何選定傳輸數據方式,應該依據場景而定。

安全的東西每每不快,反之亦然。而TCP和UCD之間也是這樣:

TCP(傳輸控制協議)

TCP(傳輸控制協議)是基於鏈接的。在正式收發數據以前,必需要與對方創建鏈接。這之間須要通過'三次握手':

第一步. 首先A主機須要和B主機之間創建數據收發,A須要發送一個請求詢問B:'我要創建鏈接';

第二步. B收到消息後,會給A發送一個迴應:'能夠鏈接';

第三步. A收到B的迴應後,A向B再次迴應:'我要開始發送了',他們之間就能夠創建鏈接了;
第一次握手的結論是:A的發送能力、B的接收能力正常。

第二次握手的結論是:B的發送能力、A的接收能力正常。

第三次握手的結論是:A的接收、發送能力,B的接收、發送能力都是正常的。

'3次握手'的做用就是 雙方都能明確本身和對方的收、發能力是正常的.

UDP(用戶數據報協議)

UDP(用戶數據報協議)是面向非鏈接的,不與對方創建鏈接,而直接把數據報=包發送出去。UDP適用於一次傳輸少許的數據,對於可靠性要求不高的應用環境。平常生活中使用的ping命令測試主機是否通訊正常,事實上'ping'命令的原理就是向對方主機發送UDP數據包,而後對方主機確認收到數據包,假設數據包是否到達的消息及時反饋回來了,那麼網絡傳輸就是正常的。

適用場景

TCP:是全雙工、面向鏈接、可靠的,並且精確控制的協議。主要用於實時性不強,但傳輸要求高的應用。比方說:網頁瀏覽、文件下載(不是BT、電腦下載)、郵件的發送等場合,這些場景須要TCP協議進行傳輸。固然,它在網絡方面的開銷是昂貴的。

UDP:這是一個不可靠的傳輸協議。因爲它不排序所要發送的數據段,不負責這些數據段到達目標的順序(說一它纔不可靠)。它在網絡的開銷要比TCP小不少,所以UDP適合用在那些實時性強、容許出錯的場合。好比說:即時通信(MSN、QQ),視頻、語言等方面。

ps: 順便推一下本身的我的公衆號:Yopai,有興趣的能夠關注,每週不按期更新,分享能夠增長世界的快樂

相關文章
相關標籤/搜索