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)就會幫你打上 IPport,相當於「信」的收件人和寄件人。
  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 RequestIP AddressMAC Address,那 TCPUDP 又是放在哪裡呢?

+---------------------------------------------------+
|               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 世界15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言