1. 程式人生 > >TCP/UDP區別以及UDP如何實現可靠傳輸

TCP/UDP區別以及UDP如何實現可靠傳輸

TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通訊傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通訊傳輸。

 

UDP(User Datagram Protocol)

        UDP不提供複雜的控制機制,利用IP提供面向無連線的通訊服務。並且它是將應用程式發來的資料在收到的那一刻,立刻按照原樣傳送到網路上的一種機制。

        即使是出現網路擁堵的情況下,UDP也無法進行流量控制等避免網路擁塞的行為。此外,傳輸途中如果出現了丟包,UDO也不負責重發。甚至當出現包的到達順序亂掉時也沒有糾正的功能。如果需要這些細節控制,那麼不得不交給由採用UDO的應用程式去處理。換句話說,UDP將部分控制轉移到應用程式去處理,自己卻只提供作為傳輸層協議的最基本功能。UDP有點類似於使用者說什麼聽什麼的機制,但是需要使用者充分考慮好上層協議型別並製作相應的應用程式。

 

TCP(Transmission Control Protocol)

        TCP充分實現愛呢了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在UDP中都沒有。此外,TCP作為一種面向有連線的協議,只有在確認通訊對端存在時才會傳送資料,從而可以控制通訊流量的浪費。

        TCP通過檢驗和、序列號、確認應答、重發控制、連線管理以及視窗控制等機制實現可靠性傳輸。此處不一一敘述。

 

TCP與UDP如何加以區分使用?

        TCP用於在傳輸層有必要實現可靠性傳輸的情況。由於它是面向有連線並具備順序控制、重發控制等機制的。所以它可以為應用提供可靠傳輸。

        另一方面,UDP主要用於那些對高速傳輸和實時性有較高要求的通訊或廣播通訊。舉一個IP電話進行通話的例子。如果使用TCP,資料在傳送途中如果丟失會被重發,但是這樣無法流暢地傳輸通話人的聲音,會導致無法進行正常交流。而採用UDP,它不會進行重發處理。從而也就不會有聲音大幅度延遲到達的問題。即使有部分資料丟失,也只是影響某一小部分的通話。此外,在多播與廣播通訊中也使用UDP而不是UDP。RIP、DHCP等基於廣播的協議也要依賴於UDP。

 

TCP與UDP區別總結:

1、TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線

2、TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的
UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等)
4、每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊
5、TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組

6、TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道

 

UDP如何實現可靠傳輸

由於在傳輸層UDP已經是不可靠的連線,那就要在應用層自己實現一些保障可靠傳輸的機制

簡單來講,要使用UDP來構建可靠的面向連線的資料傳輸,就要實現類似於TCP協議的

超時重傳(定時器)

有序接受 (新增包序號)

應答確認 (Seq/Ack應答機制)

滑動視窗流量控制等機制 (滑動視窗協議)

等於說要在傳輸層的上一層(或者直接在應用層)實現TCP協議的可靠資料傳輸機制,比如使用UDP資料包+序列號,UDP資料包+時間戳等方法。

目前已經有一些實現UDP可靠傳輸的機制,比如

 

UDT(UDP-based Data Transfer Protocol)

基於UDP的資料傳輸協議(UDP-based Data Transfer Protocol,簡稱UDT)是一種網際網路資料傳輸協議。UDT的主要目的是支援高速廣域網上的海量資料傳輸,而網際網路上的標準資料傳輸協議TCP在高頻寬長距離網路上效能很差。 顧名思義,UDT建於UDP之上,並引入新的擁塞控制和資料可靠性控制機制。UDT是面向連線的雙向的應用層協議。它同時支援可靠的資料流傳輸和部分可靠的資料報傳輸。 由於UDT完全在UDP上實現,它也可以應用在除了高速資料傳輸之外的其它應用領域,例如點到點技術(P2P),防火牆穿透,多媒體資料傳輸等等。

--------------------- 本文來自 cdjccio 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/qq_34624951/article/details/82669464?utm_source=copy