天天看點

tcp和udp對比 适用場景和優化

區分tcp和udp,各适用于什麼場景?

1) tcp是基于連接配接的,即發送資料之前需要先建立連接配接;udp不需要

2)tcp是可靠的,有重傳\序号\确認機制\滑動視窗等保證順序和正确;udp不能保證

3)tcp是一對一的;udp支援一對一,一對多,多對多

4)tcp比較耗費資源(頭較大,确認機制等導緻),udp則效率更高

5)tcp基于流模式,udp資料報模式 ;

關于流模式于資料報模式的了解:

TCP是面向連接配接的,也就是說,在連接配接持續的過程中,socket中收到的資料都是由同一台主機發出的(劫持什麼的不考慮),是以,知道保證資料是有序的到達就行了,至于每次讀取多少資料自己看着辦。流模式下,發送端的每次發送量和接收端每次接收量沒有必然關系

而UDP是無連接配接的協定,也就是說,隻要知道接收端的IP和端口,且網絡是可達的,任何主機都可以向接收端發送資料。這時候,如果一次能讀取超過一 個封包的資料,則會亂套。比如,主機A向發送了封包P1,主機B發送了封包P2,如果能夠讀取超過一個封包的資料,那麼就會将P1和P2的資料合并在了一 起,這樣的資料是沒有意義的。是以發送端每發送是一個資料報,而接收端每讀也是一個資料報,這樣發送次數一定等于讀次數(不考慮丢失等)

綜上,在對資料的完整性和準确性要求較高的情況下則需要使用tcp,如檔案傳輸,郵件等;而對實時性和效率要求較高時則使用udp,如qq,視屏語音通話等

影響TCP性能的協定因素:

(1)TCP連接配接建立握手

(2)TCP慢啟動擁塞控制;

(3)資料聚集的Nagle算法;

(4)用于捎帶确認的TCP延遲确認機制。

(5)TIME_WAIT時延和端口耗盡。

1、2可通過長連接配接避免,3可使用TCP_NODELAY避免,4可通過調整核心棧參數避免,但調整需謹慎,5通常隻在性能測試環境出現。

原文:https://blog.csdn.net/yusiguyuan/article/details/22921911 

面試題:如何實作udp的可靠性?

答案一:

  1. 最起碼使用一對一的連接配接這個必須要說,因為UDP調用了connect之後是不同的效果 變為了一對一的了,這樣才趨向稱為TCP。
  2. 序列号是為了亂序存在的。
  3. 重傳不僅僅有逾時重傳,還有錯誤重傳,在保證正确的基礎之上才能談效率

答案二

  1. 一對一連接配接,并且增加序列号和結束标志即可,僅僅接收方通過序列号判斷資料完整性,不需要接收方接收确認、發送方的逾時和錯誤重傳;接收方通過結束标志,返給發送方缺少的序列号,然後發送方重新發送即可。

繼續閱讀