CHƯƠNG 01 · FOUNDATION · ~90 phút

OSI & TCP/IP
Models — bộ khung của mọi thứ

Trước khi học bất kỳ giao thức nào, phải hiểu mô hình layer. OSI 7 tầng và TCP/IP 4 tầng là 2 cách nhóm các giao thức theo chức năng. Hiểu chương này, bạn nắm được "vị trí" của mọi giao thức (HTTP, TCP, IP, Ethernet) và phân biệt L4 vs L7 load balancer — câu kinh điển trong phỏng vấn.

1.1 Tại sao cần model layer?

Networking liên quan đến nhiều thứ: tín hiệu điện trên dây, địa chỉ IP, phiên kết nối, mã hoá, dữ liệu HTTP... Nếu mọi thứ trộn vào nhau thì phức tạp khủng khiếp. Giải pháp: chia tầng.

Mỗi tầng:

  • Có một trách nhiệm rõ ràng (đơn nhiệm)
  • Chỉ giao tiếp với tầng kề trên/dưới qua interface chuẩn
  • Có thể thay đổi implementation mà không ảnh hưởng tầng khác

Vd: chuyển từ Wi-Fi sang Ethernet (đổi L1/L2) — HTTP (L7) vẫn chạy như thường. Đó là sức mạnh của layering.

📐 Triết lý kiến trúc
Đây là separation of concerns ở quy mô lớn nhất. Cùng triết lý với MVC, microservices, layered architecture trong app dev.

1.2 OSI Model — 7 layers (chuẩn ISO 1984)

OSI = Open Systems Interconnection. Là chuẩn lý thuyết — đẹp về mặt giáo dục, không 100% match thực tế.

┌──────────────────────────────────────────────────────┐ │ 7. Application │ HTTP, FTP, SMTP, DNS, SSH │ │ (giao tiếp với user, ứng dụng cuối) │ ├──────────────────────────────────────────────────────┤ │ 6. Presentation │ TLS/SSL, encryption, compression │ │ (mã hoá, nén, format data) │ ├──────────────────────────────────────────────────────┤ │ 5. Session │ NetBIOS, RPC │ │ (quản lý phiên giao tiếp) │ ├──────────────────────────────────────────────────────┤ │ 4. Transport │ TCP, UDP │ │ (delivery: reliable / unreliable, port) │ ├──────────────────────────────────────────────────────┤ │ 3. Network │ IP, ICMP, OSPF, BGP │ │ (routing giữa networks, IP address) │ ├──────────────────────────────────────────────────────┤ │ 2. Data Link │ Ethernet, Wi-Fi, ARP, MAC │ │ (frame trong cùng LAN, MAC address) │ ├──────────────────────────────────────────────────────┤ │ 1. Physical │ Cáp đồng, fiber, radio, voltage │ │ (tín hiệu điện/quang/sóng) │ └──────────────────────────────────────────────────────┘

Mnemonic để nhớ (từ trên xuống)

  • All People Seem To Need Data Processing
  • (Application, Presentation, Session, Transport, Network, Data link, Physical)

Vai trò mỗi layer (đi từ user xuống)

L7 — Application: giao tiếp với user app. Đây là layer mà developer thường làm việc nhất. HTTP, FTP, SMTP đều ở đây.

L6 — Presentation: dịch format data, mã hoá, nén. TLS/SSL nằm ở đây (lý thuyết). Trong thực tế TCP/IP gộp vào L7.

L5 — Session: quản lý phiên — mở, duy trì, đóng kết nối. RPC nằm đây. Layer này hiếm khi đề cập trong dev hằng ngày.

L4 — Transport: đảm bảo data đến đúng app trong máy đích (qua port). TCP (đáng tin) hoặc UDP (nhẹ). Đây là layer phỏng vấn hỏi nhiều.

L3 — Network: routing giữa các mạng. IP address, packet, gateway, router. Internet = liên kết các mạng (inter-net) ở layer này.

L2 — Data Link: truyền frame trong cùng 1 LAN. MAC address. Ethernet, Wi-Fi.

L1 — Physical: tín hiệu thô — điện trong cáp, photon trong fiber, sóng radio. Bit 0/1.

1.3 TCP/IP Model — 4 layers (chuẩn thực tế)

TCP/IP ra đời năm 1970, là chuẩn thực tế chạy Internet ngày nay. Đơn giản hơn OSI.

