tcp與udp 協(xié)議
TCP(Transmission Control Protocol,傳輸控制協(xié)議)和 UDP(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)
是 TCP/IP 協(xié)議族中最核心的兩種傳輸層協(xié)議,二者在可靠性、連接方式、傳輸效率等維度存在本質(zhì)區(qū)別,
適用于不同的網(wǎng)絡(luò)場(chǎng)景。以下從 7 個(gè)核心維度展開(kāi)對(duì)比,并補(bǔ)充典型應(yīng)用場(chǎng)景,幫助理解二者的差異與適用邊界。
協(xié)議特性對(duì)比
特性 TCP UDP
連接方式 面向連接(三次握手) 無(wú)連接
可靠性 高(確認(rèn)、重傳、校驗(yàn)) 低(可能丟包、亂序)
傳輸速度 較慢(因控制機(jī)制) 較快(無(wú)額外開(kāi)銷(xiāo))
頭部大小 20-60字節(jié) 固定8字節(jié)
流量控制 支持(滑動(dòng)窗口) 不支持
擁塞控制 支持(慢啟動(dòng)、快速重傳等) 不支持
典型應(yīng)用場(chǎng)景分析
?TCP的典型應(yīng)用?
?文件傳輸?:需確保每個(gè)字節(jié)正確到達(dá),如FTP協(xié)議?
數(shù)據(jù)庫(kù)操作?:事務(wù)處理要求嚴(yán)格的數(shù)據(jù)一致性?
UDP的典型應(yīng)用?
實(shí)時(shí)音視頻?:允許少量丟包以降低延遲,如Zoom、騰訊會(huì)議?
DNS查詢?:快速響應(yīng)比可靠性更重要
核心區(qū)別對(duì)比(表格總結(jié))
對(duì)比維度 TCP(傳輸控制協(xié)議) UDP(用戶數(shù)據(jù)報(bào)協(xié)議)
連接方式 面向連接(三次握手建立連接,四次揮手?jǐn)嚅_(kāi)連接) 無(wú)連接(發(fā)送數(shù)據(jù)前無(wú)需建立連接,直接發(fā)送)
可靠性 可靠傳輸(保證數(shù)據(jù)不丟失、不重復(fù)、按序到達(dá)) 不可靠傳輸(不保證數(shù)據(jù)到達(dá),可能丟失 / 亂序)
傳輸效率 效率較低(需處理確認(rèn)、重傳、流量控制等) 效率極高(頭部開(kāi)銷(xiāo)小,無(wú)額外控制邏輯)
數(shù)據(jù)邊界 面向字節(jié)流(無(wú)固定數(shù)據(jù)邊界,需應(yīng)用層定義) 面向數(shù)據(jù)報(bào)(每個(gè)數(shù)據(jù)報(bào)獨(dú)立,有明確邊界)
流量控制與擁塞控制 支持(滑動(dòng)窗口機(jī)制實(shí)現(xiàn)流量控制,擁塞窗口防網(wǎng)絡(luò)擁塞) 不支持(發(fā)送方無(wú)限制發(fā)送,可能導(dǎo)致網(wǎng)絡(luò)擁塞)
頭部開(kāi)銷(xiāo) 較大(固定頭部 20 字節(jié),可選頭部 0-40 字節(jié)) 極小(固定頭部 8 字節(jié),無(wú)可選字段)
適用場(chǎng)景 對(duì)可靠性要求高、數(shù)據(jù)傳輸不緊急的場(chǎng)景 對(duì)實(shí)時(shí)性要求高、可容忍少量數(shù)據(jù)丟失的場(chǎng)景
關(guān)鍵區(qū)別詳解
連接方式:“面向連接” vs “無(wú)連接”
這是 TCP 與 UDP 最根本的區(qū)別,直接決定了二者的可靠性和效率差異。
TCP:面向連接TCP 在傳輸數(shù)據(jù)前,必須通過(guò) “三次握手” 建立雙向連接,確保發(fā)送方和接收方都具備收發(fā)能力;
傳輸結(jié)束后,需通過(guò) “四次揮手” 正常斷開(kāi)連接,釋放資源。
三次握手:確認(rèn)雙方 “發(fā) / 收” 功能正常(A→B:我要發(fā)數(shù)據(jù);
B→A:我收到了,你也可以收;A→B:收到,開(kāi)始傳)。
四次揮手:確保雙方數(shù)據(jù)都已傳輸完成(A→B:我發(fā)完了;
B→A:我知道了,我還在發(fā);B→A:我也發(fā)完了;A→B:知道了,斷開(kāi))。
UDP:無(wú)連接UDP 無(wú)需建立連接,發(fā)送方直接將數(shù)據(jù)封裝成 “數(shù)據(jù)報(bào)”(包含目標(biāo) IP 和端口),通過(guò)網(wǎng)絡(luò)層轉(zhuǎn)發(fā);
接收方收到數(shù)據(jù)報(bào)后直接交給應(yīng)用層,不與發(fā)送方確認(rèn) “是否準(zhǔn)備好”。
類比:TCP 像 “打電話”(先撥號(hào)確認(rèn)對(duì)方接電話,再說(shuō)話),UDP 像 “寄明信片”(寫(xiě)好地址直接寄,不管對(duì)方是否在家)。
可靠性:“保證送達(dá)” vs “盡力交付”
TCP 的核心設(shè)計(jì)目標(biāo)是 “可靠傳輸”,通過(guò)多重機(jī)制避免數(shù)據(jù)丟失、重復(fù)或亂序;
UDP 則僅 “盡力發(fā)送”,不保證結(jié)果。
TCP 的可靠性機(jī)制:
確認(rèn)應(yīng)答(ACK):接收方收到數(shù)據(jù)后,必須向發(fā)送方返回 “確認(rèn)包(ACK)”;若發(fā)送方超時(shí)未收到 ACK,會(huì)重傳數(shù)據(jù)。
序號(hào)與確認(rèn)號(hào):TCP 為每個(gè)字節(jié)分配唯一序號(hào),接收方通過(guò)序號(hào)判斷數(shù)據(jù)是否缺失、是否亂序,缺失則要求重傳,亂序則重新排序。
重傳機(jī)制:超時(shí)重傳(超時(shí)未收 ACK)、快速重傳(收到 3 次重復(fù) ACK,立即重傳)。
校驗(yàn)和:TCP 頭部和數(shù)據(jù)都包含校驗(yàn)和,接收方通過(guò)校驗(yàn)和判斷數(shù)據(jù)是否損壞,損壞則丟棄并要求重傳。
UDP 的無(wú)可靠性:UDP 僅在頭部包含簡(jiǎn)單的校驗(yàn)和(可選,部分場(chǎng)景會(huì)關(guān)閉),若數(shù)據(jù)損壞或丟失,UDP 不重傳、不通知發(fā)送方;
接收方收到亂序的數(shù)據(jù)報(bào),也會(huì)直接按 “收到順序” 交給應(yīng)用層,不排序。
傳輸效率:“安全優(yōu)先” vs “速度優(yōu)先”
TCP 的可靠性機(jī)制會(huì)帶來(lái)額外的網(wǎng)絡(luò)開(kāi)銷(xiāo)和延遲,UDP 則因 “無(wú)額外控制” 實(shí)現(xiàn)高效傳輸。
TCP 的效率損耗:連接建立 / 斷開(kāi)的握手過(guò)程(增加延遲,尤其短連接場(chǎng)景);
確認(rèn)包(ACK)占用帶寬(每發(fā) 1 個(gè)數(shù)據(jù)報(bào),需 1 個(gè) ACK 回復(fù));
流量控制和擁塞控制會(huì)動(dòng)態(tài)降低發(fā)送速率(避免網(wǎng)絡(luò)過(guò)載,但犧牲速度)。
例如:100KB 數(shù)據(jù),TCP 需傳輸 “數(shù)據(jù)報(bào) + ACK”,UDP 僅需傳輸 “數(shù)據(jù)報(bào)”。
UDP 的高效性:頭部?jī)H 8 字節(jié)(TCP 固定 20 字節(jié)),數(shù)據(jù)封裝開(kāi)銷(xiāo)??;
無(wú)握手、無(wú)重傳、無(wú)流量控制,數(shù)據(jù)從應(yīng)用層到網(wǎng)絡(luò)層的延遲極低(通常在毫秒級(jí))。
數(shù)據(jù)邊界:“字節(jié)流” vs “數(shù)據(jù)報(bào)”
TCP 和 UDP 對(duì) “數(shù)據(jù)的劃分方式” 不同,直接影響應(yīng)用層的處理邏輯。
TCP:面向字節(jié)流TCP 將數(shù)據(jù)視為 “連續(xù)的字節(jié)流”,不劃分固定邊界。
例如:應(yīng)用層分 3 次發(fā)送 “10 字節(jié)、20 字節(jié)、30 字節(jié)”,TCP 可能合并成 “60 字節(jié)” 一次發(fā)送,或拆分成 “15 字節(jié)、45 字節(jié)” 發(fā)送;
接收方需通過(guò)應(yīng)用層協(xié)議(如 HTTP 的 Content-Length)判斷 “哪里是一段數(shù)據(jù)的結(jié)束”。
UDP:面向數(shù)據(jù)報(bào)UDP 將應(yīng)用層數(shù)據(jù)封裝成 “獨(dú)立的數(shù)據(jù)報(bào)”,每個(gè)數(shù)據(jù)報(bào)是一個(gè)完整的單元,發(fā)送方發(fā) 1 個(gè)數(shù)據(jù)報(bào),接收方就收 1 個(gè)數(shù)據(jù)報(bào),不會(huì)合并或拆分。
例如:應(yīng)用層發(fā) 3 個(gè) 10 字節(jié)的數(shù)據(jù)報(bào),UDP 會(huì)按 3 個(gè)獨(dú)立單元發(fā)送,接收方也會(huì)按 3 次接收,無(wú)需應(yīng)用層額外定義邊界。
流量控制與擁塞控制:“智能調(diào)節(jié)” vs “無(wú)限制發(fā)送”
TCP 會(huì)根據(jù)接收方能力和網(wǎng)絡(luò)狀況動(dòng)態(tài)調(diào)整發(fā)送速率,避免 “overwhelm” 接收方或網(wǎng)絡(luò);UDP 則無(wú)此控制。
TCP 的流量控制(滑動(dòng)窗口):接收方通過(guò) “窗口大小” 告訴發(fā)送方 “我當(dāng)前能接收的最大字節(jié)數(shù)”,發(fā)送方僅發(fā)送窗口內(nèi)的數(shù)據(jù),避免接收方緩存溢出。
例如:接收方緩存滿了,窗口大小設(shè)為 0,發(fā)送方就暫停發(fā)送,直到接收方釋放緩存后更新窗口。
TCP 的擁塞控制(擁塞窗口):TCP 通過(guò) “擁塞窗口” 感知網(wǎng)絡(luò)擁堵(如超時(shí)重傳),擁堵時(shí)減小發(fā)送速率(慢啟動(dòng)→擁塞避免→快速恢復(fù)),避免網(wǎng)絡(luò)因大量數(shù)據(jù)而癱瘓。
UDP 的無(wú)控制:UDP 發(fā)送方不管接收方是否能處理、網(wǎng)絡(luò)是否擁堵,都會(huì)按應(yīng)用層要求持續(xù)發(fā)送數(shù)據(jù),可能導(dǎo)致接收方緩存溢出(丟包)或網(wǎng)絡(luò)擁塞(影響其他服務(wù))。
典型應(yīng)用場(chǎng)景
選擇 TCP 還是 UDP,核心取決于場(chǎng)景對(duì) “可靠性” 和 “實(shí)時(shí)性” 的優(yōu)先級(jí):
TCP 的適用場(chǎng)景(可靠性優(yōu)先)
文件傳輸:HTTP/HTTPS(網(wǎng)頁(yè)加載)、FTP(文件傳輸)、SFTP(安全文件傳輸)—— 需保證文件不損壞、不丟失。
數(shù)據(jù)交互:MySQL(數(shù)據(jù)庫(kù)連接)、SSH(遠(yuǎn)程登錄)、SMTP(郵件發(fā)送)—— 需保證指令 / 數(shù)據(jù)準(zhǔn)確執(zhí)行,不能丟包。
即時(shí)通訊(文本):微信 / QQ 的文字消息 —— 文本消息丟失會(huì)影響溝通,需可靠傳輸(但語(yǔ)音 / 視頻用 UDP)。
UDP 的適用場(chǎng)景(實(shí)時(shí)性優(yōu)先,可容忍丟包)
實(shí)時(shí)音視頻:直播(抖音 / 快手)、視頻會(huì)議(Zoom)、語(yǔ)音通話(微信電話)——1 幀數(shù)據(jù)丟失不影響整體觀看,若用 TCP 重傳,延遲會(huì)導(dǎo)致 “卡頓”,反而影響體驗(yàn)。
游戲數(shù)據(jù):王者榮耀、英雄聯(lián)盟的玩家操作(如移動(dòng)、攻擊)—— 操作指令需低延遲(延遲 > 100ms 會(huì)影響手感),丟 1 個(gè)指令可通過(guò)后續(xù)指令彌補(bǔ),無(wú)需重傳。
廣播 / 組播:DNS 查詢(域名解析)、DHCP(IP 分配)、網(wǎng)絡(luò)廣播(如打印機(jī)發(fā)現(xiàn))—— 短數(shù)據(jù)、單次請(qǐng)求,無(wú)需連接,UDP 效率更高(DNS 用 UDP,僅超大響應(yīng)時(shí)用 TCP)。
IoT 設(shè)備:傳感器數(shù)據(jù)(如溫度、濕度)—— 數(shù)據(jù)量大、實(shí)時(shí)性要求高,少量丟包不影響統(tǒng)計(jì),UDP 更節(jié)省設(shè)備資源。
總結(jié):核心選擇邏輯
場(chǎng)景需求 優(yōu)先選擇協(xié)議
需保證數(shù)據(jù)不丟失、不重復(fù) TCP
需低延遲、高實(shí)時(shí)性 UDP
數(shù)據(jù)傳輸量大(如文件) TCP
數(shù)據(jù)量小、單次請(qǐng)求(如 DNS) UDP
需避免網(wǎng)絡(luò)擁塞 TCP
廣播 / 組播場(chǎng)景 UDP
簡(jiǎn)言之:“可靠” 用 TCP,“快” 用 UDP。
實(shí)際應(yīng)用中,也存在 “TCP+UDP 混合使用” 的情況(如微信:文本用 TCP,語(yǔ)音 / 視頻用 UDP),以平衡可靠性和實(shí)時(shí)性。

浙公網(wǎng)安備 33010602011771號(hào)