1. 程式人生 > >TCP與UDP的區別總結

TCP與UDP的區別總結

logs left 面向 每次 blog 選擇 進行 效率 開始

TCP與UDP的區別總結

1.TCP和UDP的區別比較

TCP UDP
可靠性 可靠 不可靠
連接性 面向連接 無連接
報文 面向字節流 面向報文(保留報文的邊界)
效率 傳輸率低 傳輸效率高
雙工性 全雙工 一對一、一對多、多對一、多對多
流量控制 有(滑動窗口)
擁塞控制 有(慢開始、擁塞避免、快重傳、快恢復)
首部開銷 20字節 8字節

備註:

【說明1】TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接;

【說明2】TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付;

【說明3】TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的;

  面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。因此,應用程序必須選擇合適大小的報文。若報文太長,則IP層需要分片,降低效率。若太短,會是IP太小。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。這也就是說,應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。

  面向字節流的話,雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序看成是一連串的無結構的字節流。TCP有一個緩沖,當應用程序傳送的數據塊太長,TCP就可以把它劃分短一些再傳送。如果應用程序一次只發送一個字節,TCP也可以等待積累有足夠多的字節後再構成報文段發送出去。

【說明4】 所謂的流量控制就是讓發送方的發送速率不要太快,讓接收方來得及接受。利用滑動窗口機制可以很方便的在TCP連接上實現對發送方的流量控制。TCP的窗口單位是字節,不是報文段,發送方的發送窗口不能超過接收方給出的接收窗口的數值。

【說明5】UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等);

【說明6】TCP的擁塞控制機制

(1)慢開始和擁塞避免
  發送方維持一個擁塞窗口的狀態變量,其大小取決於網絡的擁塞程度,動態地變化,而發送窗口一般取擁塞窗口和對方給出的接收窗口的最小值(為了便於描述,後面的分析中假定對方給出的接收窗口足夠大,這樣將發送窗口等於擁塞窗口就可以了)。
  慢開始算法的核心是從小到大逐漸增大發送窗口,也就是說,從小到大逐漸增大擁塞窗口的數值。通常在剛開始發送報文段時,先把擁塞窗口設置為一個最大報文段MSS的數值,而在每收到對上一輪報文段(,每次加倍後的報文段的個數,可能不止一個報文段)的確認後,就把擁塞窗口的數值加倍。
  為了防止擁塞窗口增長過大引起網絡擁塞,還需要維護一個慢開始門限的狀態變量,當擁塞窗口的值小於慢開始門限時,使用慢開始算法,一旦擁塞窗口的值大於慢開始門限的值,就改用擁塞避免算法。
  擁塞避免算法的思路是讓擁塞窗口緩慢地增大,收到每一輪的確認後,將擁塞窗口的值加1,而不是加倍,這樣擁塞窗口的值按照線性規律緩慢增長。
  無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(沒有按時收到確認),就把慢開始門限設置為出現擁塞時發送窗口值的一半,但最小不能小於2個MSS值,而後把擁塞窗口的值重新設置為1個MSS,執行慢開始算法。
(2)快重傳和快恢復
  快重傳算法首先要求接收方每收到一個失序的報文段後就立即發出重復確認(重復發送對前面有序部分的確認),而不是等待自己發送數據時才進行稍待確認,也不是累積收到的報文發送累積確認,如果發送方連續收到三個重復確認,就應該立即重傳對方未收到的報文段(有收到重復確認,說明後面的報文段都送達了,只有中間丟失的報文段沒送達)。
  快恢復算法與快重傳算法配合使用,其過程有如下兩個要點:
  a) 當發送方連續收到三個重復確認時,就把慢開始門限減半,這是為了預防網絡發生擁塞。註意,接下來不執行慢開始算法。
  b) 由於發送方現在認為網絡很很可能沒有發生特別嚴重的阻塞(如果發生了嚴重阻塞的話,就不會一連有好幾個報文段到達接收方,就不會導致接收方連續發送重復確認),因此與慢開始不同之處是現在不執行慢開始算法(即擁塞窗口的值不設為1個MSSS),而是把擁塞窗口的值設為慢開始門限減半後的值,而後開始執行擁塞避免算法,線性地增大擁塞窗口。

2.TCP和UDP的一些應用

技術分享

——如有不對的地方,非常還應給予指導!

——【感謝】資料來源於http://blog.csdn.net/laliocat/article/details/50902828

——【感謝】資料來源於http://blog.csdn.net/li_ning_/article/details/52117463

TCP與UDP的區別總結