IP Addressing & Subnetting
IPv4 — Địa chỉ IP phiên bản 4
IPv4 là 32-bit số nhị phân, thường viết dạng dotted-decimal (4 octet, mỗi octet 0–255):
192 . 168 . 1 . 100
11000000.10101000.00000001.01100100
└─────────────────────────────────┘
32 bits
Các lớp địa chỉ (Classful — lịch sử)
| Class | Range | Default Mask | Dùng cho |
|---|---|---|---|
| A | 1.0.0.0 – 126.255.255.255 | /8 | Large enterprise |
| B | 128.0.0.0 – 191.255.255.255 | /16 | Medium networks |
| C | 192.0.0.0 – 223.255.255.255 | /24 | Small networks |
| D | 224.0.0.0 – 239.255.255.255 | — | Multicast |
| E | 240.0.0.0 – 255.255.255.255 | — | Reserved |
Địa chỉ Private (RFC 1918)
Không được route trên Internet public:
| Range | CIDR | Số địa chỉ | Dùng cho |
|---|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | 16 triệu | Datacenter, cloud VPC |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | 1 triệu | Enterprise LAN |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | 65,536 | Home, small office |
Địa chỉ đặc biệt
| Địa chỉ | Ý nghĩa |
|---|---|
127.0.0.1 | Loopback — bản thân máy |
0.0.0.0 | Tất cả interface (listen) |
255.255.255.255 | Broadcast toàn mạng |
169.254.x.x | APIPA — tự gán khi DHCP fail |
CIDR — Classless Inter-Domain Routing
CIDR dùng prefix notation để chỉ định subnet mask: 192.168.1.0/24
192.168.1.0 /24
└──────────┘ └─┘
Network Prefix length (số bit của network)
Bảng CIDR thường dùng
| CIDR | Subnet Mask | Số hosts | Dùng cho |
|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,214 | Lớp A enterprise |
| /16 | 255.255.0.0 | 65,534 | VPC lớn |
| /24 | 255.255.255.0 | 254 | Subnet thông thường |
| /25 | 255.255.255.128 | 126 | Chia đôi /24 |
| /26 | 255.255.255.192 | 62 | Nhỏ hơn |
| /27 | 255.255.255.224 | 30 | Subnet nhỏ |
| /28 | 255.255.255.240 | 14 | Rất nhỏ |
| /29 | 255.255.255.248 | 6 | Point-to-point |
| /30 | 255.255.255.252 | 2 | WAN link |
| /32 | 255.255.255.255 | 1 | Single host |
Công thức tính số hosts
Số hosts = 2^(32 - prefix) - 2 (trừ 2 vì: network address + broadcast address)
Ví dụ /24: 2^(32-24) - 2 = 256 - 2 = 254 hosts
Subnetting — Chia mạng con
Ví dụ thực tế: VPC AWS 10.0.0.0/16
Phân tích subnet 192.168.1.0/24
Network: 192.168.1.0
Broadcast: 192.168.1.255
First host: 192.168.1.1
Last host: 192.168.1.254
Hosts: 254
NAT — Network Address Translation
NAT cho phép nhiều máy dùng chung một IP public — giải quyết bài toán thiếu IPv4.
Các loại NAT
| Loại | Mô tả | Dùng cho |
|---|---|---|
| SNAT (Source NAT) | Thay đổi source IP — nhiều private ra một public | Internet access từ LAN |
| DNAT (Destination NAT) | Thay đổi dest IP — forward port vào server nội bộ | Port forwarding, load balancing |
| PAT (Port Address Translation) | SNAT kèm port — một IP public cho nhiều clients | Home router, NAT Gateway |
# Ví dụ iptables NAT (Linux)
# SNAT — cho phép LAN ra Internet
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# DNAT — forward port 80 vào server nội bộ
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
IPv6 — Thế hệ tiếp theo
IPv6 là 128-bit, viết dạng hexadecimal, chia thành 8 nhóm 4 hex digits:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Rút gọn: omit leading zeros + :: thay một nhóm toàn 0 liên tiếp:
2001:db8:85a3::8a2e:370:7334
IPv6 quan trọng
| Địa chỉ | Ý nghĩa |
|---|---|
::1 | Loopback (= 127.0.0.1) |
fe80::/10 | Link-local (tự gán trong LAN) |
fd00::/8 | Unique local (= private IPv4) |
2000::/3 | Global unicast (routable) |
ff02::1 | All nodes multicast |
So sánh IPv4 vs IPv6
| IPv4 | IPv6 | |
|---|---|---|
| Kích thước | 32 bit | 128 bit |
| Số địa chỉ | ~4.3 tỷ | ~340 undecillion |
| Header | Variable (20-60 bytes) | Fixed (40 bytes) |
| NAT | Cần thiết | Không cần |
| Auto-config | DHCP | SLAAC (tự cấu hình) |
| Security | Optional IPSec | Built-in IPSec |
Tính subnet nhanh — Cheat Sheet
# Linux — xem thông tin subnet
ip addr show # xem IP và prefix
ipcalc 192.168.1.0/24 # tính subnet (cần cài ipcalc)
# Python nhanh
python3 -c "import ipaddress; n=ipaddress.ip_network('10.0.0.0/16'); print(f'Hosts: {n.num_addresses-2}, First: {list(n.hosts())[0]}, Last: {list(n.hosts())[-1]}')"
| Bạn có | Cần ít nhất | Dùng CIDR |
|---|---|---|
| 2 hosts | /30 (2 hosts) | — |
| 10 hosts | /28 (14 hosts) | — |
| 50 hosts | /26 (62 hosts) | — |
| 100 hosts | /25 (126 hosts) | — |
| 200 hosts | /24 (254 hosts) | — |
| 500 hosts | /23 (510 hosts) | — |