UDP vs TCP

2019/10/11 Networking

什麼是UDP和TCP?

UDP及TCP是網際網路協議,在OSI模型中屬於傳輸層(Transport Layer)。

什麼又是OSI模型呢?

OSI模型

OSI模型將電腦網路體系分為以下七層,第1層在底部。而本篇要介紹的就在第4層的傳輸層(Transport Layer)

圖片來源: 網址

*注意: 5的會議層(Session Layer)及6的表現層(Presentation Layer)目前已被棄用,所以現在正確來說是有五層

我們先省略其他層的介紹,只要知道TCP及UDP是屬於傳輸層的就好了。

為什麼我們需要傳輸層?

有想過我們電腦裡的應用程式那麼多,它們為什麼可以共用一個網路連線呢?

這件事就需要我們的傳輸層的幫助!

傳輸層會在我們的電腦網路開啟許多埠(Port),有點類似挖很多的洞,每個洞都有各自的編號,這樣應用程式在傳輸的時候才知道要傳到哪裡。

UDP (User Datagram Protocol)

UDP又稱用戶資料包協定,是一個簡單的資料導向的通訊協定。

UDP為網路層以上和應用層以下提供了一個簡單的介面,只提供資料的不可靠傳遞,它一旦把應用程式發給網路層的資料傳送出去,就不保留資料備份。

UDP的好處

  • 較小的封包大小
    • UDP header: 8 bytes
    • TCP header: 20 bytes
  • 傳送資料之前不需要先建立連線
  • 更能掌握對資料傳送的時間點

UDP的壞處

  • 無法將錯誤的封包回復 - 如果出現錯誤的封包,UDP無法將其回復,只能丟掉。(所以叫做不可靠傳遞)
  • 如果在傳送封包時網路連線出現問題,UDP不會重新傳送
  • 封包到達的順序有機會跟傳送時不同
  • 資料堵塞時沒有解決方案 - 因為資料堵塞時更容易遺失封包,所以資料更容易不見

為了解決UDP的問題,TCP就出現了!

TCP (Transmission Control Protocol)

TCP導入了一個叫做三向交握的機制(Three-way Handshake),運作流程大概如下:

  1. 傳送者會先跟欲傳送的目標機器發送連接請求,等接收到回覆後再回傳表示收到回覆了
  2. 目標機器接收到請求後如果同意連接就會回覆給傳送者
  3. 傳送者接收到回覆後會再回傳表示收到回覆,此時連接就建立完成!

TCP的好處

TCP導入三項交握這機制有一些好處:

  • 支援重新發送 - 傳送者在傳送過後會需要目標機器的回覆代表發送成功,如果沒有得到回覆就代表傳送失敗,過一陣子會再傳一次。
  • 支援in order delivery - 意思就是每個資料會有編碼,所以就算到達目標機器時資料順序已經亂掉了,TCP有辦法將其順序還原。
  • 解決資料堵塞的機制 - 當連線堵塞時,TCP會延遲傳送的時間
  • 支援錯誤偵測 - 要求資料必須要有校驗碼(Checksum)

TCP的壞處

  • 較大的header (比UDP大6成)
  • 資料不是都會馬上被送出 - 因為TCP會在資料堵塞時延遲傳送
  • 較大的傳輸成本 - 因為必須支援重新發送及檢驗封包的功能

訊息(Messages) vs 流(Streams)

  • UDP為訊息導向(Message-oriented) -> 每個資料都被當作是一大包東西

  • TCP為資料流導向(Stream-oriented) -> 資料流的概念 -> 被TCP分為一小段一小段

TCP使用情境

  • 訊息類App - 因為支援順序還原
  • 任何不能允許資料遺失的情況 - 檔案傳輸、遠端存取
  • 多媒體串流 - 當TCP較高的成本不會是個問題時

UDP使用情境

  • 多媒體串流 - 因為較小的成本、不用擔心TCP的延遲傳送
  • DNS查詢等不需要開啟連線及關閉連線的動作

Search

    Table of Contents