┌──────────────────────────────────────────────────────┐ │ 4. Application │ HTTP, DNS, TLS, SSH, SMTP │ │ (gộp L5+L6+L7 của OSI) │ ├──────────────────────────────────────────────────────┤ │ 3. Transport │ TCP, UDP │ ├──────────────────────────────────────────────────────┤ │ 2. Internet │ IP, ICMP │ │ (= Network của OSI) │ ├──────────────────────────────────────────────────────┤ │ 1. Link │ Ethernet, Wi-Fi, MAC, Physical │ │ (gộp L1+L2 của OSI) │ └──────────────────────────────────────────────────────┘

Đôi khi gọi 5-layer (tách Link thành Physical + Data Link). Đại đa số tài liệu hiện đại dùng 4 hoặc 5 layer, chứ không 7.

Tại sao TCP/IP "thắng" OSI?

  • Đơn giản hơn — dev dễ hiểu
  • Implement được trước (TCP/IP đã chạy ARPANET trước khi OSI hoàn thiện)
  • Open source — chấp nhận rộng rãi
  • L5/L6 của OSI ít có nội dung thực tế tách biệt

OSI vẫn được dạy vì: (1) thuật ngữ "L4/L7" vẫn dùng, (2) framework tốt cho học, (3) 1 số protocol cũ tham chiếu nó.

1.4 So sánh OSI vs TCP/IP

OSI LayerTCP/IP LayerProtocols
7. Application4. ApplicationHTTP, DNS, FTP, SSH
6. PresentationTLS/SSL, JPEG, MIME
5. SessionRPC, NetBIOS
4. Transport3. TransportTCP, UDP
3. Network2. InternetIP, ICMP, ARP
2. Data Link1. LinkEthernet, Wi-Fi, MAC
1. PhysicalCable, fiber, radio
💡 Số "Layer" trong industry
Khi devops/SRE nói "L7 load balancer" hay "L4 routing", họ dùng OSI layer numbering. Đây là quy ước universal. Vd: L7 = Application = nhìn HTTP request. L4 = Transport = chỉ nhìn TCP packet.

1.5 Encapsulation — cách data đi qua layer

Khi bạn gửi 1 HTTP request, data đi xuống qua các layer ở client, mỗi layer thêm header (gói lại). Ở server, đi lên ngược lại, mỗi layer bóc header.

CLIENT (encapsulation đi xuống) SERVER (decapsulation đi lên) App: GET / HTTP/1.1 App: GET / HTTP/1.1 Host: example.com Host: example.com │ ▲ ▼ │ L4: [TCP header][HTTP data] L4: [TCP header][HTTP data] src=54321, dst=80 bóc TCP, lấy HTTP │ ▲ ▼ │ L3: [IP hdr][TCP][HTTP] L3: [IP hdr][TCP][HTTP] src=1.2.3.4, dst=5.6.7.8 bóc IP, lấy TCP │ ▲ ▼ │ L2: [Eth][IP][TCP][HTTP] L2: [Eth][IP][TCP][HTTP] src=MAC1, dst=MAC2 bóc Ethernet │ ▲ ▼ │ L1: bit 0101010101... ────cáp/sóng───▶ L1: bit 0101010101...

Tên gọi data unit ở mỗi layer

LayerĐơn vị
ApplicationMessage / Data
TransportSegment (TCP) / Datagram (UDP)
NetworkPacket
Data LinkFrame
PhysicalBit

Overhead

Mỗi layer thêm vài chục byte header. HTTP response nhỏ chỉ 1KB nhưng khi đi qua mạng có thể thành ~1.1KB do header. Đó là lý do tối ưu hoá tránh quá nhiều request nhỏ.

1.6 Mapping các protocol vào layer đúng

Đây là bảng phải thuộc trước khi phỏng vấn:

LayerProtocolVai trò
L7HTTP / HTTPSWeb
L7FTPFile transfer
L7SMTP / IMAP / POP3Email
L7DNSName resolution
L7SSHRemote shell
L6TLS / SSLEncryption + auth (lý thuyết L6, thực tế giữa L4 và L7)
L4TCPReliable, ordered transport
L4UDPUnreliable, fast transport
L3IP (v4, v6)Routing, addressing
L3ICMPPing, error report
L3OSPF, BGPRouting protocols
L2Ethernet, Wi-Fi (802.11)LAN frame
L2ARPIP → MAC
L2MAC addressNIC hardware ID
L1Cáp đồng, fiber, radioVật lý
⚠️ Bẫy phỏng vấn — TLS ở layer nào?

