扒一扒TCP协议与UDP协议
?TCP服務的特點
(1)面向連接:使用TCP協議通訊的雙方必須先建立連接,然后才能開始數據的讀寫。雙方都必須為該連接分配必要的內核資源,以管理連接的狀態和連接上數據的傳輸。TCP鏈接是全雙工的,即雙方的數據讀寫可以通過一個連接完成。完成數據交換之后,雙方必須斷開連接以釋放系統資源。
? ? ? ? 這種連接是一對一的,所以基于廣播和多播(目標是多個主機地址)的應用程序不能使用TCP服務。而無連接的UDP則非常適合。
(2)字節流:發送端執行的寫操作次數和接收端執行的讀操作次數之間沒有任何數量關系。當發送端應用程序連續多次執行多次寫操作時,TCP模塊先將數據放入TCP緩沖區中,當TCP模塊真正開始發送數據時,發送緩沖區中這些被接受到的數據可能被封裝成一個或多個TCP報文段發出。下面會用圖片表示出字節流服務和數據報服務的不同。
(3)可靠傳輸:首先TCP協議采用發送應答機制,即發送端發送的每個TCP報文段都必須得到接受方的應答,才認為這個TCP報文段傳輸成功。其次,TCP協議采用超時重傳機制,發送端在發送出一個TCP報文段之后啟動定時器,如果在定時時間內未收到應答,它將重發該報文段。最后,因為TCP報文段最終是以IP數據報發送的,而IP數據包到達接收端可能會亂序,重復,所以TCP協議還會對接收到的TCP報文段重排、整理,再交給應用層。
?UDP服務的特點
(1)無連接:即通信雙方不會保持一個長久的聯系,因此應用程序每次發送數據都要明確指出接收端的地址。
(2)基于數據報服務:是相對于字節流服務而言,每個UDP數據包都有一個長度,接收端必須以該長度為最小單位將其所有內容一次性讀出,否則數據將被截斷。
(3)不可靠:這意味著UDP協議無法保證數據從發送端正確的傳送到目的端。如果數據在中途丟失,或者目的端通過數據校驗發現數據錯誤而將其丟棄,則UDP協議只是簡單地給應用程序通知發送失敗。
?
字節流與數據報
?
TCP為了實現可靠傳輸,是以浪費部分帶寬,犧牲實時性為代價 。UDP則報頭小,效率高,代價小,可以在應用層自己實現與應答確認、快速重傳等類似的功能來提高自己的可靠性。那么既然TCP是可靠的,為什么不直接用它就好還要提高UDP的可靠性呢?
UDP實現的可靠協議,基本都會對TCP的某一部分進行加強,另外一部分進行削弱。因為:”實時性+可靠性+公平性“ 三者不能同時保證,因此可以犧牲TCP的局部公平性來換取更好的實時性、或者浪費點帶寬來實現更低的延遲。
目前已經有一些實現UDP可靠傳輸的機制,比如UDT(UDP-based Data Transfer Protocol)
UDT:是一個高性能的基于UDP協議的數據傳輸協議,它是為支持高速廣域網上海量數據傳輸設計的,為解決TCP的效率和公平問題,同時提供可靠的數據流和報文傳輸。主要目的是針對“TCP在高帶寬長距離網絡上的傳輸性能差”的問題,盡可能全面支持BDP網絡上的海量數據傳輸。UDT是建立與UDP之上的面向雙向的應用層協議,引入了新的擁塞控制算法和數據可靠性控制機制。它不僅可以支持可靠的數據流傳輸(STREAM 類型TCP)和部分可靠的數據報(DGRAM類似網絡上發廣播消息)傳輸,也可以應用在點對點技術,防火墻穿透,多媒體數據傳輸等領域。
引入UDT的原因
互聯網上的標準數據傳輸協議TCP在高帶寬長距離網絡上性能很差,且無法充分的利用帶寬。其原因主要有一下幾點:
1)現行的tcp擁塞窗口機制在高帶寬長距離的環境下無法很好的工作,擁塞窗口太小,而且增加過于緩慢直接導致吞吐
率不高,無法充分利用帶寬。
此外TCP的AIMD擁塞控制算法過激地降低擁塞窗口的大小,但是不能快速回復到高位充分利用帶寬。
2)目前的tcp擁塞控制算法在BDP網絡下具有較差的RTT公平性,rtt會影響擁塞窗口的增長,越不容易達的鏈接的擁塞?
窗口增加得越慢,其發送速度越慢,因此會導致越遠的鏈接發送速率越慢。
?
轉載于:https://www.cnblogs.com/97-5-1/p/8379245.html
總結
以上是生活随笔為你收集整理的扒一扒TCP协议与UDP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cloudera manager的718
- 下一篇: IP 、127.0.0.1、localh