1、tcp協議
TCP (Transmission Control Protocol - 傳輸控制協議)
TCP 的核心目標是為應用層提供一條可靠的、無差錯的、有序的字節流通道。
主要特點:
面向連接:在數據傳輸之前,必須通過“三次握手”建立穩定的連接,傳輸結束后通過“四次揮手”斷開連接。
可靠傳輸:使用確認應答(ACK)、超時重傳、丟包重傳等機制來確保數據一定能到達對端。
流量控制:通過滑動窗口機制,根據接收方的處理能力來動態調整發送數據的速度,防止接收方被淹沒。
擁塞控制:通過復雜的算法(如慢啟動、擁塞避免、快速重傳、快速恢復)來感知網絡狀況,防止過多的數據注入網絡導致網絡癱瘓。
有序傳輸:為每個數據包編號(序列號),接收方會按照編號重新組裝,保證數據順序的正確性。
基于字節流:TCP 不保留消息邊界。發送方連續寫入多次數據,接收方可能一次全部讀出,或者分多次讀出。應用程序需要自己處理消息邊界問題(例如,通過規定消息長度或使用特殊分隔符)。
優點: 數據可靠,無差錯,不丟失,不重復,且按序到達。
缺點: 機制復雜,頭部開銷大(至少20字節),延遲高,傳輸效率相對較低。
2、udp協議
UDP 的核心目標是提供一個簡單、高效的傳輸服務,它只負責發送數據,不提供任何可靠性保證。
主要特點:
無連接:發送數據前不需要建立連接,直接發送。
不可靠傳輸:不提供確認、重傳、序列號等機制。發送數據后不知道對方是否收到。
無流量和擁塞控制:不管網絡是否擁堵,都會以恒定的速率發送數據。這既是缺點(容易加劇網絡擁堵)也是優點(延遲穩定)。
面向數據報:UDP 保留消息邊界。發送方調用一次發送函數發送一個數據包,接收方調用一次接收函數就會收到整個數據包。
頭部開銷小:只有8字節的固定頭部,非常精簡。
優點: 速度快、延遲低、開銷小、實時性好。
缺點: 不保證數據一定到達,不保證順序,不保證不重復。
典型應用場景: 對實時性要求高于可靠性的應用,或者可以自己實現簡單可靠性機制的應用。
語音和視頻通話(VoIP, Zoom, Teams):丟失少量數據包只會導致短暫卡頓或雜音,但如果用TCP重傳,延遲會高到無法正常對話。
在線直播和流媒體:同理,追求實時性。
實時在線游戲:玩家的每一個操作都需要極低的延遲,偶爾丟包比高延遲更能接受。
DNS查詢:查詢請求本身很小,且需要快速響應,如果超時未收到回復,客戶端會直接重發請求。
DHCP:網絡分配IP地址的協議。
選擇 TCP:當你需要可靠性和數據正確性時。你希望所有數據都能完整、無誤、按順序地到達目的地。例如:傳輸一個文件、加載一個網頁、發送一封郵件。99%的通用應用都使用TCP。
選擇 UDP:當你需要速度和低延遲,并能容忍少量數據丟失時。例如:視頻通話時的一幀畫面丟失,遠比等待它重傳導致整個對話卡住要好。或者,你可以在UDP的基礎上,在應用層自己實現一套簡單的確認和重傳機制來滿足特定需求,從而獲得比TCP更好的性能。