iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Modern Web

前端來點 AWS 技能樹!系列 第 16 篇

Day16 - VPC 與 Subnet:EC2 到底放在哪個網路裡?

  • 分享至 

  • xImage
  •  

終於過半了!◝( ゚∀ ゚ )◟ 還有一半繼續加油ㄅ!
昨天搞懂了 -p 80:3000,知道瀏覽器連到 EC2 的 80 port,再由 Docker 轉送到 container 裡的 3000。
今天就把視角往外拉一點。建立 EC2 時,除了選主機規格,還選了 VPC 和 Subnet。當時先用預設值,把機器開起來;現在就來看看這兩個欄位在做什麼ㄅ!
先記住它們的關係:VPC 是虛擬網路,Subnet 是其中的一段 IP 範圍,而 EC2 的私有 IP,就從所在的 Subnet 裡取得。

VPC 是 AWS 裡的虛擬網路

VPC(Virtual Private Cloud) 是 AWS 裡邏輯隔離的虛擬網路。你可以設定這個網路的 IP 範圍、建立子網路,以及決定如何和其他網路連接。
可以把它想成在規劃蓋一棟公寓大樓時:先決定整棟大樓的空間範圍(像是要有多高),再把裡面的空間劃分成不同區域。
而我們之前選的default VPC,就是 AWS 預先準備好的 VPC。它已經搭配好預設子網路與部分網路設定,所以我們當時能直接選用。

Subnet 是 VPC 裡的一段 IP 範圍

Subnet(子網路) 是在 VPC 的 IP 範圍內劃出的一段範圍。建立 EC2 時,要指定它使用哪個 Subnet。
沿用剛剛的例子,VPC 是整棟大樓,Subnet 是劃分出來的各樓層,EC2 則是樓層裡的房間。
接著假設有下面這個網路。這裡的位址都是示意,先看包含關係,斜線後面的數字等一下再拆:
https://ithelp.ithome.com.tw/upload/images/20260930/20179793yn31RlNhNH.png
兩個 Subnet 都屬於同一個 VPC,EC2 A 和 EC2 B 則各自使用所在 Subnet 範圍內的私有 IP。
Subnet 的位址範圍必須落在 VPC 的範圍內,同一個 VPC 裡的不同 Subnet,範圍也不能互相重疊。
另外,每個 Subnet 都位於單一 Availability Zone(可用區,簡稱 AZ),不能橫跨多個 AZ;而同一個 VPC 裡可以在不同 AZ 建立 Subnet。這也是為什麼選 Subnet 時,旁邊還會看到可用區資訊。

CIDR 用來表示 IP 範圍

剛才出現的 10.0.0.0/16、10.0.1.0/24,使用的是 CIDR(Classless Inter-Domain Routing) 表示法。這種「位址/數字」的寫法,可以用來描述一整段 IP 位址。

斜線後的數字代表什麼

IPv4 位址總共有 32 個位元(bit)。我們平常看到的四組數字,每組各代表 8 個位元。
而 /24 的意思是:前 24 個位元固定作為網路前綴,剩下的 8 個位元可以變動。

以 10.0.1.0/24 為例,前 24 位剛好對應前三組數字,所以 10.0.1 固定,最後一組可以從 0 到 255:
https://ithelp.ithome.com.tw/upload/images/20260930/20179793IdG6t6C99v.png
因此,這個範圍有包含 10.0.1.10 和 10.0.1.20,但不包含 10.0.2.20。
如果改成 /16,固定的就只有前 16 位,也就是前兩組數字。把範例放在一起看:

CIDR 位址範圍 位址總數
10.0.0.0/16 10.0.0.0 ~ 10.0.255.255 65,536
10.0.1.0/24 10.0.1.0 ~ 10.0.1.255 256

位址總數的算法是 2^(32 − 前綴長度)。因此 /24 有 2^8 = 256 個位址,而 /16 有 2^16 = 65,536 個位址。
斜線後的數字越大,固定的位元越多,可以變動的空間越少,位址範圍就越小。 /16 和 /24 都是剛好切在句點的位置;但也有可能前綴長度切在一組數字的中間,要以實際的位元數為準。

子網路遮罩和它有什麼關係

如果曾在電腦的網路設定看過 255.255.255.0,那是 Subnet mask(子網路遮罩) 的一種寫法。
遮罩用二進位的 1 用來標示網路部分、0 則標示主機部分。/24 對應前面 24 個 1、後面 8 個 0,換成平常的十進位寫法,就是 255.255.255.0;/16 則對應 255.255.0.0。
今天主要讀的是 AWS 的設定,先掌握 CIDR 就夠了:之後看到 /24,就知道這一段範圍的前 24 位固定嘍~

有 256 個位址,就能全部分配嗎

一般 AWS IPv4 Subnet 會保留前四個位址與最後一個位址,因此 /24 的 256 個位址中,可指派給資源的是 256 − 5 = 251 個。
以圖中的 10.0.1.0/24 為例,保留的是 10.0.1.0、.1、.2、.3 和 .255;其餘可以依資源需求分配。這是 AWS 的規則,不能直接套用一般網路教材中「扣掉兩個位址」的算法。

EC2 的私有 IP 從 Subnet 取得

我們在 EC2 詳細資訊中的 Private IPv4 address,就是它的私有 IPv4 位址。這個位址是來自所選 Subnet 的 IPv4 範圍;如果沒有自行指定,就由 AWS 選一個可用的位址。
所以,圖中的 EC2 A 放在 10.0.1.0/24,可以取得 10.0.1.10;10.0.2.20 則不在這個 Subnet 的範圍裡。
至於我們貼到瀏覽器的公網 IPv4,是另外指派的對外位址,不是從這段私有位址範圍裡挑出來的。

為什麼 EC2 的私有 IP 可能是 172.31 開頭

前面的 10.0.0.0/16 是方便說明的範例。而之前建立 EC2 時,我們選用的是 default VPC,所以 AWS 預設建立的 IPv4 範圍是 172.31.0.0/16,default subnet 則使用 /20。
例如:
172.31.0.0/20 表示 172.31.0.0 到 172.31.15.255,總共有 2^(32 − 20) = 4,096 個位址。
這次剩下的 12 個位元中,4 位落在第三組、8 位落在最後一組,所以第三組可以從 0 到 15,最後一組則從 0 到 255。這只是其中一個可能的 Subnet 範例,自己的 EC2 使用哪一段,要回 Console 確認。
因此,看到自己的私有 IP 是 172.31...,或者 Subnet 寫 /20,都不代表前面操作錯了。VPC、Subnet、私有 IP 的包含關係仍然一樣。

如果想回 AWS Console 看的話可以在:

  1. 進入 EC2 → Instances,選取自己命名的 Instance。
  2. 在詳細資訊的網路相關欄位,找到 VPC ID、Subnet ID 和 Private IPv4 address。
  3. 到 VPC → Your VPCs,用剛才的 VPC ID 找到對應網路,查看 IPv4 CIDR。
  4. 到 VPC → Subnets,用 Subnet ID 找到對應子網路,查看它的 IPv4 CIDR 和 Availability Zone。介面名稱以操作當天為準。

現在知道 EC2 被放在哪段網路裡了,接著還有一個問題:這個網路裡的封包,要怎麼走到網際網路?
下一篇就來看 Route table(路由表) 和 Internet Gateway,再接著分清楚 public subnet 與 private subnet。

參考資料


上一篇
Day15 - 搞懂 Port:80 和 3000 是怎麼接起來的?
下一篇
Day17 - 路由表與 Internet Gateway:EC2 怎麼連上網際網路?
系列文
前端來點 AWS 技能樹! 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言