個人主頁 : 個人主頁
個人專欄 : 《數據結構》 《C語言》《C++》《Linux》《網絡》 《redis學習筆記》
文章目錄
- 前言
- TCP和UDP的區別
- UDP如何實現可靠
- TCP滑動窗口原理
- TCP流量控制
- TCP超時重傳
- 總結
前言
這是個人總結的C++方向的面試題,TCP和UDP方面,如果那些地方有錯誤。歡迎前來糾錯!!!
TCP和UDP的區別
TCP和UDP是傳輸層的兩種主要協議。
- 連接方式:
TCP:是面向連接的協議。在開始傳輸之前,TCP客戶端和服務器之間會進行三次握手。在傳輸結束后,還會執行四次揮手來關閉連接,以確保通信的可靠性(。。。。。)
UDP:是無連接的協議。在數據傳輸之前不需要建立連接,數據報只需要指定目標地址(ip:port)即可發送。 - 可靠性傳輸
TCP:提供可靠的,面向鏈接的字節流服務。通過確認應答,超時重傳,流量控制,連接管理,擁塞控制等機制來保證數據的可靠傳輸。
UDP:是一個不可靠,無連接的數據報協議。UDP只保證數據的發送,但不保證數據會被接收方收到,也不會處理丟失,損壞會重復的數據。 - 數據傳輸格式:
TCP:以字節流(從緩沖區的角度)的方式傳輸數據,沒有明確的報文邊界。需要應用層來處理粘包問題
UDP:傳輸的是獨立的,不可分割的數據報文。UDP數據報通常包含固定大小的數據庫,每個數據報的大小由應用層決定(報文的16為UDP長度,決定了UDP數據報的最大長度)。 - 傳輸效率:
TCP:由于要保證數據的可靠傳輸,TCP需要進行額外的握手,確認。重傳等操作,因此傳輸效率相當較低
UDP:不需要保證可靠性,傳輸效率比較高。(HTTP/3基于QUIC,而QUIC是建立在UDP上的) - 應用場景:
TCP:適合對數據可靠性要求高的場景,如文件傳輸,網頁瀏覽,電子郵件。
UDP:適合用于對延遲敏感,實時性要求高的場景,如視頻直播,語言通話,在線游戲等
UDP如何實現可靠
UDP的可靠性需通過應用層協議來解決不可靠性,核心在于序列號,確認機制,重傳策略,流量控制等。
TCP滑動窗口原理
TCP滑動窗口是通過動態調整發送和接受雙方的窗口大小,實現數據的可靠傳輸和流量控制。具體而言,滑動窗口允許發送方在不等待每個數據包確認的情況下連續發生多個數據包,從而提高傳輸效率。接收方通過維護窗口大小,根據自身處理能力和剩余緩沖區空間大小調整窗口大小,控制發送方的發送速率,避免網絡擁塞。
- 發送窗口結構
已確認:數據已發送且受到ACK確認
已發送未確認:數據已發送但未收到ACK
不發送:允許立即發送的數據范圍
不可發送:超出接收方窗口或擁塞窗口限制
- 接收窗口結構
已接收并確認:數據已提交給引用層
可接收:緩沖區空閑區間,通過WIN字段通告
不可接收:超出緩沖區容量
TCP流量控制
TCP流量控制的核心目標是防止發送方速率超過接收方的處理能力,避免接收方緩沖區溢出導致丟包。其實現依賴于滑動窗口機制,通過動態調整發送窗口大小實現速率匹配。
特別注意的是,當接收方通告窗口大小為0時,發送方啟動零窗口探測(ZWP),周期地發送1字節探測報文。若接收方持續返回零窗口,TCP可能最終斷開鏈接(如三次探測失敗后)
流量控制與擁塞控制的區別
流量控制:解決端到端速率匹配問題,防止接收方過載
擁塞控制:解決網絡資源競爭問題,避免全網性能惡化
但流量控制的窗口大小可能被擁塞窗口大小限制,如當網絡擁塞時,即使接收方有足夠緩沖區,發送速率扔受擁塞控制算法制約
TCP超時重傳
TCP超時重傳:當發送方在發送數據報后,啟動一個定時器(重傳計時器)。如果在指定的超時時間內沒有收到接收方的確認,則認為該數據段可能丟失或損壞,觸發超時重傳機制,重新發送該數據報。
- 重傳策略:TCP采用指數退避算法,每次超時重傳時,重傳間隔時間會增加一倍,直到達到最大值。目的是為了減少頻繁重傳對網絡的影響
- 快速重傳:當發送方連續三次收到重復的ACK時,會立即重傳未確認的數據報,而不需要等待超時定時器到期(RTO超時)
總結
以上就是我總結的C++面試題,TCP和UDP方面(1)