- 1 API Gateway là gì? Cổng vào thống nhất cho Microservices
- 2 NAT là gì? Network Address Translation trong mạng máy tính
- 3 GitLab CI/CD là gì? Pipeline tự động hóa build, test và deploy
- 4 Kafka là gì? Nền tảng Event Streaming phân tán cho hệ thống lớn
- 5 Serverless là gì? FaaS, Cold Start và khi nào nên dùng Serverless
- 6 Subnet và CIDR là gì? Chia mạng IP và định tuyến hiện đại
- 7 Kubernetes là gì? Nền tảng điều phối container phổ biến nhất hiện nay
- 8 Proxy là gì? Forward Proxy, Reverse Proxy và SOCKS5
- 9 Nginx là gì? Web server, reverse proxy và load balancer trong một
Subnet và CIDR là hai khái niệm nền tảng mà bất kỳ kỹ sư hạ tầng hay DevOps nào cũng cần nắm vững — từ thiết kế AWS VPC, cấu hình Kubernetes, đến đơn giản là hiểu tại sao mạng văn phòng của bạn lại dùng 192.168.1.x. Bài viết giải thích từ cơ bản đến thực tiễn.
Cần giải pháp dữ liệu cho doanh nghiệp?
AlgoData đồng hành cùng doanh nghiệp về data engineering, phân tích & AI từ 2019.
Địa chỉ IP: Cấu trúc cơ bản

Địa chỉ IPv4 là một số 32-bit, thường viết dưới dạng 4 octet phân tách bởi dấu chấm. Ví dụ: 192.168.1.100 = 11000000.10101000.00000001.01100100 trong hệ nhị phân.
Mỗi địa chỉ IP chia thành hai phần:
- Network part: Xác định mạng (giống như mã vùng điện thoại)
- Host part: Xác định thiết bị trong mạng đó (giống như số thuê bao)
Dải địa chỉ Private IP (dành riêng cho mạng nội bộ, không route trực tiếp trên internet):
| Dải | CIDR | Số địa chỉ | Thường dùng |
|---|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | ~16.7 triệu | Mạng doanh nghiệp lớn, cloud VPC |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | ~1 triệu | Docker bridge network |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | ~65K | Home router, mạng văn phòng nhỏ |
Subnet là gì?
Subnet (subnetwork) là việc chia một mạng IP lớn thành các mạng con nhỏ hơn. Mỗi subnet có:
- Network address: Địa chỉ đầu tiên của subnet (không gán cho host)
- Host addresses: Các địa chỉ có thể gán cho thiết bị
- Broadcast address: Địa chỉ cuối cùng (không gán cho host)
Tại sao cần subnet?
- Bảo mật: Phân tách các zone khác nhau (DMZ, internal, database)
- Hiệu năng: Giảm broadcast domain, giảm traffic không cần thiết
- Quản lý: Dễ theo dõi, filter traffic theo subnet
Subnet mask cho biết bao nhiêu bit là phần network. Ví dụ 255.255.255.0:
255=11111111(8 bit 1 = 8 bit network)- Ba octet đầu đều là 255 → 24 bit network
- Octet cuối là 0 → 8 bit host
CIDR ký hiệu: /prefix

CIDR (Classless Inter-Domain Routing) thay thế hệ thống Class A/B/C cổ điển bằng cách dùng prefix length (số bit network) sau dấu gạch chéo.
Bảng CIDR thông dụng:
| CIDR | Subnet Mask | Số địa chỉ | Host usable | Dùng cho |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,216 | 16,777,214 | Mạng cực lớn |
| /16 | 255.255.0.0 | 65,536 | 65,534 | VPC, mạng campus |
| /24 | 255.255.255.0 | 256 | 254 | Subnet phổ biến nhất |
| /28 | 255.255.255.240 | 16 | 14 | Subnet nhỏ |
| /30 | 255.255.255.252 | 4 | 2 | Point-to-point link |
| /32 | 255.255.255.255 | 1 | 1 | Host route |
Công thức: Host usable = 2^(32 - prefix) - 2
Link nối trực tiếp giữa hai router truyền thống dùng /30 (4 địa chỉ, 2 usable). RFC 3021 cho phép dùng /31 — chỉ 2 địa chỉ, không có network/broadcast — tiết kiệm thêm 50% không gian. Nhiều vendor (Cisco IOS 12.2+, Juniper, AWS Transit Gateway) hỗ trợ /31 cho point-to-point. Với /30 thì 2 địa chỉ bị lãng phí; nhân với hàng trăm WAN link trong mạng lớn, tổng lãng phí là đáng kể.
Tính toán Subnet thực hành
Ví dụ 1: 192.168.1.0/24
Network: 192.168.1.0
Subnet mask: 255.255.255.0
First host: 192.168.1.1
Last host: 192.168.1.254
Broadcast: 192.168.1.255
Hosts: 254
Ví dụ 2: 10.0.0.0/28 (subnet nhỏ cho DMZ)
Network: 10.0.0.0
Subnet mask: 255.255.255.240
First host: 10.0.0.1
Last host: 10.0.0.14
Broadcast: 10.0.0.15
Hosts: 14
Công cụ: ipcalc
1# Cài ipcalc
2apt-get install ipcalc # Ubuntu/Debian
3brew install ipcalc # macOS
4
5# Tính toán subnet
6ipcalc 192.168.1.0/24
7# Output:
8# Address: 192.168.1.0 11000000.10101000.00000001. 00000000
9# Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
10# Network: 192.168.1.0/24 11000000.10101000.00000001. 00000000
11# HostMin: 192.168.1.1 11000000.10101000.00000001. 00000001
12# HostMax: 192.168.1.254 11000000.10101000.00000001. 11111110
13# Broadcast: 192.168.1.255 11000000.10101000.00000001. 11111111
14# Hosts/Net: 254 Class C, Private Internet
15
16# Xem địa chỉ IP của các interface
17ip addr show
18# hoặc
19ip addr show eth0
20
21# Kiểm tra route table
22ip route show
AWS VPC và Subnet Design

