iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
自我挑戰組

網路通訊輕鬆聊系列 第 22

淺談傳輸層協定(三):犧牲可靠性換取速度的 UDP

  • 分享至 

  • xImage
  •  

前面兩天從 TCP 在做什麼開始聊起,今天來看看另外一個也很重要的協定 UDP。

UDP 為 User Datagram Protocol 的縮寫,中文翻譯成使用者資料報協定。和 TCP 同屬傳輸層,做的事情其實也是類似的,但 UDP 不保證「可靠性」,那麼你可能會有疑問了,既生瑜何生亮,有了 TCP 為何還要 UDP 呢?

我們先從兩者的差異聊起。

UDP vs. TCP

UDP 和 TCP 兩者都有的,就是 Port 連接埠的概念,我們在上一篇TCP 有多可靠中所提到過「兩個設備間的連線可能不只一個,就會需要編號來分開不同的連線」,就是 UDP 和 TCP 共用的概念。

UDP Connection
*UDP Connection

但除此之外,UDP 就像是閹割版的 TCP,其它功能幾乎都沒有。

你說 UDP 也有 TCP Checksum 一樣的 Checksum 呀?同樣也可以檢查是否有可能的資料損壞吧?

這樣說沒錯,但是大部分使用 UDP 這個協定來傳輸資料的,對於資料的正確性通常不會那麼在乎,有的應用會利用 Checksum 的特性意思意思檢查一下損壞,但也有不少應用乾脆就「忽略」這塊,在 UDP 官方定義中,是可選擇忽略的(但建立在 IPv6 上的 UDP 還是必選題)。

其餘的壅塞、流量控制啦,UDP 就通通都不管了,它就是打算以最直接的方式把資料送過去,至於對方有沒有收到就沒它的事了,真是個任性的協定。

UDP 的主要應用

那麼,這樣犧牲可靠性的 UDP 求的是什麼呢?當然就是即時性了。

大部分建立在 UDP 上的應用都分秒必爭。例如串流影音,每秒 30 個影格的影片,掉了幾格一般人根本看不太出來,若是想每格都呈現出來而改用 TCP 的話,造成的後果可能是影片的 lag,為了等沒收到影格重新傳過來,導致後面的影格無法順暢的播出,絕對不會是觀影者希望的事。更何況是一些直播影片了,隔壁都在歡呼了只有你的螢幕畫面還在轉阿轉。

除了串流影音之外,前面文章常見網路問題:DNS 提到應用層的 DNS,也是基於 UDP 的一種協定,但比較特殊的是現在 DNS 的實做幾乎都同時使用 UDP 和 TCP,剛開始預設用 UDP 快速從網域名稱獲取 IP 位置,但發現不夠穩定時,就切成 TCP 傳輸資料。

小結

TCP 和 UDP 的作用,都是基於 IP 上的兩個 IP 位置之間交換資料,由於 Port 連接埠的概念提出,不同的服務就可以用不同的 Port 來建立連線,如 DNS 用 Port 53、HTTP 用 Port 80 等等,兩個 IP 位置間可以根據 Port 來建立多個連線。

而應用程式採用兩個協定中的哪個,就要看應用的類型了,如果追求可靠性,不希望掉封包的話當然就選擇 TCP;追求即時性的話就犧牲一點可靠性採取 UDP。但凡事也沒有絕對,像是 DNS 一樣,也可以在不同情境下選擇使用 TCP 或 UDP。

傳輸層就淺談到此囉,接著我們聊聊應用層的一些常用協定。

參考資料

  1. Wiki - UDP
  2. StackExchange - When do DNS queries use TCP instead of UDP?

上一篇
淺談傳輸層協定(二):TCP 到底多可靠?
下一篇
理解 HTTP(一):網站內容是怎麼被下載到電腦裡的?
系列文
網路通訊輕鬆聊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言