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.
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ế.
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.
Đô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 Layer | TCP/IP Layer | Protocols |
|---|---|---|
| 7. Application | 4. Application | HTTP, DNS, FTP, SSH |
| 6. Presentation | TLS/SSL, JPEG, MIME | |
| 5. Session | RPC, NetBIOS | |
| 4. Transport | 3. Transport | TCP, UDP |
| 3. Network | 2. Internet | IP, ICMP, ARP |
| 2. Data Link | 1. Link | Ethernet, Wi-Fi, MAC |
| 1. Physical | Cable, fiber, radio |
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.
Tên gọi data unit ở mỗi layer
| Layer | Đơn vị |
|---|---|
| Application | Message / Data |
| Transport | Segment (TCP) / Datagram (UDP) |
| Network | Packet |
| Data Link | Frame |
| Physical | Bit |
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:
| Layer | Protocol | Vai trò |
|---|---|---|
| L7 | HTTP / HTTPS | Web |
| L7 | FTP | File transfer |
| L7 | SMTP / IMAP / POP3 | |
| L7 | DNS | Name resolution |
| L7 | SSH | Remote shell |
| L6 | TLS / SSL | Encryption + auth (lý thuyết L6, thực tế giữa L4 và L7) |
| L4 | TCP | Reliable, ordered transport |
| L4 | UDP | Unreliable, fast transport |
| L3 | IP (v4, v6) | Routing, addressing |
| L3 | ICMP | Ping, error report |
| L3 | OSPF, BGP | Routing protocols |
| L2 | Ethernet, Wi-Fi (802.11) | LAN frame |
| L2 | ARP | IP → MAC |
| L2 | MAC address | NIC hardware ID |
| L1 | Cáp đồng, fiber, radio | Vật lý |
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 (
/apivs/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
Ghép từng protocol vào đúng layer (OSI): SSH, ARP, IP, TCP, HTTP, Ethernet, MAC, ICMP, TLS, DNS, UDP, BGP.
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.
Chạy curl -v https://github.com. Đọc output, xác định: IP nào (L3), port nào (L4), HTTP method/status (L7).
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.
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?
Đá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)?
Đáp án: L7. HTTP là application protocol — chạy trên TCP (L4).
Câu 3. TCP và UDP nằm ở layer nào?
Đá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ì?
Đá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?
Đá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à?
Đá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?
Đá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?
Đá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