Mô Hình Phân Tầng: OSI và TCP/IP

K
Kai··5 min read

Trước khi đi vào từng giao thức, ta dựng khung tư duy mà cả series dựa vào: mạng được thiết kế thành các tầng (layers). Đây không phải lý thuyết suông — nó là công cụ giúp bạn gỡ lỗi (vấn đề ở tầng nào?) và hiểu vì sao Internet hoạt động được ở quy mô khổng lồ.

Vì sao phải phân tầng

Truyền dữ liệu qua mạng là việc cực phức tạp: tín hiệu điện trên dây, địa chỉ, định tuyến qua hàng chục thiết bị, độ tin cậy, mã hóa, định dạng dữ liệu... Không ai giải quyết tất cả trong một khối.

Giải pháp: chia thành các tầng, mỗi tầng lo một việc và dựa vào dịch vụ của tầng dưới, đồng thời cung cấp dịch vụ cho tầng trên. Tầng trên không cần biết tầng dưới làm thế nào.

Lợi ích cụ thể:

  • Trừu tượng hóa: HTTP (tầng ứng dụng) không cần biết gói tin đi qua cáp quang hay wifi. Nó chỉ "nhờ" tầng dưới chuyển dữ liệu.
  • Thay thế độc lập: đổi từ wifi sang 5G (tầng dưới) không cần sửa trình duyệt (tầng trên).
  • Gỡ lỗi theo tầng: khi có sự cố, bạn hỏi "vấn đề ở tầng nào?" — DNS (ứng dụng)? kết nối TCP (giao vận)? định tuyến (mạng)? — và khoanh vùng nhanh.

Mô hình OSI: 7 tầng

Mô hình tham chiếu OSI chia mạng thành 7 tầng. Đây là mô hình lý thuyết để học và để nói chuyện chung — thực tế Internet chạy theo TCP/IP (mục sau), nhưng dân mạng vẫn hay gọi "lỗi tầng 7", "load balancer tầng 4" theo số tầng OSI.

   Tầng                        Lo việc gì                       Ví dụ
   ───────────────────────────────────────────────────────────────────
   7  Application   dữ liệu cho ứng dụng dùng              HTTP, DNS, SSH
   6  Presentation  định dạng, mã hóa, nén                 TLS, mã hóa
   5  Session       quản lý phiên giữa hai bên             (ít dùng riêng)
   ───────────────────────────────────────────────────────────────────
   4  Transport     kết nối, độ tin cậy, cổng              TCP, UDP
   3  Network       địa chỉ logic, định tuyến giữa mạng    IP, ICMP
   2  Data Link     truyền trong một mạng nội bộ, MAC      Ethernet, ARP
   1  Physical      tín hiệu vật lý trên dây/sóng          cáp, wifi, điện

Đọc từ dưới lên: tầng 1 là dây/sóng thật, tầng 7 là dữ liệu ứng dụng. Mỗi tầng trên nhờ tầng ngay dưới. Một số tầng bạn sẽ gặp nhiều trong series:

  • Tầng 7 (Application) — nơi HTTP, DNS, SSH sống. Đây là tầng bạn lập trình với nó.
  • Tầng 4 (Transport) — TCP/UDP, khái niệm cổng (port) và kết nối (Bài 6).
  • Tầng 3 (Network)IP và định tuyến (Bài 2, 4).
  • Tầng 2 (Data Link)MAC và mạng nội bộ (Bài 3).

Mẹo nhớ "tầng 4 vs tầng 7" rất hữu ích cho DevOps: load balancer tầng 4 phân tải dựa trên IP/cổng (TCP), tầng 7 dựa trên nội dung HTTP (URL, header) — Bài 11. Khi ai đó nói "lỗi tầng 7", họ nói lỗi ở mức ứng dụng/HTTP.

Mô hình TCP/IP: 4 tầng (cái Internet thật sự dùng)

