昨天認識了 TCP。
我覺得 TCP 很像一個很有禮貌的人。
在講話前會先問:
「你在嗎?」
「你聽得到嗎?」
「好,那我要開始說囉。」
但今天要看的 UDP 就比較直接。
它的感覺比較像:
「我丟了,你自己接。」
UDP 也是網路傳輸資料的一種方式。
但和 TCP 不一樣,UDP 不會先做三向交握,也不會一直確認對方有沒有收到。
它比較重視速度和簡單。
所以如果 TCP 像是打電話,雙方要先接通才能講話;
那 UDP 比較像廣播,或是直接把球丟出去。
對方有沒有接到?
UDP 本身不太管。
一開始我覺得很奇怪。
如果 UDP 不保證收到,那不是很不安全嗎?
但後來想想,有些情境其實比較需要「快」,而不是「每一個資料都不能掉」。
例如:
如果視訊通話掉了一小段聲音,可能只是卡一下。
但如果為了補那一小段資料,導致整個畫面延遲更久,反而更糟。
所以 UDP 不是比較爛。
它只是適合不同場合。
簡單想可以這樣分:
| 比較 | TCP | UDP |
|---|---|---|
| 連線前 | 會先打招呼 | 不先打招呼 |
| 可靠性 | 較可靠 | 不保證送達 |
| 速度 | 較慢一點 | 較快 |
| 常見用途 | 網頁、檔案傳輸 | 遊戲、語音、直播、DNS |
因為當我們觀察連線時,不能只看 IP 和 Port。
還要注意它使用的是 TCP 還是 UDP。
同一個 Port,在不同協定下可能代表不同服務。
而且有些掃描或攻擊,也會利用 UDP 的特性,因為它不像 TCP 那樣會先建立明確連線。
所以之後看封包或連線紀錄時,如果看到 UDP,不要以為它比較不重要。
它只是比較安靜。
TCP 像先確認再聊天,UDP 像直接把資料丟出去。
一個重視可靠,一個重視速度。
沒有誰一定比較好,要看使用情境。
現在我們已經知道資料怎麼找到地址、怎麼找到 Port,也知道 TCP 和 UDP 傳資料的方式不同。
明天就來看我們每天最常接觸的東西:
HTTP:瀏覽器到底幫我做了什麼?