Theo OSI thuần: TLS ở L6. Trong thực tế: TLS hoạt động giữa L4 (TCP) và L7 (HTTP). Nhiều người nói "TLS ở L7" cũng OK vì nó trông như application protocol. Tránh tranh cãi — câu trả lời an toàn: "TLS nằm giữa Transport và Application; lý thuyết OSI xếp ở L6 (Presentation)."

1.7 L4 vs L7 Load Balancer — câu kinh điển

Phỏng vấn DevOps/Backend rất hay hỏi: "Phân biệt L4 và L7 LB?". Hiểu chương này đã đủ trả lời.

L4 Load Balancer

  • Hoạt động ở Transport (TCP/UDP)
  • Chỉ thấy: IP source/dest, port
  • Không decode HTTP — không biết đó là GET hay POST
  • Cực nhanh — không cần parse application data
  • Có thể LB cho non-HTTP (database, MQ, video)
  • Vd: AWS NLB, HAProxy ở mode TCP

L7 Load Balancer

  • Hoạt động ở Application (HTTP)
  • Thấy: URL, headers, cookies, method
  • Decode HTTP — quyết định route theo URL/header
  • Chậm hơn nhưng linh hoạt hơn
  • Có thể: rewrite URL, set header, content-based routing, sticky session
  • Vd: AWS ALB, nginx, HAProxy mode HTTP, Cloudflare

Khi nào dùng cái nào?

  • L7 cho web app HTTP/HTTPS — cần routing theo path (/api vs /static)
  • L4 cho database, gRPC, WebSocket khối lượng lớn — cần performance tối đa
  • Nhiều kiến trúc dùng cả hai: L4 ở edge cho throughput, L7 phía sau cho routing thông minh

Ví dụ thực tế nginx config

# L7 — content-based routing
upstream api_backend { server 10.0.0.1:8080; }
upstream static_backend { server 10.0.0.2:8080; }

server {
  listen 80;
  location /api/ {       # routing dựa vào URL path → L7
    proxy_pass http://api_backend;
  }
  location /static/ {
    proxy_pass http://static_backend;
  }
}

# L4 — TCP/UDP load balancing (stream block)
stream {
  upstream postgres {
    server db1:5432;
    server db2:5432;
  }
  server {
    listen 5432;
    proxy_pass postgres;
  }
}

1.8 Quan sát layer trên thực tế

Wireshark — bắt packet

Wireshark cho phép bạn thấy tận mắt các layer. Mở Wireshark, browse 1 trang web, sẽ thấy:

  • Frame: Ethernet header (L2)
  • Internet Protocol Version 4: IP header (L3)
  • Transmission Control Protocol: TCP header (L4)
  • Hypertext Transfer Protocol: HTTP request/response (L7)

Mỗi packet được expand ra theo từng layer. Đây là cách trực quan nhất để học networking.

curl -v — quan sát HTTP

curl -v https://example.com
# * Connected to example.com (93.184.216.34) port 443    ← L3 (IP), L4 (port)
# * SSL connection using TLSv1.3                          ← TLS
# > GET / HTTP/2                                          ← L7
# > Host: example.com
# < HTTP/2 200
# < content-type: text/html

tcpdump (Linux/macOS)

sudo tcpdump -i any -nn 'port 80' -c 10
# Bắt 10 packet trên port 80, không resolve DNS

ss / netstat

ss -tunp                # show TCP/UDP connections + process
netstat -tnap | head    # cũ hơn, vẫn dùng được

Bài tập

Bài 1 — Mapping protocol

Ghép từng protocol vào đúng layer (OSI): SSH, ARP, IP, TCP, HTTP, Ethernet, MAC, ICMP, TLS, DNS, UDP, BGP.

Bài 2 — Encapsulation thực tế

Cài Wireshark. Bắt 1 HTTP request đến example.com. Trong Wireshark, expand các layer của packet. Identify L2/L3/L4/L7 header.

Bài 3 — curl -v đọc layer

Chạy curl -v https://github.com. Đọc output, xác định: IP nào (L3), port nào (L4), HTTP method/status (L7).

