CHƯƠNG 02 · NETWORK · ~110 phút

IP, Subnet,
Routing

Cách máy tính tìm nhau qua mạng. Hiểu chương này, bạn sẽ trả lời được: "Vì sao máy tôi IP 192.168.1.5 mà vẫn ra được Internet?", "192.168.1.0/24 nghĩa là gì?", và biết Wireshark hiển thị gì khi bạn ping google.com.

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)

ClassRangeNetwork bitsHosts
A0.0.0.0 – 127.255.255.2558~16M
B128.0.0.0 – 191.255.255.25516~65K
C192.0.0.0 – 223.255.255.25524254
D224.0.0.0 – 239.255.255.255Multicast
E240.0.0.0 – 255.255.255.255Reserved

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.

CIDRSubnet maskHosts
/8255.0.0.016,777,214
/16255.255.0.065,534
/24255.255.255.0254
/26255.255.255.19262
/27255.255.255.22430
/30255.255.255.2522
/32255.255.255.2551 (host route)

Số host = 2^(32-N) - 2

Trừ 2 vì:

  • Network address (host bits = 0): vd 192.168.1.0 không gán cho máy
  • Broadcast address (host bits = 1): vd 192.168.1.255 dù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)
💡 Tính nhanh
  • /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ảiCIDRSố IPUse case
10.0.0.0 – 10.255.255.25510.0.0.0/816MDoanh nghiệp lớn
172.16.0.0 – 172.31.255.255172.16.0.0/121MVừa
192.168.0.0 – 192.168.255.255192.168.0.0/1665KHome/SMB

Ngoài ra:

  • 127.0.0.0/8 — loopback (localhost 127.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ỉ:

LAN (private) NAT Router Internet ───────────── ─────────── ──────── PC: 192.168.1.5:54321 ──────── HTTP request ───────▶ Rewrite source: 192.168.1.5:54321 ↓ 203.0.113.7:54321 (NAT table: ──────── ───▶ google.com:443 192.168.1.5:54321 ↔ 203.0.113.7:54321) ◀──── reply ──── 203.0.113.7:54321 ↓ 192.168.1.5:54321 ◀──── reply ────

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.

⚠️ ARP cache poisoning
Đây là tấn công nội bộ phổ biến. Mọi máy trong LAN của coffee shop đều có thể bị ARP-poison nếu attacker cùng Wi-Fi. HTTPS giúp tránh leak data nhưng không tránh được attack metadata. Nên dùng VPN trên Wi-Fi công cộng.

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:

  1. Máy gửi packet, kiểm tra: dest IP có trong cùng LAN không (so sánh với subnet mask)?
  2. Nếu cùng LAN: ARP tìm MAC, gửi trực tiếp
  3. Nếu khác LAN: gửi tới default gateway
  4. Gateway xem routing table của nó, forward tiếp đến gateway tiếp theo
  5. 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

Bài 1 — Tính subnet

Cho 10.20.30.0/22: bao nhiêu host? Network address? Broadcast? Range?

Bài 2 — Chia subnet

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.

Bài 3 — Quan sát NAT của bạn

Chạy ifconfig xem IP nội bộ. Chạy curl ifconfig.me xem IP public. Cùng IP không? Tại sao?

Bài 4 — Traceroute thực tế

Chạy traceroute github.comtraceroute google.com. Có bao nhiêu hop? Hop đầu là gì?

Bài 5 — IPv6 mode

Trên Mac/Linux, kiểm tra interface có IPv6 không (ifconfig | grep inet6). Test ping6 google.com.

Bài 6 — Port forwarding

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?

  • 256
  • 255
  • 254 (256 - 2: trừ network + broadcast)
  • 253

Đá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?

  • Vì IPv6
  • NAT — router rewrite source IP private thành IP public của router; reply về thì rewrite ngược
  • Vì 192.168 là public
  • Tự động routing

Đá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 để?

  • Map IP → MAC trong LAN
  • Routing giữa các mạng
  • Map domain → IP
  • Mã hoá traffic

Đá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?

  • Hỏi mỗi router trên đường
  • Dùng special packet
  • Gửi packet với TTL tăng dần (1, 2, 3...) — mỗi router TTL=0 báo Time Exceeded để lộ IP
  • Dùng GPS

Đá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?

  • 10.0.0.0/8
  • 11.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Đá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?

  • Nhanh hơn IPv4
  • Bảo mật hơn
  • IPv4 hết IP (~4.3 tỷ); IPv6 có 2¹²⁸ địa chỉ — đủ cho mọi thiết bị
  • Đẹp hơn

Đáp án: hết IPv4. Phụ: IPv6 không cần NAT, có SLAAC tự config.

Câu 7. BGP là gì?

  • Routing protocol giữa các AS — "chạy Internet"
  • Một loại firewall
  • DNS server
  • Browser plugin

Đá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?

  • Multicast
  • Loopback (localhost) — máy nói chuyện với chính nó
  • Public IP
  • IPv6

Đá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
← Chương trước Chương 01: OSI & TCP/IP Chương kế tiếp Chương 03: TCP →