Sau bài này bạn làm được: đọc CIDR /24, /16 không cần tính tay; giải thích vì sao hai machine cùng “ping” được hoặc cần đi qua router; vẽ sơ đồ đơn giản của một VPC.
Địa chỉ IP là gì
IP (Internet Protocol) là định danh logic của một thiết bị trên mạng. Khác với MAC address (định danh vật lý gắn với card mạng), IP address:
- Có thể thay đổi (DHCP, cấu hình lại).
- Mang thông tin về vị trí mạng (phần network + phần host).
- Được dùng để định tuyến qua nhiều hop.
IPv4 và IPv6
IPv4 viết dạng 192.168.1.10 — 32 bit, khoảng 4,3 tỷ địa chỉ (không gian public đã cạn; nhà mạng thường dùng CGNAT — nhiều khách hàng chung một địa chỉ public, nên bạn hay thấy IP WAN trên router khác IP mà trang “what is my ip” hiển thị). IPv6 viết dạng 2001:db8::1 — 128 bit. Bài này tập trung IPv4 vì phần lớn VPC và lab vẫn mô tả bằng IPv4, nhưng CIDR, gateway, bảng định tuyến vẫn là ngôn ngữ chung.
IPv6 cần nhớ thêm vài điểm khi gặp trong log cloud / dual-stack:
- NDP (Neighbor Discovery) đảm nhiệm vai trò tương tự ARP ở IPv4 (tìm “MAC” của neighbor trên link).
- Subnet người ta hay gặp là prefix /64 trên một segment (SLAAC, nhiều chính sách cloud/host giả định /64 trên interface).
- Địa chỉ link-local
fe80::/10chỉ dùng trên một link (không route qua router như địa chỉ global); khi debugping6/tcpdumpsẽ thấy thường xuyên.
Nhiều cluster Kubernetes và VPC giờ bật dual-stack (IPv4 + IPv6 cùng lúc): mỗi gia đình địa chỉ vẫn có gateway và route riêng, chỉ là bạn có hai bảng tuyến song song cần kiểm tra khi trục trặc.
Dải IPv4 private và đặc biệt (hay gặp khi thiết kế VPC / VPN)
| Dải | Ghi chú |
|---|---|
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | RFC 1918 — private; dùng nội bộ, NAT ra internet. |
100.64.0.0/10 | RFC 6598 — shared (CGNAT, một số dịch vụ overlay); tránh “tình cờ” trùng khi ghép mạng. |
169.254.0.0/16 | Link-local (APIPA): không có DHCP vẫn tự gán; trên cloud còn dùng cho metadata endpoint (ví dụ AWS 169.254.169.254). |
Tránh chồng các dải trên với mạng văn phòng/VPN khi làm hybrid cloud — cùng ý với peering: route phải trỏ một cách không mơ hồ.
Subnet và CIDR
Subnet là nhóm địa chỉ IP liên tục được quản lý chung. CIDR (Classless Inter-Domain Routing) là cách viết subnet gọn:
10.0.1.0/24
│ │
│ └── prefix length: 24 bit đầu là phần "mạng"
└────────── địa chỉ bắt đầu của subnet
| CIDR | Số bit host | Số IP | Dùng cho |
|---|---|---|---|
/31 | 1 | 2 (2 usable) | P2P (RFC 3021) |
/30 | 2 | 4 (2 usable) | P2P (kiểu cũ) |
/28 | 4 | 16 (14 usable) | Subnet nhỏ |
/24 | 8 | 256 (254 usable) | Subnet phổ biến nhất |
/16 | 16 | 65 536 | VPC toàn bộ |
/8 | 24 | ~16 triệu | Range lớn (10.0.0.0/8) |
Trên router và cloud, /31 cho link point-to-point rất phổ biến (chỉ hai đầu, không còn “mất” địa chỉ cho network/broadcast như mô hình /30 cũ).
Quy tắc nhanh: hai địa chỉ IP cùng subnet nếu phần network (prefix) giống nhau. Ví dụ 10.0.1.5 và 10.0.1.200 cùng /24 (10.0.1.0/24) → nói chuyện trực tiếp được.
MAC vs IP — ai dùng cho gì
[App A: 10.0.1.5] ──── Ethernet LAN ──── [App B: 10.0.1.20]
MAC: aa:bb:cc (cùng subnet) MAC: dd:ee:ff
Frame Ethernet gửi đi:
src MAC: aa:bb:cc | dst MAC: dd:ee:ff | src IP: 10.0.1.5 | dst IP: 10.0.1.20
- MAC dùng trong phạm vi một segment L2 (LAN, VLAN, bridge trong Docker).
- IP dùng để định tuyến qua nhiều mạng khác nhau.
Khi A biết IP của B nhưng chưa biết MAC, A gửi ARP broadcast: “10.0.1.20 là ai? Cho tôi biết MAC của bạn.” B trả lời, A cache lại.
Default gateway — cửa ra khỏi subnet
Khi A (10.0.1.5/24) muốn liên lạc với C (10.0.2.30):
A ──▶ [Kiểm tra routing table]
"10.0.2.30 không nằm trong 10.0.1.0/24"
──▶ gửi gói tới Default Gateway (10.0.1.1)
│
▼
[Router / Gateway: 10.0.1.1]
│ tra routing table của router
▼
[Subnet 10.0.2.0/24] ──▶ C (10.0.2.30)
Cấu hình sai gateway → nội bộ subnet chạy ổn, ra ngoài timeout.
Routing table
Mỗi host và router có routing table — danh sách “với prefix X, gửi qua interface/gateway Y”:
# Linux
ip route show
# Output điển hình:
default via 10.0.1.1 dev eth0 # mọi đích không khớp → gateway
10.0.1.0/24 dev eth0 proto kernel # subnet local → gửi trực tiếp
172.17.0.0/16 dev docker0 proto kernel # subnet Docker bridge
Lệnh cần nhớ:
ip -4 addr show # địa chỉ IP của từng interface
ip route show # bảng routing IPv4
ip -6 route show # bảng routing IPv6 (khi bật dual-stack)
ip route get 8.8.8.8 # gói tới 8.8.8.8 sẽ đi đường nào?
Áp dụng trong DevOps / cloud
VPC trên cloud:
VPC: 10.0.0.0/16
├── public subnet: 10.0.1.0/24 (route → Internet Gateway)
├── private subnet: 10.0.2.0/24 (route → NAT Gateway)
└── DB subnet: 10.0.3.0/24 (không có route ra internet)
- Chọn CIDR cho VPC đủ rộng (
/16) để chia nhiều subnet sau. - Tránh chồng lấp CIDR giữa hai VPC muốn peering.
Kubernetes:
- Mỗi Node có Pod CIDR riêng (ví dụ
192.168.1.0/24) do CNI quản lý. - Dải ClusterIP của Service là cấu hình cluster (
serviceClusterIPRange/ cờ kubeadm…), thường thấy10.96.0.0/12nhưng không cố định — tránh hard-code trong tài liệu nội bộ. - CNI hiện đại (Cilium, Calico eBPF, …) có thể dùng datapath khác iptables thuần, nhưng gói vẫn có đích IP/Pod IP — logic “cùng subnet vs qua gateway” vẫn giúp đặt câu hỏi đúng khi debug.
- Cluster dual-stack: Pod/Service có thể có cả IPv4 và IPv6; khi đó cần xem policy và route cho từng gia đình địa chỉ.
Hiểu routing table (và policy route nếu có) giúp trace “vì sao Pod A không tới được Pod B trên node khác”.
Tóm tắt
- CIDR là ngôn ngữ chung của cloud, Kubernetes và network config.
- Hai host cùng subnet nói trực tiếp qua MAC; khác subnet phải qua gateway/router.
- Nắm dải private, link-local, CGNAT giúp thiết kế VPC/VPN và đọc đúng hiện tượng “IP nào là của ai”.
- IPv6: nhớ NDP thay ARP, hay gặp /64 và link-local
fe80::; dual-stack = kiểm tra cả hai họ địa chỉ khi lỗi chỉ xảy ra một phía. ip route(vàip -6 routekhi dùng IPv6) là lệnh đầu tiên cần chạy khi nghi ngờ vấn đề routing trên Linux.
Câu hỏi hay gặp
10.10.5.100/22 và 10.10.7.200/22 có cùng subnet không?
Trả lời: Có. Với /22, khối thường là 10.10.4.0/22 (bao phủ 10.10.4.0–10.10.7.255). Cả hai địa chỉ đều nằm trong cùng một mạng con đó.
Ping được máy cùng LAN nhưng không ping/ra được internet — kiểm tra gì trước?
Trả lời: Nghi default gateway, bảng định tuyến (ip route), route 0.0.0.0/0, và trên cloud NAT/SG/NACL cho traffic đi ra — không phải lỗi “cùng subnet”.
Vì sao hai VPC peering phải có CIDR không chồng?
Trả lời: Nếu hai bên dùng cùng dải địa chỉ, bảng route không thể quyết định gói thuộc VPC nào — định tuyến mơ hồ. Cần đổi CIDR hoặc kiến trúc khác (ví dụ TGW, VPN overlay riêng).
Bài tiếp theo (Giai đoạn I): TCP, UDP và cổng (socket) — sau khi biết IP tới đâu, tầng giao vận quyết định ai nhận và tin cậy thế nào.