AWS VPC (Virtual Private Cloud) dùng CIDR để phân vùng mạng cloud. Kiến trúc chuẩn:
VPC: 10.0.0.0/16 (65,536 địa chỉ)
├── Public Subnet (AZ-a): 10.0.1.0/24 (254 host)
├── Public Subnet (AZ-b): 10.0.2.0/24 (254 host)
├── Private Subnet (AZ-a): 10.0.10.0/24 (254 host)
├── Private Subnet (AZ-b): 10.0.20.0/24 (254 host)
└── Database Subnet (AZ-a): 10.0.100.0/24 (254 host)
AWS dự trữ 5 địa chỉ trong mỗi subnet:
.0— Network address.1— AWS VPC router.2— AWS DNS server.3— Dự phòng tương lai.255— Broadcast (AWS không hỗ trợ)
→ Subnet /24 thực tế chỉ có 251 địa chỉ usable (256 - 5)
Khác với mạng vật lý thông thường (chỉ mất 2 địa chỉ: network + broadcast), AWS VPC mất thêm 3 địa chỉ (.1 router, .2 DNS, .3 dự phòng). Hệ quả: nếu bạn cần đúng 256 EC2 instance, một subnet /24 là không đủ — cần /23 (510 usable sau khi trừ 5). Lỗi này thường gặp khi ước tính capacity cho EKS node group hoặc RDS subnet group.
Terraform:
1resource "aws_vpc" "main" {
2 cidr_block = "10.0.0.0/16"
3}
4
5resource "aws_subnet" "public_a" {
6 vpc_id = aws_vpc.main.id
7 cidr_block = "10.0.1.0/24"
8 availability_zone = "ap-southeast-1a"
9}
10
11resource "aws_subnet" "private_a" {
12 vpc_id = aws_vpc.main.id
13 cidr_block = "10.0.10.0/24"
14 availability_zone = "ap-southeast-1a"
15}
Kubernetes Pod CIDR
Kubernetes dùng CIDR riêng cho pod network, tách biệt với IP của node:
1# Xem pod CIDR của cluster
2kubectl get nodes -o wide
3# Cột INTERNAL-IP là IP của node, cột POD-CIDR là CIDR của pod trên node đó
4
5# Kiểm tra pod CIDR trong kubeadm config
6kubectl get configmap kubeadm-config -n kube-system -o yaml | grep podSubnet
7
8# Xem pod IPs
9kubectl get pods -A -o wide
CNI Plugin mặc định và CIDR:
- Flannel:
10.244.0.0/16— mỗi node nhận /24 (256 pod per node) - Calico:
192.168.0.0/16— flexible, hỗ trợ BGP routing - Cilium:
10.0.0.0/8— dùng eBPF, flexible block size
VLSM: Variable Length Subnet Masking
VLSM cho phép dùng subnet kích thước khác nhau trong cùng một mạng:
Mạng gốc: 10.0.0.0/8
Văn phòng HCM (500 nhân viên): 10.1.0.0/23 → 510 host
Văn phòng HN (200 nhân viên): 10.2.0.0/24 → 254 host
Văn phòng DN (50 nhân viên): 10.3.0.0/26 → 62 host
Router-to-Router WAN link: 10.4.0.0/30 → 2 host
Loopback interface: 10.5.0.1/32 → 1 host
Không dùng VLSM: mỗi subnet phải đủ cho văn phòng lớn nhất → lãng phí hàng trăm địa chỉ IP.
Khi chia VLSM, địa chỉ đầu của mỗi subnet phải là bội số của kích thước subnet đó. Ví dụ: subnet /26 (64 địa chỉ) chỉ được bắt đầu ở .0, .64, .128, .192. Nếu bạn đặt /26 bắt đầu ở .100, subnet đó invalid và router sẽ từ chối. Công cụ như ipcalc hoặc tính tay theo quy tắc "block size = 2^(32 - prefix)" giúp tránh lỗi này khi thiết kế địa chỉ cho nhiều site.

