華為OD面試真題精選
專欄:華為OD面試真題精選
目錄: 2024華為OD面試手撕代碼真題目錄以及八股文真題目錄
介紹下TCP/UDP
TCP(傳輸控制協議)和 UDP(用戶數據報協議)
TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是兩種常見的傳輸層協議,主要用于不同類型的網絡通信。它們各自有不同的特性、應用場景以及優缺點。下面是對這兩種協議的詳細介紹:
1. TCP(傳輸控制協議)
TCP 是一種面向連接的協議,它確保數據包的可靠傳輸。它使用的是連接建立和斷開機制,這意味著在數據傳輸開始之前,發送方和接收方之間需要先建立連接。TCP 協議適用于那些對可靠性要求高的場景。
特性:
- 面向連接:在數據傳輸之前,發送端和接收端需要建立一個連接,使用三次握手(3-way handshake)過程來完成連接的建立。
- 可靠性:TCP 確保數據按順序到達接收方,并且通過校驗和、確認應答、重傳機制來保證數據的完整性。
- 流量控制:TCP 使用滑動窗口協議來控制數據的流量,防止發送過快導致接收方無法處理。
- 擁塞控制:TCP 還通過算法(如慢開始、擁塞避免)來避免網絡擁塞,確保數據傳輸的高效性。
- 順序保證:TCP 確保數據包按發送順序到達接收方。如果數據包丟失或順序錯亂,會進行重傳,確保順序一致。
工作原理:
- 三次握手:建立連接時,發送方和接收方通過三次握手的過程來同步各自的初始序列號,確保連接的可靠性。
- 數據傳輸:數據按字節流的形式傳輸,接收方會對每一個收到的數據包進行確認,發送方根據接收方的確認應答進行重傳,確保數據的完整性。
- 四次揮手:連接結束時,發送方和接收方通過四次揮手過程來關閉連接,釋放資源。
應用場景:
- Web 瀏覽(HTTP/HTTPS)
- 文件傳輸(FTP)
- 電子郵件(SMTP, IMAP, POP3)
- 遠程登錄(SSH, Telnet)
優點:
- 可靠性高,數據傳輸保證無誤。
- 數據按順序到達。
缺點:
- 建立連接需要時間(3次握手),增加延遲。
- 流量和擁塞控制帶來額外的開銷。
- 不適合實時應用,因為延遲較高。
2. UDP(用戶數據報協議)
UDP 是一種無連接的協議,相較于 TCP,它提供較低的開銷和更少的延遲。UDP 不保證數據的可靠性,數據包可能丟失、重復或無序到達。因此,它適用于對傳輸速度要求較高,但對可靠性要求不那么嚴格的應用。
特性:
- 無連接:UDP 不需要在發送數據之前建立連接,因此減少了建立和斷開連接的時間。
- 不可靠性:UDP 不保證數據包的到達和順序,不進行任何重傳或確認。
- 無流量控制和擁塞控制:UDP 不會控制發送的速率,因此沒有流量控制和擁塞控制機制。
- 輕量級:UDP 的頭部開銷非常小,相比 TCP 它傳輸數據更高效。
工作原理:
- 數據傳輸:發送方直接發送數據包給接收方,沒有建立連接,也沒有確認機制。如果數據丟失或順序錯誤,接收方也不會請求重傳。
- 數據報文:UDP 每次發送的數據是一個獨立的“數據報”,即使數據包丟失或錯亂,UDP 也不進行任何補救。
應用場景:
- 流媒體(視頻、音頻傳輸)
- 實時通訊(VoIP、在線游戲)
- DNS 查詢
- SNMP(簡單網絡管理協議)
- DHCP(動態主機配置協議)
優點:
- 速度快,延遲低,適合實時應用。
- 傳輸開銷小,沒有連接建立和維護的過程。
- 無連接,適合廣播、單播等場景。
缺點:
- 不保證數據的可靠性、順序和完整性。
- 不適合需要高可靠性的應用。
3. TCP 和 UDP 的對比
特性 | TCP | UDP |
---|---|---|
連接性 | 面向連接,需要建立連接(3次握手) | 無連接,數據包獨立發送 |
可靠性 | 保證數據按順序到達,丟失數據會重傳 | 不保證數據到達,也不保證順序,不重傳丟失數據 |
流量控制 | 有流量控制和擁塞控制 | 無流量控制 |
傳輸速度 | 相對較慢,因有重傳和確認過程 | 較快,無重傳和確認過程 |
頭部開銷 | 大,通常是20字節以上 | 小,通常是8字節 |
適用場景 | 需要可靠性保證的應用,如 HTTP、FTP、SSH 等 | 對速度要求高、可容忍丟包的應用,如視頻、音頻流等 |
TCP為什么可靠
TCP(Transmission Control Protocol)被設計為一個可靠的傳輸協議,提供可靠的數據傳輸服務。它通過一系列機制來確保數據從發送方到接收方的可靠性,以下是 TCP 保證可靠性的幾個關鍵特性:
1. 數據完整性
- TCP 在發送數據時會計算數據的校驗和(Checksum)。在接收方,TCP 會使用相同的算法重新計算接收到的數據的校驗和。如果校驗和不匹配,數據就被認為是損壞的,接收方會丟棄該數據包并要求重傳。
2. 數據順序保證
-
TCP 使用序列號(Sequence Number)來標識每個數據包。當接收方收到數據包時,它會根據序列號對數據進行排序。即使數據包到達的順序不同,接收方仍能根據序列號按正確的順序重組數據。
- 如果一個數據包丟失或亂序,接收方會按順序等待并請求重傳。
3. 確認應答與重傳機制
-
在 TCP 中,發送方會在發送每個數據包后等待接收方的確認應答(ACK)。接收方收到數據包后,會向發送方發送一個確認信號,告知已經收到的數據包的序列號。
- 如果發送方在一定時間內沒有收到確認應答,它會認為數據包丟失,并會重傳該數據包。這保證了數據的可靠傳輸。
4. 流量控制(Flow Control)
-
TCP 使用滑動窗口機制進行流量控制,以避免發送方發送過快,導致接收方處理不過來。
- 接收方會告知發送方它的緩沖區大小(即窗口大小),發送方會根據這個信息調整發送速度,從而避免緩沖區溢出和數據丟失。
5. 擁塞控制(Congestion Control)
-
為了防止網絡擁塞,TCP 使用擁塞控制算法(如慢開始、擁塞避免、快速重傳、快速恢復等)來動態調整數據的發送速度。
- 這些機制確保了網絡中不會因為數據發送過快而導致網絡擁塞,從而減少了丟包和延遲。
6. 三次握手(Three-Way Handshake)
-
在連接建立時,TCP 使用三次握手來確認雙方是否都準備好開始數據傳輸:
- SYN:客戶端向服務器發送一個連接請求。
- SYN-ACK:服務器響應確認請求。
- ACK:客戶端確認收到服務器的響應。
這個過程確保了雙方的連接建立是可靠的。
7. 四次揮手(Four-Way Handshake)
- 在連接斷開時,TCP 使用四次揮手來確保雙方都知道連接已經關閉,數據傳輸也已完全結束。這確保了沒有數據丟失,并且連接能夠安全地關閉。
8. 重傳機制(Retransmission)
- 當發送方沒有收到接收方的確認應答時,TCP 會定時進行重傳。通過超時重傳(Timeout Retransmission)機制,保證丟失的數據包能夠及時重傳并且最終到達接收方。