TCP、UDP 是什麼?
這兩種都是常見的網路協定,雖然同樣都是傳送資料,但在性質上卻有很大的不同。
-
TCP(傳輸控制協定):
為了保證不會有封包遺失的狀況發生,每個封包會分配到一個唯一的識別碼和序號,也就是下圖的 Sequence number,可以讓接收端識別封包的順序和完整性,和 UDP 相比較為可靠。
那 TCP 是怎麼確認封包是否真的傳送到對方手中的呢?有個 Double check 的機制,也就是「三方交握(Three Way Handshake)」。
SYN(synchronous):同步封包 ACK(ACKnowledgement):確認
步驟:
- Client 發出一個同步封包,向 Server 請求連線,這時還沒有傳送任何實際要傳送的資料。
- 此時 Server 接收到 Client 的請求後,知道 Client 有傳送資料的請求,就回傳一個 OK 的訊息給 Client,說他可以接收訊息了!
- 確認 Server 可以接收資料後,Client 便把傳送的是實際要傳送的資料
常見的應用如下:
- 郵件傳輸
- 文字訊息
-
UDP(使用者資料包協定):
UDP 沒有三方交握的機制,缺乏可靠性和卻也因此能比 TCP 以更快的速度傳送資料,
常見的應用如下:
- 線上遊戲
- 影片串流
封包的架構
以下介紹 TCP 和 UDP 的封包結構,下面兩張圖看起來是一個表,但實際在傳送時是以一長條的 bits 去傳遞的。
-
TCP 封包
-
UDP 封包