一、TCP與UDP區別總結:算法
一、TCP面向鏈接(如打電話要先撥號創建鏈接);UDP是無鏈接的,即發送數據以前不須要創建鏈接
二、TCP提供可靠的服務。也就是說,經過TCP鏈接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
Tcp經過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現可靠傳輸。如丟包時的重發控制,還能夠對次序亂掉的分包進行順序控制。
三、UDP具備較好的實時性,工做效率比TCP高,適用於對高速傳輸和實時性有較高的通訊或廣播通訊。
4.每一條TCP鏈接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通訊
五、TCP對系統資源要求較多,UDP對系統資源要求較少。緩存
二、爲何UDP有時比TCP更有優點?
UDP以其簡單、傳輸快的優點,在愈來愈多場景下取代了TCP,如實時遊戲。
(1)網速的提高給UDP的穩定性提供可靠網絡保障,丟包率很低,若是使用應用層重傳,可以確保傳輸的可靠性。
(2)TCP爲了實現網絡通訊的可靠性,使用了複雜的擁塞控制算法,創建了繁瑣的握手過程,因爲TCP內置的系統協議棧中,極難對其進行改進。
採用TCP,一旦發生丟包,TCP會將後續的包緩存起來,等前面的包重傳並接收到後再繼續發送,延時會愈來愈大,基於UDP對實時性要求較爲嚴格的狀況下,採用自定義重傳機制,可以把丟包產生的延遲降到最低,儘可能減小網絡問題對遊戲性形成影響。網絡
爲何TCP不適用於實時傳輸?tcp
TCP影響實時性不是由於握手消耗時間。握手一開始創建完就沒事了性能
通常來講,單位時間內傳輸的數據流量比較平滑。 TCP依賴滑動窗口進行流量控制,滑動窗口大小是自適應的,影響滑動窗口主要有兩個因素,一是網絡延時,二是傳輸速率,滑動窗口的大小與延時成正比,與傳輸速率也成正比。在給定的網絡環境下,延時能夠認爲是固定的,所以滑動窗口僅與傳輸速率有關,當傳輸實時數據時,由於數據流通量比較固定,因此這時TCP上的滑動窗口會處於一個不大不小的固定值,這個值大小剛好保證當前生產的數據實時傳輸到對方,當出現網絡丟包時,按TCP協議(快速恢復),滑動窗口將減小到原來的一半,所以速率馬上減半,此時發送速率將小於數據生產速率,一些數據將滯留在發送端,而後滑動窗口將不斷增大,直到積累的數據所有發送完畢。上述過程即爲典型的TCP流量抖動過程,對於實時傳輸影響很大,可能造成較大的突發時延,從用戶感觀角度來講,就是有時比較流暢,但有時卡(「抖一下」,而且比較嚴重),所以實時傳輸一般不使用TCP。spa
應用場景:.net
好比普通的會議視頻圖像,固然首選UDP,畢竟丟幾包無所謂。
若是傳輸文件等,不能丟包,用TCP視頻
udp如何實現可靠性傳輸(新浪)blog
UDP它不屬於鏈接型協議,於是具備資源消耗小,處理速度快的優勢,因此一般音頻、視頻和普通數據在傳送時使用UDP較多,由於它們即便偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。
傳輸層沒法保證數據的可靠傳輸,只能經過應用層來實現了。實現的方式能夠參照tcp可靠性傳輸的方式,只是實現不在傳輸層,實現轉移到了應用層。
實現確認機制、重傳機制、窗口確認機制。
目前有以下開源程序利用udp實現了可靠的數據傳輸。分別爲RUDP、RTP、UDT。遊戲
基於UDP的數據傳輸協議(UDP-based Data Transfer Protocol,簡稱UDT)是一種互聯網數據傳輸協議。UDT的主要目的是支持高速廣域網上的海量數據傳輸,而互聯網上的標準數據傳輸協議TCP在高帶寬長距離網絡上性能不好。 顧名思義,UDT建於UDP之上,並引入新的擁塞控制和數據可靠性控制機制。UDT是面向鏈接的雙向的應用層協議。
https://blog.csdn.net/pangyemeng/article/details/50387078?utm_source=copy
https://blog.csdn.net/xiaobangkuaipao/article/details/76793702?utm_source=copy