OSI là lý thuyết; Internet thực tế chạy theo mô hình TCP/IP (định nghĩa trong RFC 1122), gọn hơn với 4 tầng. Nó gộp vài tầng OSI lại:

   TCP/IP (4 tầng)        ~ tương ứng OSI            Ví dụ
   ──────────────────────────────────────────────────────────
   Application      =   OSI 5+6+7              HTTP, DNS, TLS, SSH
   Transport        =   OSI 4                  TCP, UDP
   Internet         =   OSI 3                  IP, ICMP
   Link             =   OSI 1+2                Ethernet, wifi, ARP

Trong thực tế, người ta dùng lẫn cả hai: nói "tầng 4/tầng 7" theo số OSI, nhưng kiến trúc thật là TCP/IP. Bạn không cần thuộc lòng — chỉ cần nắm ý: dữ liệu đi qua nhiều tầng, mỗi tầng thêm phần việc của nó.

Encapsulation: dữ liệu được "đóng gói" qua từng tầng

Đây là cơ chế cốt lõi nối các tầng. Khi bạn gửi dữ liệu, mỗi tầng từ trên xuống bọc thêm một lớp tiêu đề (header) của riêng nó — gọi là encapsulation (đóng gói):

   Gửi đi (xuống các tầng):

   Application:                      [ dữ liệu HTTP ]
   Transport (TCP):          [ TCP header | dữ liệu HTTP ]          → "segment"
   Internet (IP):       [ IP header | TCP header | dữ liệu ]        → "packet"
   Link (Ethernet):  [ Eth header | IP header | TCP | dữ liệu | Eth trailer ]  → "frame"
                          │
                          ▼  truyền trên dây/sóng (bits)
  • Tầng giao vận thêm header TCP (chứa cổng nguồn/đích) → đơn vị gọi là segment.
  • Tầng mạng thêm header IP (chứa IP nguồn/đích) → packet.
  • Tầng liên kết thêm header Ethernet (chứa MAC) → frame, rồi đẩy ra dây thành bit.

đầu nhận, quá trình diễn ra ngược lại (decapsulation): mỗi tầng bóc header của mình ra, đọc thông tin điều khiển, rồi đưa phần còn lại lên tầng trên. Tới tầng ứng dụng, dữ liệu HTTP nguyên vẹn được giao cho server.

Vì sao điều này quan trọng với bạn: mỗi header chứa thông tin của một tầng, và các công cụ chẩn đoán (như tcpdump ở Bài 12) cho bạn nhìn thấy từng lớp header này. Hiểu encapsulation thì đọc được output của chúng.

Áp dụng vào hành trình ở Bài 0

Nhớ hành trình mở https://example.com ở Bài 0? Giờ đặt nó vào các tầng:

  • DNS phân giải tên — tầng ứng dụng (dùng UDP/TCP ở dưới).
  • IP của example.com, định tuyến gói tin — tầng mạng (Bài 2, 4).
  • TCP mở kết nối tới cổng 443 — tầng giao vận (Bài 6).
  • TLS mã hóa — quanh tầng trình bày/ứng dụng (Bài 9).
  • HTTP GET trang — tầng ứng dụng (Bài 8).

Mỗi bài sau là đi sâu vào một (vài) tầng. Khi gỡ lỗi thực tế, bạn sẽ tự hỏi "tầng nào?" và biết tìm ở đâu.

Tổng kết

Mạng được chia thành các tầng, mỗi tầng lo một việc và dựa vào tầng dưới — giúp trừu tượng hóa, thay thế độc lập, và gỡ lỗi theo tầng. OSI (7 tầng) là mô hình lý thuyết để học và gọi tên (tầng 4 = giao vận/TCP, tầng 7 = ứng dụng/HTTP); TCP/IP (4 tầng) là cái Internet thật sự chạy. Dữ liệu đi xuống được đóng gói thêm header ở mỗi tầng (segment → packet → frame), và bóc ngược lại ở đầu nhận.

Bài 2 đi vào tầng mạng — thứ định danh mọi thiết bị trên Internet: địa chỉ IP và subnet.