Mạng Hoạt Động Thế Nào: Chuyện Gì Xảy Ra Khi Bạn Mở Một Trang Web
This is the first part
Trong series này chúng ta học mạng máy tính theo hướng thực dụng cho developer và DevOps. Thay vì học lý thuyết khô khan, ta bắt đầu bằng một câu hỏi quen thuộc và lần theo nó suốt cả series: chuyện gì thực sự xảy ra khi bạn gõ một địa chỉ web và nhấn Enter?
Hành trình của một request
Bạn gõ https://example.com rồi Enter. Trong khoảng một giây, rất nhiều thứ diễn ra. Đây là bức tranh tổng quát — đừng lo nếu chưa hiểu hết, mỗi bước là một bài phía sau:
Bạn gõ https://example.com
│
(1) ▼ DNS: "example.com" là IP nào? ──────────────► 93.184.x.x (Bài 7)
│
(2) ▼ Định tuyến: gói tin đi từ máy bạn (Bài 3,4,5)
│ qua router, gateway, NAT... tới đúng IP đó
│
(3) ▼ TCP: bắt tay 3 bước, mở kết nối tới cổng 443 (Bài 6)
│
(4) ▼ TLS: thỏa thuận mã hóa, kiểm tra chứng chỉ (Bài 9)
│
(5) ▼ HTTP: gửi "GET / HTTP/1.1", nhận về trang (Bài 8)
│
(6) ▼ Trình duyệt hiển thị trang
Sáu bước này gói gọn gần như toàn bộ mạng máy tính ứng dụng. Đọc qua nhanh:
- DNS dịch tên
example.comthành một địa chỉ IP — vì máy tính định tuyến bằng số, không bằng tên. - Định tuyến: gói tin của bạn không tới thẳng máy chủ mà nhảy qua nhiều thiết bị (router) trên đường đi, vượt qua NAT của mạng nhà.
- TCP thiết lập một kết nối tin cậy tới cổng 443 của máy chủ (cổng của HTTPS).
- TLS thỏa thuận khóa mã hóa và xác minh máy chủ đúng là
example.com(qua chứng chỉ) — đây là chữ "S" trong HTTPS. - HTTP là ngôn ngữ máy bạn và máy chủ nói với nhau: bạn "GET" trang, máy chủ trả về.
- Trình duyệt dựng trang từ phản hồi đó.
Mỗi lớp xây trên lớp dưới. Cả series là đi sâu vào từng lớp, rồi Bài cuối ghép lại để bạn lần theo trọn vẹn một request.
Vì sao developer và DevOps cần hiểu mạng
Bạn có thể viết code mà không cần biết mạng — cho tới khi có sự cố. Và sự cố mạng thì xảy ra liên tục:
- "API gọi không được" — do DNS sai? cổng bị chặn? TLS hết hạn chứng chỉ? Mỗi nguyên nhân ở một lớp khác nhau.
- "Service chạy mà không ai truy cập được" — bind nhầm địa chỉ? firewall? load balancer cấu hình sai?
- "Lúc nhanh lúc chậm" — vấn đề định tuyến, DNS, hay kết nối?
Không hiểu các lớp mạng, bạn chỉ đoán mò. Hiểu rồi, bạn khoanh vùng được: lỗi ở DNS, ở TCP, ở TLS, hay ở HTTP — và biết dùng công cụ nào để kiểm tra từng lớp. Đây là kỹ năng phân biệt người "code chạy được" với người "vận hành được hệ thống".
Thêm nữa, mọi thứ DevOps đụng tới đều là mạng: container nói chuyện qua mạng ảo (series Docker), server cloud trong VPC (series AWS), Linux với ip/ss/dig (series Linux Bài 13). Series này là phần nền giải thích vì sao chúng hoạt động như vậy.
Một ý niệm xuyên suốt: mạng xếp thành tầng
Điều quan trọng nhất cần mang theo: mạng được thiết kế thành các tầng (layers), mỗi tầng lo một việc và dựa vào tầng dưới. DNS không cần biết TCP hoạt động ra sao; HTTP không cần biết gói tin đi qua router nào. Mỗi tầng "giấu" phức tạp của nó với tầng trên.
Cách phân tầng này (Bài 1) là vì sao Internet mở rộng được tới hàng tỉ thiết bị mà vẫn chạy. Và với bạn, nó là công cụ tư duy: khi gỡ lỗi, hỏi "vấn đề ở tầng nào?" giúp khoanh vùng nhanh hơn nhiều so với mò mẫm.
Lộ trình của series
- Mô hình phân tầng: OSI và TCP/IP — khung tư duy cho cả series.
- Địa chỉ IP và subnet — IP, CIDR, mạng riêng/công khai.
- Tầng liên kết: MAC, ARP, switch — mạng nội bộ (LAN) hoạt động thế nào.
- Định tuyến: router, gateway, bảng định tuyến — gói tin vượt giữa các mạng.
- NAT và IP riêng/công khai — vì sao cả nhà chung một IP ra Internet.
- TCP và UDP: cổng và kết nối — bắt tay, cổng, hai kiểu truyền.
- DNS: phân giải tên miền — tên thành IP, các loại bản ghi.
- HTTP và HTTPS — ngôn ngữ của web, phương thức, mã trạng thái.
- TLS/SSL: mã hóa và chứng chỉ — chữ "S" trong HTTPS hoạt động ra sao.
- Firewall và bảo mật mạng — kiểm soát ai vào được cổng nào.
- Load balancer và reverse proxy — phân tải, mở rộng dịch vụ.
- Công cụ chẩn đoán mạng — ping, traceroute, dig, ss, tcpdump, curl -v.
- Lần theo một request từ đầu đến cuối — ghép tất cả, và hướng học tiếp.
Cần chuẩn bị
- Một môi trường Linux để chạy công cụ mạng — một container (xem series Linux Bài 1) là đủ cho phần lớn. Vài bài cần truy cập Internet để demo (dig, curl tới máy chủ thật).
- Không cần biết trước về mạng. Quen dùng dòng lệnh ở mức cơ bản là đủ.
Hết bài này chưa cần làm gì. Bài 1 dựng khung tư duy quan trọng nhất: mô hình phân tầng — để mọi bài sau "đặt đúng chỗ".
This is the first part