🔵 TCP (Transmission Control Protocol)
Kết nối trước khi truyền (3-way handshake). Đảm bảo thứ tự, không mất gói. Chậm hơn.
🟡 UDP (User Datagram Protocol)
Gửi và quên (fire-and-forget). Không đảm bảo thứ tự hay đến nơi. Nhanh, nhẹ.
1. TCP — Connection-Oriented
3-Way Handshake (thiết lập kết nối):
Client Server
│ │
│──── SYN ──────────────→ │ "Tôi muốn kết nối"
│ │
│←─── SYN + ACK ──────── │ "OK, tôi đồng ý"
│ │
│──── ACK ──────────────→ │ "Bắt đầu truyền!"
│ │
│←──→ DATA ←──→ │ Truyền data
│ │
│──── FIN ──────────────→ │ "Tôi muốn ngắt"
│←─── ACK ────────────── │ "OK, bye"
Đặc điểm:
- Reliable: Đảm bảo data đến đúng, đủ, đúng thứ tự
- Flow control: Điều chỉnh tốc độ gửi theo khả năng nhận
- Congestion control: Giảm tốc khi mạng tắc nghẽn
- Error detection: Kiểm tra checksum, gửi lại gói lỗi
- Ordered: Data nhận đúng thứ tự gửi
// TCP Server (Node.js)
const net = require('net');
const server = net.createServer((socket) => {
console.log('Client connected');
socket.on('data', (data) => {
console.log('Received:', data.toString());
socket.write('ACK: ' + data.toString()); // gửi lại xác nhận
});
socket.on('end', () => console.log('Client disconnected'));
});
server.listen(3000, () => console.log('TCP server on port 3000'));
2. UDP — Connectionless
UDP (fire-and-forget):
Client Server
│ │
│──── Packet 1 ──────────→ │ Gửi luôn, không cần handshake
│──── Packet 2 ──────────→ │ Không chờ ACK
│──── Packet 3 ──────────→ │ Packet 3 có thể đến trước Packet 2
│──── Packet 4 ─────── ✗ │ Packet 4 mất → không gửi lại
│ │
Đặc điểm:
- Fast: Không handshake, overhead thấp
- Lightweight: Header chỉ 8 bytes (TCP: 20-60 bytes)
- No guarantee: Gói có thể mất, đến sai thứ tự
- Broadcast/Multicast: Gửi đến nhiều receivers cùng lúc
- Real-time: Phù hợp cho data cần latency thấp
// UDP Server (Node.js)
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`Received: ${msg} from ${rinfo.address}:${rinfo.port}`);
// Không cần ACK, không cần connection
});
server.bind(3000, () => console.log('UDP server on port 3000'));
3. Bảng So Sánh
| Tiêu chí | 🔵 TCP | 🟡 UDP |
|---|---|---|
| Kết nối | Connection-oriented (handshake) | Connectionless |
| Tin cậy | Guaranteed delivery | Best effort, có thể mất |
| Thứ tự | Đúng thứ tự | Không đảm bảo |
| Tốc độ | Chậm hơn (overhead) | Nhanh hơn (nhẹ) |
| Header | 20-60 bytes | 8 bytes |
| Flow control | Có | Không |
| Use case | HTTP, Email, File transfer | DNS, Video call, Gaming |
4. Ví Dụ Dễ Hiểu
📞 Ví dụ đời thường:
TCP = Gửi thư bảo đảm 📮 — Bưu điện xác nhận đã gửi, người nhận ký nhận, nếu
thất lạc sẽ gửi lại.
UDP = Phát thanh radio 📻 — Đài phát sóng liên tục, ai nghe được thì nghe, mất
vài giây cũng không sao.
5. Ứng Dụng Thực Tế
TCP dùng cho:
• HTTP/HTTPS (web browsing)
• SMTP/IMAP (email)
• FTP (file transfer)
• SSH (remote access)
• Database connections
UDP dùng cho:
• DNS (name resolution)
• Video/Voice calls (WebRTC)
• Online gaming
• Live streaming
• IoT sensor data