Để xây dựng các ứng dụng Realtime (Chat, Game) hay Streaming, bạn không thể chỉ biết HTTP. Bạn cần hiểu tầng Transport bên dưới.
1. Mô hình OSI 7 Lớp (Tóm tắt thực tế)
Mặc dù lý thuyết có 7 lớp, nhưng Web Developer thường quan tâm 4 lớp trên cùng (Mô hình TCP/IP):
- Application Layer (Lớp 7): HTTP, WebSocket, FTP, SSH. (Nơi Browser/App nói chuyện).
- Transport Layer (Lớp 4): TCP, UDP. (Chịu trách nhiệm vận chuyển gói tin).
- Network Layer (Lớp 3): IP, Routing. (Định chỉ đường đi).
- Physical/Data Link: Wifi, Cáp quang, Ethernet.
2. Cuộc chiến TCP vs UDP
TCP (Transmission Control Protocol)
Đặc điểm: "Chậm mà chắc".
- Reliable: Đảm bảo gói tin đến nơi, đúng thứ tự, không mất mát.
- Connection-oriented: Phải bắt tay (Handshake) trước.
- Dùng cho: Web (HTTP), Email, File Transfer, Database.
- Cơ chế: Nếu mất gói tin, TCP tự động gửi lại (Retransmit). Điều này gây ra độ trễ (Latency).
UDP (User Datagram Protocol)
Đặc điểm: "Nhanh nhưng ẩu".
- Unreliable: Gửi là gửi, không quan tâm đến chưa. Mất thì thôi.
- Connectionless: Bắn dữ liệu ngay lập tức.
- Dùng cho: Video Call, Online Gaming, Live Streaming.
- Tại sao? Trong video call, nếu mất 1 frame hình, thà bỏ qua frame đó để hiển thị frame tiếp theo realtime, còn hơn là dừng hình chờ gửi lại frame cũ (gây lag/giật).
3. HTTP: Giao thức của Web
HTTP/1.1
- Protocol dạng text.
- Mỗi request cần 1 kết nối TCP (hoặc Keep-alive).
- Vấn đề: Head-of-Line Blocking (Request đầu chặn request sau).
HTTP/2 (2015)
- Binary protocol (nhẹ hơn text).
- Multiplexing: Gửi nhiều request song song trên cùng 1 kết nối TCP.
- Server Push.
HTTP/3 (QUIC)
- Chạy trên nền UDP (thay vì TCP).
- Giải quyết vấn đề Head-of-Line Blocking ở tầng TCP.
- Tốc độ kết nối cực nhanh (Zero RTT).
- Được dùng bởi Google, Facebook, Youtube.
4. WebSockets vs Long Polling
Khi làm ứng dụng Chat:
| Kỹ thuật | Cơ chế | Ưu điểm | Nhược điểm |
|---|---|---|---|
| Short Polling | Client hỏi Server mỗi 2 giây: "Có tin mới ko?" | Dễ code. | Tốn tài nguyên, Server quá tải. |
| Long Polling | Client hỏi, Server "treo" đó đến khi có tin mới thì trả lời. | Đỡ tốn hơn Short Polling. | Vẫn tạo nhiều kết nối HTTP. |
| WebSocket | Mở một "đường ống" 2 chiều (TCP). Giữ kết nối liên tục. | Realtime thật sự, header nhỏ. | Stateful (Khó scale load balancer). |
| Server-Sent Events (SSE) | 1 chiều từ Server -> Client (như Radio). | Dùng HTTP/2, auto reconnect. | Chỉ 1 chiều (Không chat 2 chiều đươc). |
Kết luận
- Web thường: Dùng HTTP/2 hoặc HTTP/3.
- Chat/Game: Dùng WebSocket.
- Video Call: Dùng WebRTC (Nền tảng UDP).