Bài 4 — L4 vs L7 LB scenario

3 scenario sau, dùng L4 hay L7 LB? (a) HTTP API có nhiều microservices route theo path; (b) PostgreSQL primary + replica đọc; (c) gRPC streaming với 1 backend pool đồng nhất.

Bài 5 — Tại sao 7 layer thừa?

Nêu lý do TCP/IP 4 layer thay thế OSI 7 layer trong thực tế. L5 và L6 thường được làm ở đâu trong app modern?

🧪 Quiz cuối chương

Câu 1. OSI có bao nhiêu layer và TCP/IP có bao nhiêu layer?

  • OSI 4, TCP/IP 7
  • Cả hai 5
  • OSI 7, TCP/IP 4 (hoặc 5 tuỳ định nghĩa)
  • OSI 5, TCP/IP 4

Đáp án: OSI 7, TCP/IP 4. TCP/IP gộp L5+L6+L7 thành Application, gộp L1+L2 thành Link.

Câu 2. HTTP nằm ở layer nào (OSI)?

  • L7 (Application)
  • L4 (Transport)
  • L3 (Network)
  • L2 (Data Link)

Đáp án: L7. HTTP là application protocol — chạy trên TCP (L4).

Câu 3. TCP và UDP nằm ở layer nào?

  • L3
  • L4 (Transport)
  • L5
  • L7

Đáp án: L4. Transport layer — chuyển data tới đúng app trong máy đích qua port number.

Câu 4. Encapsulation là gì?

  • Mã hoá data
  • Compress data
  • Mỗi layer thêm header (đôi khi trailer) khi data đi xuống — tạo packet hoàn chỉnh để gửi qua mạng
  • Chia data thành chunks

Đáp án: thêm header mỗi layer. Vd: HTTP → +TCP header → +IP header → +Ethernet header → bit trên dây.

Câu 5. L7 Load Balancer hơn L4 ở đâu?

  • Nhanh hơn
  • Decode HTTP — có thể route theo URL/header/cookie, rewrite, content-based
  • Tốn ít CPU hơn
  • Hoạt động trên mọi protocol

Đáp án: decode HTTP. L4 chỉ thấy IP+port. L7 thấy URL/header → routing thông minh hơn nhưng chậm hơn.

Câu 6. Đơn vị data ở L4 (Transport) gọi là?

  • Segment (TCP) / Datagram (UDP)
  • Packet
  • Frame
  • Bit

Đáp án: Segment / Datagram. Packet = L3, Frame = L2, Bit = L1.

Câu 7. Mô hình nào "thắng" trong thực tế chạy Internet ngày nay?

  • OSI
  • Cả hai chia đôi
  • TCP/IP — đơn giản hơn, implement trước, ARPANET → Internet
  • SNA (IBM)

Đáp án: TCP/IP. OSI vẫn được dạy vì terminology (L4/L7) và cấu trúc giáo dục tốt.

Câu 8. Trong câu "L4 LB" hay "L7 LB", "L" viết tắt theo mô hình nào?

  • TCP/IP layer
  • Linux layer
  • OSI Layer
  • "Load" layer

Đáp án: OSI Layer. Industry dùng OSI numbering. L4 = Transport (TCP/UDP), L7 = Application (HTTP).

Tổng kết chương 1

  • ✅ Layer hoá = separation of concerns. Đổi 1 layer không ảnh hưởng layer khác.
  • OSI 7 layers: Physical → Data Link → Network → Transport → Session → Presentation → Application
  • TCP/IP 4 layers: Link → Internet → Transport → Application — chuẩn thực tế
  • Encapsulation: data đi xuống, mỗi layer thêm header. Đi lên ở server, mỗi layer bóc.
  • ✅ Phải thuộc mapping: HTTP/DNS/SSH = L7, TLS = L6 (lý thuyết), TCP/UDP = L4, IP = L3, Ethernet/MAC = L2
  • L4 vs L7 LB: L4 chỉ thấy TCP (nhanh, không HTTP-aware); L7 decode HTTP (linh hoạt, slower)
  • ✅ Tools quan sát: Wireshark (bắt packet), curl -v, tcpdump, ss
← Quay lại Trang chủ Networking Chương kế tiếp Chương 02: IP, Subnet, Routing →