UDP 是一種傳輸層通訊協定,是一種非常常見的音訊和視訊流量通訊協定。
閱讀本文後,您將能夠:
相關內容
訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!
複製文章連結
使用者資料包通訊協定 (UDP) 是一種跨網際網路使用的通訊協定,用於對時間敏感的傳輸,例如影片播放或 DNS 查閱。它透過在資料傳輸之前不正式建立連線來加速通訊。這使得資料可以非常快速地傳輸,但也可能導致封包在傳輸過程中丟失——並為 DDoS 攻擊形式的漏洞利用創造機會。
與所有的網路通訊協定一樣,UDP 是一種標準化的方法,用於在網路中的兩台電腦之間傳輸資料。與其他通訊協定相比,UDP 以簡單的方式完成此過程:它將封包(資料傳輸單元)直接傳送到目標電腦,而無需先建立連線,表明所述封包的順序或檢查它們是否按預期到達。(UDP 封包被稱為「資料包」。)
UDP 比另一個常見的傳輸通訊協定 TCP 要更快,但可靠性更差。在 TCP 通訊中,兩台電腦先透過一個稱為「交握」的自動過程建立連線。只有在交握完成後,一台電腦才會向另一台電腦實際傳輸資料封包。
UDP 通訊不會經過這個過程。一台電腦能夠簡單地開始向另一台電腦傳送資料:
此外,TCP 通訊會表明接收資料封包的順序,並確認封包如預期到達。如果封包沒有到達(例如,由於中繼網路擁塞),TCP 會要求重新傳送。UDP 通訊不包含任何此類功能。
這些差異創造了一些優點。由於 UDP 不需要「交握」或檢查資料是否正確到達,因此它能夠比 TCP 更快地傳輸資料。
然而,這種速度會產生弊端。如果 UDP 資料包在傳輸過程中丟失,它不會重新傳送。因此,使用 UDP 的應用程式必須能夠容忍錯誤、丟失和重複。
(從技術上講,這種封包丟失不是 UDP 中的缺陷,而是網際網路構建方式的結果。大多數網路路由器不會按設計執行封包排序和到達確認,因為這樣做需要無法實現的額外記憶體量。TCP 是一種在應用程式需要時填補這一缺漏的方法。)
UDP 通常用於對時間敏感的通訊,在這種通訊中,偶爾丟棄封包比等待更好。語音和視訊流量使用此通訊協定傳送,因為它們都是時間敏感的,並且在設計上能夠處理某種程度的丟失。例如,許多基於網際網路的電話服務使用的 VOIP 透過 UDP 執行。這是因為相比清晰但延遲嚴重的電話對話而言,靜態電話對話更為可取。
這也使得 UDP 成為線上遊戲的理想通訊協定。同樣,由於 DNS 伺服器都需要快速且高效,因此它們也透過 UDP 進行運作。
在大多數使用案例中,像封包丟失這樣的 UDP「風險」並不是一個嚴重的問題。然而,UDP 可被用於惡意用途。由於 UDP 不需要交握,因此攻擊者可以使用 UDP 流量「淹沒」目標伺服器,而無需先取得與該伺服器開始通訊的權限。
典型的 UDP 洪水攻擊會將大量的 UDP 資料包傳送到目標電腦上的隨機連接埠。這會強制目標回應同樣大量的 ICMP 封包,表示這些連接埠無法連線。回應每個詐騙資料包所需的運算資源可能會耗盡目標,導致對合法流量造成阻斷服務。(要瞭解更多資訊,請閱讀我們有關 UDP 洪水攻擊的文章。)
組織可以使用多種方法來防禦 UDP 洪水攻擊。一種是限制 ICMP 封包的回應率,但這種方法也可能篩選掉合法的封包。另一種方法是透過包含許多分散式資料中心的中繼網路接收和回應 UDP 流量,防止單一原始伺服器因詐騙請求而不堪重負。進一步瞭解 Cloudflare 如何使用此策略來協助組織抵禦 DDoS 攻擊。