iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
佛心分享-IT 人自學之術

從零開始的 Linux 世界系列 第 13 篇

【Day.13】網路 TCP/UDP/IP 封包是什麼?

  • 分享至 

  • xImage
  •  

今天來跟大家介紹一下網路封包究竟是什麼?TCP 和 UDP 的差異在哪?實體層之下的第三層:網路層和第四層:傳輸層到底做了什麼事?讓大家能貫通 Nmap 裡面掃描的方式、運作原理。

✒️ 網路的傳輸

一張圖帶大家來看看究竟網路內部結構是怎麼一回事,假設我們今天要進入 Google:

https://ithelp.ithome.com.tw/upload/images/20250927/201760484RB7mvIVfX.png

我們來想像一下網路運作就好比你寫了一封信寄給別人一樣。

  1. 在你的瀏覽器輸入 www.google.com,會寫入一個 HTTP GET 的內容,也就是「信」的內容。
  2. 你的作業系統(Windows、Linux、MacOS)就會幫你打上 IP 和 port,相當於「信」的收件人和寄件人。
  3. 接著,作業系統透過 網路卡驅動程式(NIC Driver) 和網卡溝通,網卡會幫你打上 MAC Address,但這個目標 MAC Address 會是你家的數據機。就如同「信」的地址,然後正式寄出。
  4. 第一個收到信的會是你家數據機
    (1). 它會檢查信的內容、寄件人、收件人、地址。
    (2). 用自己數據機的 MAC Address 寄出信件。
    (3). NAT 幫你轉換網路。
    (4). PAT 幫你轉換連接阜。
    (5). 將這封信寄出去網路世界中。
  5. 最後由網路服務供應商(ISP)將這些內容送到世界各地。

由於 NAT 和 PAT 的功能是轉換,等於幫你做了一層保護,這也是為什麼我說在家裡測試網路是 OK 的!但它僅僅是「轉換」而已,並不是「加密」,仍然會有被駭客入侵的風險!

而 TCP / UDP 就發生在你的作業系統(傳輸層、網路層),我們來看看裡面是些什麼東西!

🍀 俄羅斯套娃的封包架構

用圖片的方式介紹完眼睛看的到的東西後,我們就要用文字介面來說明一下看不到的東西了!我們已經知道封包有 HTTP Request、IP Address、MAC Address,那 TCP 和 UDP 又是放在哪裡呢?

+---------------------------------------------------+
|               Ethernet Header (MAC)               |
|   (來源 MAC、目的 MAC、Type=0x0800 for IPv4)       |
+---------------------------------------------------+
|                   IP Header                       |
|   (來源 IP、目的 IP、TTL、Protocol=6 TCP/17 UDP)   |
+---------------------------------------------------+
|               TCP Header  or  UDP Header          |
|   (來源 Port、目的 Port、序號/檢查碼...)            |
+---------------------------------------------------+
|                       Data                        |
|   (應用層資料,例如 HTTP、DNS、遊戲資料)             |
+---------------------------------------------------+

就像俄羅斯娃娃一層層包起來一樣,你的信被 TCP/UDP 包住、被 IP 包住、最後被 MAC 包住才被寄出去。所以 TCP/UDP 標頭裡面就包含你的連接阜(Port)資訊。那我們就來看一下 TCP 標頭裡面包含了什麼東西!

⚙️ TCP 封包結構

你可以對照下圖,比對所有的資訊

https://ithelp.ithome.com.tw/upload/images/20250927/20176048xstlkheAsA.png
(圖片來源:https://www.youtube.com/watch?v=D1cei2NYCDw )

如果用我們之後介紹到的工具 Wireshark 來解讀,就會看到這些資訊:

https://ithelp.ithome.com.tw/upload/images/20250927/20176048fbmaKYZ5FK.png
(圖片來源:https://networklessons.com/ip-routing/tcp-header )

  1. Source Port:你的電腦連接阜發送的號碼。
  2. Destination Port:你要發送給目標伺服器連接阜的號碼。
  3. Sequence Number:TCP封包序號的第一個數字,有點像 ID 每個封包只會有一個 ID。
  4. Acknowledgement Number:確認編號,表示「我已經收到你的資料,下個我要的是這個號碼開始的資料」。
  5. Flags:
    (1). URG:優先處理
    (2). ACK:確認
    (3). PSH:加快推送
    (4). RST:重置連線
    (5). SYN:建立連線
    (6). FIN:結束連線
  6. Window Size Value:我現在最多還能收多少資料。
  7. Checksum:透過數學運算檢查封包有沒有被破壞,如果不一致的話,這個封包會被丟棄。
  8. Urgent pointer:如果 URG = 1 才啟用,表示優先處理的資料。
  9. Options:額外的 TCP 功能。

❓ 那 TCP / UDP 差在哪?

簡單來說 TCP 就像是寄掛號信,會有郵差來找你簽收,確保你有收到信,而且順序還可以查找。
而 UDP 就像是寄明信片,直接丟到郵筒,很快。但不確定到底有沒有正確寄到你要的地方,也有可能順序顛倒,不知道哪一封明信片先寄後寄。

特性 TCP (Transmission Control Protocol) UDP (User Datagram Protocol)
連線方式 連線導向,需要三次握手 無連線,直接送資料
可靠性 ✅ 有確認 ACK、重傳機制,確保資料一定送達 ❌ 沒有確認,不保證送達
順序 ✅ 有序號 / 確認號,保證資料順序正確 ❌ 封包可能亂序、掉包
流量控制 ✅ 有 (Window Size) ❌ 沒有
錯誤檢查 ✅ TCP Checksum,會重傳 ✅ UDP Checksum,若錯誤就丟棄,不重傳
速度 較慢(因為握手、確認、重傳) 較快(封包直接丟出去)
Header 大小 大(至少 20 bytes) 小(8 bytes)
應用場景 HTTP/HTTPS、Email、FTP、SSH 影片直播、語音通話、線上遊戲、DNS 查詢

這些 TCP/UDP 的差異,就是 Nmap 為什麼能用 -sS (TCP SYN) 或 -sU (UDP Scan) 來掃描的原因。
而 UDP 的封包結構如下,對比 TCP 要小很多,因為它只有 8 bytes 喔!

https://ithelp.ithome.com.tw/upload/images/20250927/201760483aKnkUY5Ro.png
(圖片來源:https://www.youtube.com/watch?v=COojCgbqJWI )

📄 參考資料

掌芝士 Youtube 頻道
菜園角耕耘田地:乙太網路封包格式
Zacch 的 iThome 文章
Medium 的文章
Cloudflare 封包介紹


上一篇
【Day.12】基礎 Bash Script 撰寫
下一篇
【Day.14】優化自動化掃描!把掃描結果回傳給 Windows
系列文
從零開始的 Linux 世界 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言