基礎網路概念 - TCP 與 UDP 協定


上一篇了解通訊協定以及常見的通訊協定應用之後,這篇來聊聊傳輸層中的兩個協定, TCP 與 UDP。

TCP 協定

TCP (Transmission Control Protocol) 提供一個可靠的連線導向 (Connection Oriented) 的資料流傳輸機制,負責發送端與接收端的協定建立,並且保證資料在網路上傳送的安全性。 TCP 會在接收會議層以上的通訊協定而來的資料之後,將其分割成較小封包,以便於傳輸,在將資料分割成封包時就會先附上序列編號,接著再將該封包傳送至網路層的 IP。接收端可以透過檢查編號將封包重新排序,以確保封包排列的正確性。

TCP 協定的主要功能

  1. 循序編號:TCP 為每個封包加上編號,如此一來,即使封包沒有按照原來的發送順序到達接收端,接收端仍可以藉由此編號進行正確的重組。
  2. 資料確認與重送:接收端透過與發送端的相互溝通,針對所傳來的每一個封包回送已收到的確認封包,類似郵局的雙掛號的回條概念。如果發送端在預定的時間內沒有收到該確認封包,就會認定接收端沒有收到某一部分的資料而傳輸失敗,於是便會利用重送機制,來重新傳送該封包,直至收到接收端的確認封包為止。
  3. 錯誤檢查:TCP 會在每個封包的表頭中加上一個檢查欄位,用來確認是否為欲傳輸的原始封包,在接收端一旦發現檢查值不合,就表示該封包已毀損或出現錯誤,接收端便無法發出確認的封包。
  4. 流量控制:TCP 具有流量控制的功能,以因應由於軟硬體差異,而導致每台電腦處理資料的速度不同的問題,能夠視情況的調整資料傳輸的速度,盡量減少資料流失的狀況。

TCP 傳送機制

TCP 的傳送機制有以下幾個重要的概念:

  1. 三向交握 (Three-way Handshake) 程序:
    • 連線請求:當要建立一個 TCP 連線時,就必須利用封包內的同步旗標(SYN,Synchronize)欄位設為 1,其他欄位為 0,讓另一端的系統知道有人要求連線。
    • 連線確認:接收端接收到此連線封包,並且確認可提供這個服務,便會將要回傳的封包 SYN 旗標欄位設為 1,也會將確認旗標(ACK, Acknowledge)欄位設為 1,讓發送端知道其要求連線的傳輸已被收到且確認。
    • 連線成功:接著發送端會將 SYN 旗標欄位設為 0,ACK 欄位設為 1 傳回,告知「已確認你的確認動作,要開始傳輸資料」。

簡略表示圖

  1. 確認封包機制:TCP 使用可靠的傳輸機制,也就是確認與重送。接收端以確認信息(Acknowledgement)回應發送端,確定資料正確無誤的送達,雙方也會保留傳輸封包的紀錄,以作為下一筆資料的確認依據。
  2. 逾時及重送機制:發送端在送出封包後,會開始一個該封包的計時器 (Timer),其功能是如果在逾時之前收到封包的確認信息,則表示送收正常,取消該封包的計時器,繼續進行下一個封包的傳送。當然,如果沒有按照預估的時間內接到目的端的確認信息封包,則發送端會認為此封包可能在傳輸途中遺失,便會重新發送,並重設計時器。
  3. 滑動窗 (Sliding Windows):封包的確認及重送機制,雖能保證傳輸的正確無誤,但在效能上卻是一項問題。為解決這個問題,便出現了滑動窗這項技術。滑動窗可視為是多重發送及多重確認的技術,它能夠讓發送端在接收到確認信息之前,同時傳輸數個封包,如此可以更充分的利用網路頻寬及加速資料傳輸速度。

UDP 協定

UDP 提供一個非可靠的非連線型的資料流傳輸服務,所謂的非連線型,指的是在不通知傳送目標要開始傳送訊息的情況之下,突然開始進行送訊的一種方式。因此在通訊上的可靠性較低,但若與 TCP 比較,則因為其通訊協定本身的負擔較輕,所以速度會比較快,適合用於即時服務等範疇上。

UDP 不會運用確認機制來保證資料是否正確的被接收,資料的接收也不必按照順序,不需要重新傳送遺失的資料,也不提供回傳機制來控制資料流的速度。因此,若要傳輸像語音、影像等訊息量較大的資料,可以容忍遺失一些封包,此時會較建議使用 UDP 協定。

TCP 與 UDP 比較

TCP UDP
連接特性 可靠的連接導向 非可靠的連接導向
速度
傳輸方式 封包按順序傳輸 封包以串流方式傳輸
握手程序 需要 不需要
優點 可靠的傳輸機制 傳輸量大、迅速
缺點 速度較慢 不可靠,應用程式須自行提供可靠機制
適用服務 如電子郵件、檔案傳輸 如串流媒體、網路遊戲

參考資料

作者

Nick

發表於

2021-04-27

更新於

2021-11-10

許可協議

評論