博客 / 詳情

返回

藍易雲cdn:運輸層中的UDP和TCP協議

在 <span style="color:red;">傳輸層</span> 裏,<span style="color:red;">TCP</span> 和 <span style="color:red;">UDP</span> 的核心差異一句話就能定調: <span style="color:red;">TCP</span> 追求“<span style="color:red;">可靠</span>、<span style="color:red;">有序</span>、<span style="color:red;">可控</span>”,<span style="color:red;">UDP</span> 追求“<span style="color:red;">更快的交付</span>、<span style="color:red;">更低的額外開銷</span>”。🚀


1)TCP 是怎麼“穩”的

<span style="color:red;">TCP</span> 是 <span style="color:red;">面向連接</span> 的協議:通信前先建立連接(典型是 <span style="color:red;">三次握手</span>),通信中做 <span style="color:red;">確認應答</span>、<span style="color:red;">重傳</span>、<span style="color:red;">流量控制</span>、<span style="color:red;">擁塞控制</span>,並保證數據 <span style="color:red;">按序到達</span>。
這意味着:丟包時它會“自己兜底”,但也會帶來額外時延與控制開銷。


2)UDP 是怎麼“快”的

<span style="color:red;">UDP</span> 是 <span style="color:red;">無連接</span> 的:不握手、不保證到達、不保證順序、不自動重傳。它像“把包直接扔出去”,能做到 <span style="color:red;">時延更低</span>、<span style="color:red;">協議頭更輕</span>、<span style="color:red;">更適合實時性</span>。🙂
但代價也很直白:可靠性需要 <span style="color:red;">業務自己補</span>(例如應用層做重傳、糾錯、排序)。


3)對比説明表(選型一眼就對)📊

維度 <span style="color:red;">TCP</span> <span style="color:red;">UDP</span> 你該怎麼選
連接方式 <span style="color:red;">面向連接</span>(先握手) <span style="color:red;">無連接</span> 需要穩定交付:TCP;追求極低時延:UDP
可靠性 <span style="color:red;">可靠</span>(確認、重傳) 不保證到達 金融/訂單/登錄:TCP 更合適
順序 <span style="color:red;">保證有序</span> 可能亂序 對順序敏感(文件、網頁):TCP
擁塞控制 <span style="color:red;">有</span>(會降速保網絡) 無內建(靠應用) 公網複雜鏈路:TCP 更“省心”
時延/抖動 可能更高(重傳/排隊) 通常更低 實時音視頻/遊戲:UDP 更佔優
典型承載 HTTP/1.1、HTTP/2、SSH、MySQL DNS、語音視頻、遊戲、<span style="color:red;">QUIC/HTTP3</span> CDN 裏 HTTP/3=UDP 上做“可靠傳輸”

4)工作流程圖(直觀理解)🧠

flowchart TB
A[應用數據] --> B{選擇協議}
B -->|需要可靠/有序| T[TCP: 握手->發送->ACK確認->丟包重傳->按序交付]
B -->|需要低時延/輕量| U[UDP: 直接發送->可能丟/亂序->應用按需補償]

5)一個常用“硬指標”公式(理解 TCP 吞吐為什麼受 RTT 影響)

在理想情況下,<span style="color:red;">TCP</span> 的可持續吞吐常被“窗口”和“往返時延”約束:

[
\text{吞吐率} \approx \frac{\text{cwnd}}{\text{RTT}}
]

解釋:

  • <span style="color:red;">cwnd</span>(擁塞窗口)越大,單位時間能在路上“飛”的數據越多。
  • <span style="color:red;">RTT</span> 越大,同樣的窗口回確認更慢,吞吐上不去。
    所以跨境、高時延鏈路上,TCP 更容易“跑不滿”,而 UDP(或基於 UDP 的 QUIC)在體驗上常更靈活。

6)在 Linux 上如何快速觀察 TCP/UDP(附命令解釋)🔍

命令 1:查看 TCP/UDP 監聽與進程

ss -tunlp

解釋:

  • ss:查看套接字狀態(比 netstat 更常用)。
  • -t:只看 <span style="color:red;">TCP</span>。
  • -u:只看 <span style="color:red;">UDP</span>。
  • -n:數字化顯示(不做 DNS 解析,更快更準)。
  • -l:只顯示監聽端口(服務端正在“等連接/等數據”)。
  • -p:顯示對應進程(定位是哪個服務在佔端口)。

命令 2:只看當前 UDP 會話/連接條目

ss -uan

解釋:

  • -u:UDP;-a:顯示所有(含非監聽);-n:數字化顯示。
    UDP 沒有“連接握手”,但系統仍會維護相關套接字條目,便於排障。

7)落到 CDN 業務怎麼用(務實結論)

  • 你做網頁加速、下載分發:多數仍是 <span style="color:red;">TCP</span>(HTTP/1.1、HTTP/2)為主,穩定、兼容性強。
  • 你追求更低握手時延、更抗丟包體驗:可以推進 <span style="color:red;">HTTP/3</span>(底層是 <span style="color:red;">QUIC</span>,跑在 <span style="color:red;">UDP</span> 上),用“UDP 的低時延 + 應用層可靠機制”拿到更好的體驗。😄
  • 選型底線:對“必須到達、必須正確”的數據,別賭運氣,選 <span style="color:red;">TCP</span>;對“寧可偶爾缺一幀也要快”的體驗,選 <span style="color:red;">UDP</span>。

如果你告訴我你的場景是“網頁/下載/遊戲/音視頻/接口轉發”哪一種,我可以把上面這套對比進一步落到 <span style="color:red;">CDN 節點配置</span> 與 <span style="color:red;">故障排查指標</span>(丟包、抖動、RTT、重傳率、隊列擁塞)上,直接給你一套可執行的運營口徑。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.