Lần Theo Một Request Từ Đầu Đến Cuối

K
Kai··5 min read

Ở Bài 0, ta phác hành trình một request khi mở trang web. Giờ — sau khi đã học từng tầng — ta lần theo nó trọn vẹn, ghép mọi mảnh lại. Đây là bài tổng hợp, và cũng là cách kiểm tra bạn đã nắm bức tranh lớn chưa.

Toàn cảnh: một request, từng pha có thật

Công cụ curl đo được thời gian từng pha của một request, map thẳng vào các tầng ta đã học:

curl -s -o /dev/null -w 'DNS:  %{time_namelookup}s\nTCP:  %{time_connect}s\nTLS:  %{time_appconnect}s\nTTFB: %{time_starttransfer}s\nTong: %{time_total}s\n' https://example.com
DNS lookup:    0.009s   ← phân giải tên (Bài 7)
TCP connect:   0.041s   ← bắt tay TCP xong (Bài 6)
TLS handshake: 0.077s   ← TLS xong, kênh mã hóa sẵn sàng (Bài 9)
Server xử lý:  0.126s   ← byte đầu tiên của response (HTTP — Bài 8)
Tổng cộng:     0.126s
HTTP 200 (HTTP/2)  →  172.66.147.243:443

Các con số cộng dồn, nên hiệu của chúng là thời gian mỗi pha: DNS ~9ms, rồi TCP thêm ~32ms, TLS thêm ~36ms, server xử lý phần còn lại. Đây không phải lý thuyết — đó là từng tầng trong series, đo bằng mili-giây.

Lần theo từng bước

https://example.com và nhấn Enter. Đây là toàn bộ hành trình, gắn với từng bài:

┌─────────────────────────────────────────────────────────────────┐
│ 0. Trình duyệt cần kết nối tới example.com                        │
│                                                                   │
│ 1. PHÂN GIẢI TÊN (DNS — Bài 7)                                    │
│    "example.com là IP nào?" → hỏi resolver → root/TLD/auth        │
│    → 172.66.147.243   (cache theo TTL)                            │
│                                                                   │
│ 2. ĐỊNH TUYẾN (Bài 2,4) + RA KHỎI MẠNG NHÀ (NAT — Bài 5)         │
│    Máy có IP riêng 192.168.x.x; gói đi tới default gateway,        │
│    qua NAT (đổi sang IP công khai), nhảy qua các router (hop)      │
│    tới đích. Mỗi chặng: ARP/MAC trong LAN (Bài 3), IP giữ nguyên. │
│                                                                   │
│ 3. BẮT TAY TCP (Bài 6)                                            │
│    SYN → SYN-ACK → ACK tới cổng 443. Kết nối ESTABLISHED.         │
│                                                                   │
│ 4. BẮT TAY TLS (Bài 9)                                            │
│    Thỏa thuận TLS 1.3 + cipher; server trình chứng chỉ;            │
│    trình duyệt kiểm chuỗi tin cậy tới Root CA; lập khóa phiên.     │
│                                                                   │
│ 5. HTTP REQUEST/RESPONSE (Bài 8)                                  │
│    Gửi "GET / HTTP/2, Host: example.com" (đã mã hóa).             │
│    Server (có thể qua load balancer/reverse proxy — Bài 11,       │
│    sau firewall — Bài 10) trả "HTTP/2 200" + HTML.               │
│                                                                   │
│ 6. Trình duyệt dựng trang. (Và lặp lại cho mỗi ảnh/CSS/JS.)       │
└─────────────────────────────────────────────────────────────────┘

Mỗi bước là một (vài) bài. Nếu bất kỳ bước nào hỏng, bạn giờ biết chính xác công cụ nào để kiểm tra (Bài 12): dig cho bước 1, traceroute cho bước 2, nc cho bước 3, openssl cho bước 4, curl -v cho bước 5.

Vì sao góc nhìn này quý

Nhìn theo các tầng, bạn trả lời được những câu mà trước series có thể chỉ đoán:

  • "Trang load chậm"curl -w cho thấy chậm ở pha nào: DNS chậm? TLS chậm? Server xử lý lâu (TTFB cao)? Mỗi nguyên nhân một cách xử lý khác nhau.
  • "API thỉnh thoảng lỗi" — ở tầng nào? DNS không ổn định? Kết nối bị reset (TCP)? Chứng chỉ sắp hết hạn? 5xx từ server?
  • "Service không ai vào được" — DNS, định tuyến, firewall (cổng), hay dịch vụ không nghe? Quy trình Bài 12 khoanh vùng được.

Đây là điều phân biệt người chỉ "viết code" với người "vận hành được hệ thống": khi có sự cố mạng, bạn không hoảng — bạn hỏi "tầng nào?" và đi kiểm tra.

Tổng kết series

Mười bốn bài, đi từ "chuyện gì xảy ra khi mở trang web" tới lần theo trọn vẹn một request:

  • Khung tư duy (Bài 1): mạng xếp thành tầng, mỗi tầng một việc — công cụ để hiểu và để gỡ lỗi.
  • Tầng thấp (Bài 2–5): IP & subnet, MAC/ARP trong LAN, định tuyến giữa các mạng, NAT ra Internet.
  • Tầng giao vận (Bài 6): TCP (tin cậy, bắt tay) vs UDP (nhanh), và cổng.
  • Tầng ứng dụng (Bài 7–9): DNS, HTTP/HTTPS, TLS (mã hóa + chứng chỉ).
  • Vận hành (Bài 10–12): firewall, load balancer/reverse proxy, và chẩn đoán.

Vài ý xuyên suốt đáng giữ:

  • Hỏi "tầng nào?" khi gỡ lỗi — đó là tư duy mạnh nhất series này trao cho bạn.
  • IP đầu-cuối giữ nguyên, MAC đổi mỗi hop — phân biệt định danh logic và giao nội bộ.
  • Default-deny, mở tối thiểu — nguyên tắc bảo mật lặp lại (firewall, security group).
  • TLS = bí mật + toàn vẹn + xác thực — và chứng chỉ có hạn, nhớ tự gia hạn.

Hướng học tiếp

  • Kết nối các series khác: giờ bạn hiểu mạng bên dưới container (Docker — bridge/overlay/NAT), cloud (AWS — VPC/subnet/security group/load balancer), và Linux (ip/ss/dig). Chúng đều là các khái niệm trong series này, hiện thực ở từng nơi.
  • Đào sâu: IPv6 (thay NAT), QUIC/HTTP3, BGP (định tuyến Internet), VPN/WireGuard, eBPF (quan sát mạng hiện đại), zero-trust networking.
  • Thực hành quan sát: dùng tcpdump/Wireshark bắt và đọc gói tin thật của chính các bước trên — cách học mạng "tận mắt" hiệu quả nhất.

Cảm ơn bạn đã theo hết series. Mạng máy tính rộng và sâu, nhưng với khung tư duy phân tầng và bộ công cụ chẩn đoán trong tay, bạn đã có thể tự tin đối mặt với hầu hết sự cố mạng — và tự lần theo bất kỳ request nào, từ đầu đến cuối.