從簡單到難吧
區別就是TCP一般用于安全穩定的需求,UDP一般用于不那么需要完全數據的需求,比如說直播,視頻等。
再然后就是TPC性能慢于UDP。
再然后我們看TCP的原理(三次握手,數據傳輸,四次揮手)
首先是三次握手,然后我在后面會問二次握手可不可以,可能面試會被問到。
三次握手:
(第一次)客戶端向服務端發起請求,我要連接,然后客戶端發送syn包給服務端。
(第二次)服務端發送之前的syn和ack包給客戶端
(第三次)客戶端收到服務端發給我的syn和自己的syn,如果一致了那么給服務端發起ack。
為什么不是兩次握手?
如果是兩次的話,客戶端給服務端的syn1包卡住了,那么客戶端會再發一個syn2包給服務端,服務端給客戶端連接,但是這時候syn1包又好了,再次請求給服務端,這時候服務端會再次連接,最后導致客戶端認為是一個連接,但是服務端認為是兩個。就會出現問題。
數據傳輸:
- 分段與編號:應用程序交給 TCP 的數據可能很大,TCP 會將其分成合適大小的數據段(報文段)。每個數據段都有一個序列號,用于標識數據在字節流中的位置 。比如發送一個大文件,會被分成多個數據段,每個數據段都有序列號,便于接收方按序重組 。
- 確認與重傳:發送方發送數據段后,啟動一個定時器并等待接收方的確認(ACK)。接收方收到數據段后,會檢查數據是否正確,若正確則向發送方發送確認報文,其中確認號表示期望接收的下一個數據段的序列號 。如果發送方在定時器超時前未收到確認,就會重傳該數據段 。
- 流量控制:接收方通過 TCP 報文中的窗口字段告知發送方自己當前的接收緩沖區還能容納多少字節的數據(即窗口大小 )。發送方根據這個窗口大小來調整自己的發送速率,避免發送過快導致接收方緩沖區溢出 。比如接收方緩沖區快滿時,會減小窗口大小,發送方收到通知后降低發送速度 。
- 擁塞控制:發送方會根據網絡的擁塞情況調整自己的發送速率。當網絡出現擁塞時,發送方會降低發送數據的速度,避免網絡擁塞進一步惡化 。常見的擁塞控制算法有慢開始、擁塞避免、快速重傳、快速恢復等 。
這是ai給我發的,很詳細,但是我想要的不是這個。所以我精簡一下。(主要看下面這個即可)
- 分段與編號:TCP的數據會把它分成幾段進行處理,并且進行編號。
- 確認與重傳:如果發送數據以后拿到ack就是確認。但是發送數據以后等待超時拿不到ack就會重發。
- 流量控制:接收方會發送窗口大小給發送方,發送方自動根據大小進行發送調整。
- 擁塞控制:發送方會自動根據網絡進行調整發送。
四次揮手:
(第一次揮手)客戶端發送fin給服務端,然后服務端返回ack,進入到終止等待狀態
(第二次揮手)服務端接收到fin以后進入到終止等待狀態(主要是為了要處理還剩余的數據)。
(第三次揮手)服務端發送fin給客戶端
(第四次揮手)客戶端發送ack給服務端,服務端接收到ack直接關閉,客戶端等待超時才會關閉。
為什么要一直等到超時才會關閉,因為如果ack沒有發送到服務端就會出現問題,如果一直等待可以避免,如果沒有發送到那就重發即可。
至于UDP的工作原理,其實就是直接發送數據給目標地址. hh