2.1 IPv4 — địa chỉ 32-bit
IP (Internet Protocol) address là "địa chỉ nhà" của mỗi máy trên mạng. IPv4 dùng 32 bit, biểu diễn 4 nhóm số 0-255 ngăn cách bởi dấu chấm: 192.168.1.5.
192 . 168 . 1 . 5
│ │ │ │
11000000 . 10101000 . 00000001 . 00000101
└──────── 32 bit binary ─────────┘
Tổng số IPv4: 2³² = ~4.3 tỷ địa chỉ → ngày nay đã hết!
Cấu trúc IP
Mỗi IP gồm 2 phần:
- Network portion: định danh "mạng" (vd
192.168.1.) - Host portion: định danh máy trong mạng đó (vd
.5)
Tỷ lệ network/host xác định bằng subnet mask.
Lịch sử: Class A/B/C/D/E (đã lỗi thời)
| Class | Range | Network bits | Hosts |
|---|---|---|---|
| A | 0.0.0.0 – 127.255.255.255 | 8 | ~16M |
| B | 128.0.0.0 – 191.255.255.255 | 16 | ~65K |
| C | 192.0.0.0 – 223.255.255.255 | 24 | 254 |
| D | 224.0.0.0 – 239.255.255.255 | — | Multicast |
| E | 240.0.0.0 – 255.255.255.255 | — | Reserved |
Hệ thống Class quá lãng phí (cấp Class B = 65K IP cho 1 cty dùng 2K máy). Năm 1993 chuyển sang CIDR.
2.2 Subnet & CIDR — cách chia mạng linh hoạt
CIDR (Classless Inter-Domain Routing) viết IP cùng số bit network: 192.168.1.0/24.
/24 nghĩa là 24 bit đầu là network, 8 bit cuối là host.
192.168.1.0/24
↑
"24 bit network" → 192.168.1.x
(8 bit host = 256 địa chỉ, dùng được 254)
192.168.0.0/16 # mạng lớn, 65K địa chỉ
# 192.168.0.0 – 192.168.255.255
10.0.0.0/8 # cực lớn, 16M địa chỉ
# 10.0.0.0 – 10.255.255.255
192.168.1.0/30 # mạng tí hon, chỉ 4 IP, 2 dùng được
# 192.168.1.0, .1, .2, .3
Subnet mask
Cách viết khác của /N: subnet mask là số 32-bit có N bit 1 đầu, còn lại bit 0.
| CIDR | Subnet mask | Hosts |
|---|---|---|
| /8 | 255.0.0.0 | 16,777,214 |
| /16 | 255.255.0.0 | 65,534 |
| /24 | 255.255.255.0 | 254 |
| /26 | 255.255.255.192 | 62 |
| /27 | 255.255.255.224 | 30 |
| /30 | 255.255.255.252 | 2 |
| /32 | 255.255.255.255 | 1 (host route) |
Số host = 2^(32-N) - 2
Trừ 2 vì:
- Network address (host bits = 0): vd
192.168.1.0không gán cho máy - Broadcast address (host bits = 1): vd
192.168.1.255dùng để gửi đến tất cả máy LAN
Ví dụ tính toán
Câu hỏi: mạng 192.168.1.64/26 có bao nhiêu host? Range nào?
/26 → 32-26 = 6 bit host → 2⁶-2 = 62 host
Network: 192.168.1.64 (bit host = 0)
Range: 192.168.1.65 – 192.168.1.126
Broadcast: 192.168.1.127 (bit host = 1)
Total IP: 64 (.64 đến .127)
- /24 → 256 IP, 254 host
- /25 → 128 IP, 126 host
- /26 → 64 IP, 62 host
- /27 → 32 IP, 30 host
- /28 → 16 IP, 14 host
- /29 → 8 IP, 6 host
- /30 → 4 IP, 2 host (point-to-point link)
2.3 Private vs Public IP (RFC 1918)
3 dải IP được "reserved" cho mạng nội bộ — không route trên Internet:
| Dải | CIDR | Số IP | Use case |
|---|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | 16M | Doanh nghiệp lớn |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | 1M | Vừa |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | 65K | Home/SMB |
Ngoài ra:
127.0.0.0/8— loopback (localhost127.0.0.1)169.254.0.0/16— link-local (DHCP fail tự gán)
Public IP = mọi IP còn lại — unique trên Internet, có thể route từ bất kỳ đâu.
2.4 NAT — vì sao mạng LAN ra Internet được
Bài toán: bạn có 10 máy ở nhà, đều dùng IP private 192.168.1.x. Router của ISP cấp cho bạn chỉ 1 IP public. Làm sao 10 máy cùng truy cập Internet?
Giải pháp: NAT (Network Address Translation) — router "dịch" địa chỉ:
Loại NAT
- Static NAT: 1 private IP ↔ 1 public IP (cố định). Hiếm dùng.
- Dynamic NAT: pool public IP, cấp khi cần.
- PAT / NAPT (Port Address Translation): nhiều private IP → 1 public IP, phân biệt qua port. Đây là loại router gia đình dùng.
Port Forwarding — host server sau NAT
NAT mặc định: chỉ cho outbound. Nếu bạn host game server, web server tại nhà, cần config router redirect:
Router config:
External port 8080 → Internal 192.168.1.10:80
Khi ai đó connect 203.0.113.7:8080
Router forward đến 192.168.1.10:80
Hệ quả của NAT
- Máy ở LAN không trực tiếp connect được nhau qua Internet (cần STUN/TURN cho WebRTC)
- Một số protocol stateful (SIP, FTP active) gặp vấn đề với NAT
- Giảm pressure cho IPv4 — 1 IP public phục vụ hàng triệu máy nội bộ
2.5 IPv6 — 128 bit, đủ cho mọi hạt cát
IPv4 hết. IPv6 ra đời với 128 bit = 2¹²⁸ ≈ 3.4 × 10³⁸ địa chỉ — nhiều đến mức gán cho mỗi nguyên tử trong vũ trụ vẫn dư.
Format
2001:0db8:85a3:0000:0000:8a2e:0370:7334
└──── 8 nhóm × 16 bit = 128 bit ────┘
Rút gọn:
- Bỏ leading zeros mỗi nhóm:
2001:db8:85a3:0:0:8a2e:370:7334
- Thay 1 dãy 0 liên tục bằng "::":
2001:db8:85a3::8a2e:370:7334
Đặc biệt:
::1 → loopback (= 127.0.0.1 IPv4)
:: → unspecified
fe80::/10 → link-local
2000::/3 → global unicast (Internet)
Khác biệt vs IPv4
- Không có broadcast, dùng multicast
- Không cần ARP — dùng NDP (Neighbor Discovery Protocol)
- Không cần NAT — đủ IP public cho mọi máy
- Auto-configuration (SLAAC) — máy tự cấp IP từ router advertisement
IPv6 đã được deploy rộng nhưng vẫn chưa thay thế hoàn toàn IPv4. Đa số mạng dùng dual stack.
2.6 ARP — Address Resolution Protocol
Trong cùng LAN, máy gửi packet bằng MAC address (L2), không phải IP. Vậy làm sao biết IP 192.168.1.5 tương ứng MAC nào?
ARP giải quyết: broadcast hỏi "Ai có IP 192.168.1.5?", máy có sẽ reply MAC.
# Xem ARP cache
arp -a
# ? (192.168.1.1) at aa:bb:cc:dd:ee:ff [ether] on en0
# ? (192.168.1.5) at 11:22:33:44:55:66 [ether] on en0
# Linux mới
ip neigh show
ARP spoofing
Attacker gửi ARP reply giả mạo "tôi là gateway" → traffic đi qua máy attacker. Đây là một dạng MITM trong LAN.
2.7 Routing — cách packet đi giữa các mạng
Khi máy bạn gửi packet đến IP khác mạng (vd google.com), máy không biết đường — nhưng biết default gateway: "Cứ gửi cho gateway, gateway lo phần còn lại".
Routing table
# macOS / Linux
netstat -rn
# hoặc
ip route show # Linux
route -n # Linux cũ
# Output mẫu:
# Destination Gateway Genmask Iface
# 0.0.0.0 192.168.1.1 0.0.0.0 en0 ← default route
# 192.168.1.0 0.0.0.0 255.255.255.0 en0 ← local LAN
# 127.0.0.0 0.0.0.0 255.0.0.0 lo ← loopback
Quy trình routing:
- Máy gửi packet, kiểm tra: dest IP có trong cùng LAN không (so sánh với subnet mask)?
- Nếu cùng LAN: ARP tìm MAC, gửi trực tiếp
- Nếu khác LAN: gửi tới default gateway
- Gateway xem routing table của nó, forward tiếp đến gateway tiếp theo
- Lặp đến khi đến đích (mỗi hop = 1 router)
Routing protocols
Internet là mạng các autonomous systems (AS) — mỗi ISP/cty là 1 AS. Routing chia 2 cấp:
- IGP (interior): routing trong cùng AS — OSPF, IS-IS, RIP
- EGP (exterior): routing giữa các AS — BGP (Border Gateway Protocol)
BGP "chạy" Internet. Mọi ISP lớn peer BGP với nhau, exchange route. Bug BGP hay gây sự cố Internet diện rộng (vd Facebook 2021 outage 6 giờ vì BGP misconfig).
2.8 ICMP — ping & traceroute
ICMP (Internet Control Message Protocol) — giao thức L3 dùng cho điều khiển và báo lỗi, không truyền data thực.
ping = ICMP Echo Request/Reply
ping google.com
# PING google.com (142.250.74.14): 56 data bytes
# 64 bytes from 142.250.74.14: icmp_seq=0 ttl=115 time=12.345 ms
# 64 bytes from 142.250.74.14: icmp_seq=1 ttl=115 time=12.456 ms
# Test latency, packet loss
traceroute — TTL trick
Mỗi packet có field TTL (Time To Live), giảm 1 mỗi hop. TTL = 0 → router drop packet và gửi ICMP "Time Exceeded".
Traceroute lợi dụng: gửi packet với TTL=1 (chỉ tới hop đầu, nó báo lỗi → biết IP), rồi TTL=2, TTL=3... → biết toàn bộ đường đi.
traceroute google.com
# 1 router.local (192.168.1.1) 1.234 ms
# 2 10.10.10.1 5.678 ms
# 3 isp-gw.net (203.0.113.1) 12.345 ms
# 4 ix-tokyo.net 45.678 ms
# 5 google-backbone 50.123 ms
# 6 google.com (142.250.74.14) 52.789 ms
Hữu ích để debug: traffic của bạn đi qua đâu? Hop nào bị slow?
2.9 Tools thực tế
# Xem IP của các interface
ifconfig # macOS/BSD/Linux cũ
ip addr show # Linux mới
# Public IP của bạn (qua NAT)
curl ifconfig.me
curl ipinfo.io
# Routing
ip route
netstat -rn
# DNS lookup
nslookup google.com
dig google.com
# Test connectivity
ping google.com
mtr google.com # ping + traceroute kết hợp, real-time
# Bắt packet
sudo tcpdump -i any -nn 'host google.com' -c 10
sudo wireshark # GUI
# Show ARP cache
arp -a # macOS/Linux cũ
ip neigh # Linux mới
# Tính subnet
ipcalc 192.168.1.0/26 # cài ipcalc, hiển thị range, broadcast, ...
Bài tập
Cho 10.20.30.0/22: bao nhiêu host? Network address? Broadcast? Range?
Bạn có 192.168.0.0/24. Cần chia thành 4 subnet, mỗi subnet ~60 host. Liệt kê 4 subnet với CIDR.
Chạy ifconfig xem IP nội bộ. Chạy curl ifconfig.me xem IP public. Cùng IP không? Tại sao?
Chạy traceroute github.com và traceroute google.com. Có bao nhiêu hop? Hop đầu là gì?
Trên Mac/Linux, kiểm tra interface có IPv6 không (ifconfig | grep inet6). Test ping6 google.com.
Bạn muốn host 1 web server cá nhân tại nhà cho bạn bè truy cập. Mô tả các bước cấu hình NAT/port forwarding cần làm.
🧪 Quiz cuối chương
Câu 1. 192.168.1.0/24 có bao nhiêu host dùng được?
Đáp án: 254. /24 = 8 bit host = 256 IP. Trừ .0 (network) và .255 (broadcast).
Câu 2. Tại sao máy LAN với IP 192.168.1.5 vẫn ra Internet được?
Đáp án: NAT (PAT). Nhiều máy LAN dùng chung 1 IP public, phân biệt qua port.
Câu 3. ARP dùng để?
Đáp án: IP → MAC. Trong LAN, máy gửi packet bằng MAC. ARP dùng để biết MAC từ IP.
Câu 4. Traceroute hoạt động bằng cách?
Đáp án: TTL trick. Cực thông minh — biết toàn bộ hop bằng cách "hỏi gián tiếp".
Câu 5. Dải nào KHÔNG phải IP private theo RFC 1918?
Đáp án: 11.0.0.0/8. 11.x là public IP. Private chỉ có 10/8, 172.16/12, 192.168/16.
Câu 6. Tại sao dùng IPv6?
Đáp án: hết IPv4. Phụ: IPv6 không cần NAT, có SLAAC tự config.
Câu 7. BGP là gì?
Đáp án: BGP. Border Gateway Protocol — routing giữa các autonomous systems.
Câu 8. Dải 127.0.0.0/8 dùng cho?
Đáp án: loopback. Phổ biến nhất là 127.0.0.1. Cả /8 đều loopback nhưng chỉ .1 được dùng phổ biến.
Tổng kết chương 2
- ✅ IPv4 = 32-bit, ~4.3 tỷ IP, đã hết
- ✅ CIDR
x.x.x.x/N: N bit network, 32-N bit host. Số host = 2^(32-N) - 2 - ✅ Private IP (RFC 1918): 10/8, 172.16/12, 192.168/16 — không route Internet
- ✅ NAT: router rewrite IP+port → 1 IP public phục vụ nhiều máy LAN
- ✅ IPv6 = 128-bit, format hex 8 nhóm, có "::" rút gọn 0 liên tục
- ✅ ARP: IP → MAC trong LAN; ARP cache có thể bị poison
- ✅ Routing: máy có routing table; default gateway lo packet ra ngoài
- ✅ BGP giữa AS, OSPF/IS-IS/RIP trong AS
- ✅ ICMP: ping (echo), traceroute (TTL trick)
- ✅ Tools:
ifconfig,ip route,traceroute,mtr,tcpdump,arp