Module 1 — Linux Network Internals: tổng quan
Vì sao cần xuống tầng kernel trước khi debug Docker/K8s: stack, device ảo, bridge, netfilter. Lộ trình module và prerequisite (tier 1–2 + Linux cơ bản).
TL;DR: Docker và Kubernetes không "phát minh" mạng riêng — chúng script plumbing Linux đã có sẵn: network stack trong kernel, thiết bị ảo (veth, tun/tap), switch L2 ảo (bridge), và tường lửa/NAT (iptables/netfilter). Module 1 dựng bản đồ bốn mảnh plumbing đó theo đúng thứ tự bạn sẽ debug production: gói đi đâu trong kernel → thiết bị ảo nối gì với gì → bridge học MAC ra sao → rule filter/NAT bám hook nào. Học xong bạn đọc được ip/iptables output và biết tầng nào đang hỏng trước khi đụng netns hay CNI ở module sau.
Vì sao module này tồn tại
Bạn docker run một container, map port, rồi curl từ host — khi chạy, mọi thứ "ma thuật". Khi không chạy, ma thuật biến thành ticket: container ping được gateway nhưng không ra Internet; port publish "mở" nhưng packet không vào app; hai container cùng bridge không thấy nhau dù docker network inspect trông đúng.
Phần lớn tài liệu container dừng ở lệnh CLI. Phần hỏng thật nằm dưới CLI: kernel nhận interrupt từ NIC, đẩy sk_buff qua softirq, đi qua netfilter hooks, rẽ vào bridge hay device ảo, rồi mới tới socket. Docker chỉ tạo veth pair, gắn vào bridge docker0, và chèn rule iptables. Không đọc được plumbing → debug chỉ còn thử-sai rule và restart daemon.
Module này không dạy bạn viết CNI plugin hay configure kube-proxy. Nó dạy bốn khối Lego mà mọi mạng container đều ghép lại. Module 2 sẽ ghép chúng trong network namespace; Module 3 sẽ thấy Kubernetes chỉ là orchestration trên cùng nền.
Đây là bản đồ bốn mảnh — đúng thứ tự bạn học và đúng thứ tự gói tin "chạm" khi đi qua host:
flowchart LR
S["1. Network stack<br/>NIC to socket"] --> V["2. Virtual devices<br/>veth / tun / tap"]
V --> B["3. Linux bridge<br/>L2 switch ao"]
B --> N["4. Netfilter<br/>iptables filter + NAT"]Sau module này bạn sẽ
- Trace hành trình gói tin qua Linux network stack từ NIC interrupt tới application socket.
- Explain virtual network devices (
veth,tun/tap) và khi nào dùng từng loại. - Implement Linux bridge nối các network interface và quan sát MAC learning.
- Explain iptables tables/chains và cách Docker map rule vào netfilter hooks.
Lộ trình module
Bốn bài concept xếp theo phụ thuộc kỹ thuật — mỗi bài dựng một mảnh mà bài sau giả định bạn đã nắm:
-
Linux network stack — từ NIC interrupt tới application — xương sống. Gói vào máy: interrupt → softirq →
sk_buff→ netfilter hooks → socket receive buffer. Không có bản đồ này, mọi "packet drop" sau này chỉ là đoán. -
Virtual network devices — veth, tun, tap — kernel không chỉ có eth0 vật lý.
vethpair là "cáp ảo hai đầu" (nền của mọi container net);tun/taplà cửa user-space (VPN, VM). Biết khi nào L2 (tap/veth) vs L3 (tun). -
Linux bridge — switch L2 ảo (
docker0) — nối nhiều interface (thường là một đầu veth) thành một LAN ảo: tạo bridge, gắn port, quan sát MAC learning. Đây chính là thứ Docker gọi là bridge network — không phải abstraction riêng. -
iptables & netfilter — filter, NAT, hooks — tables
filter/nat/mangle, chainsINPUT/FORWARD/PREROUTING/POSTROUTING, và rule Docker tự chèn. Nền trực tiếp cho SNAT/DNAT (container ra Internet, publish port) ở module sau.
Bài tổng kết cuối module gom cheat sheet ip/iptables, glossary, và self-assessment khớp bốn outcome trên — bookmark trước khi sang container networking.
Yêu cầu trước khi bắt đầu
Kiến thức track networking (tier 1–2):
- Networking Foundations — TCP/IP 4 tầng, DNS, TCP handshake, HTTP cơ bản. Bạn cần biết gói tin là gì và request đi qua chặng nào trước khi nhìn bên trong một host Linux.
- Networking Web — TLS, reverse proxy, load balancing ở tầng ứng dụng. Không bắt buộc nhớ hết chi tiết mọi bài, nhưng bạn nên quen đọc path request và phân biệt L4 vs L7.
Môi trường thực hành:
- Linux (máy thật, VM, hoặc WSL2). Lệnh
ip,ss,iptables/nftvà quan sát bridge là Linux-native; macOS Docker Desktop không cho bạn cùng view kernel host. - Quyền root hoặc
sudođể tạo interface ảo, bridge, và xem/sửa rule (bài lab sẽ ghi rõ). - Terminal cơ bản: chạy lệnh, đọc stderr, copy output. Không cần kernel programming.
Nếu foundations/web còn mỏng, dừng lại học hai khoá đó trước — module này giả định bạn đã có bản đồ 4 tầng và biết curl/ss mức user.
Time budget
| Bài | Thời lượng |
|---|---|
| Tổng quan (bài này) | ~8 phút |
| Linux network stack | ~18 phút |
| Virtual network devices | ~16 phút |
| Linux bridge | ~18 phút |
| iptables & netfilter | ~20 phút |
| Tổng kết & cheat sheet | ~8 phút |
| Tổng module | ~1.5 giờ |
Cách học module này hiệu quả
- Chạy lệnh trên Linux, không chỉ đọc. Mỗi khi bài đưa
ip link,bridge fdb,iptables -L -n -v— gõ thật. Output trên máy bạn là bằng chứng, không phải screenshot. - Bám bản đồ 4 mảnh. Gặp lỗi "container không ra net" → tự hỏi: stack (host nhận gói?), device (veth còn pair?), bridge (port up, MAC learned?), netfilter (FORWARD/NAT drop?).
- Đừng nhảy Docker CLI trước khi xong module.
docker networkche plumbing. Học xong bốn mảnh, bạn đọc được cùng một sự cố bằngip/iptables— đó là kỹ năng debug production. - Giữ terminal song song với bài. Copy command, đổi tên interface cho khớp lab, so sánh với output mẫu.
Bài tiếp theo: Linux network stack — từ NIC interrupt tới application
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên