Nếu bạn bắt đầu học mạng máy tính, hoặc đào sâu cài đặt mạng của ứng dụng, chắc hẳn đã thấy 2 thuật ngữ: TCP và UDP.
TCP (Transmission Control Protocol - Giao thức điều khiển truyền tải) và UDP (User Datagram Protocol - Giao thức gói tin người dùng) đều thuộc bộ giao thức Internet. Chúng là 2 phương pháp khác nhau gửi thông tin qua Internet.
Dù biết tên gọi, vẫn khó biết dùng giao thức nào, tại sao chọn cái này mà không chọn cái kia.
Bài viết này đi qua: cơ bản mạng máy tính, khác biệt TCP/UDP, khi nào dùng cái nào, và hơn thế nữa.
Cơ Bản Mạng Máy Tính
Trước khi hiểu TCP/UDP, cần nắm cơ bản Internet hoạt động ra sao.
Internet là mạng các thiết bị kết nối. Mỗi thiết bị (điện thoại, server...) giao tiếp qua bộ giao thức Internet (Internet Protocol Suite).
Bộ giao thức Internet = tập hợp các giao thức/phương pháp để thiết bị giao tiếp. TCP và UDP là 2 giao thức chính trong bộ này:
Mỗi thiết bị có địa chỉ IP duy nhất. Khi 2 thiết bị giao tiếp, chúng dùng TCP hoặc UDP.
So sánh nhanh:
Xem video 5 phút tổng quan Internet:
TCP Là Gì?
TCP là giao thức mạng phổ biến nhất online. Cực kỳ tin cậy, dùng cho: lướt web (HTTP), gửi email (SMTP), truyền file (FTP).
TCP dùng khi bắt buộc tất cả dữ liệu phải đến đích hoàn toàn nguyên vẹn.
Ví dụ: vào website, TCP đảm bảo mọi thứ (text, hình ảnh, code render trang) đều đến. Không có TCP → hình/text bị thiếu hoặc sai thứ tự → trang web hỏng.
TCP là giao thức hướng kết nối (connection-oriented): thiết lập kết nối giữa 2 thiết bị trước khi truyền dữ liệu, duy trì kết nối suốt quá trình.
Thiết lập kết nối bằng Three-way Handshake (Bắt tay 3 bước):
- Thiết bị bạn gửi
SYN(Synchronize Sequence Number) đến server. - Server phản hồi
SYN-ACK(Acknowledge). - Thiết bị bạn nhận SYN-ACK → gửi
ACK→ kết nối thiết lập.
Sau khi kết nối TCP thiết lập, giao thức đảm bảo tất cả dữ liệu được truyền.
Quay lại ví dụ: sau handshake, server freeCodeCamp gửi HTML, CSS, hình ảnh... cho trình duyệt. Dữ liệu chia thành gói tin nhỏ trước khi gửi. Phía nhận lắp ráp lại.
TCP đảm bảo mọi gói tin đều đến. Nếu gói nào mất → thiết bị báo cho server biết thiếu dữ liệu → server gửi lại gói đó.
Khi nhận đủ dữ liệu render bài viết, TCP tự động đóng kết nối (dùng FIN và ACK packets, tương tự handshake).
UDP Là Gì?
UDP là giao thức chính khác trong bộ giao thức Internet. Kém tin cậy hơn TCP nhưng đơn giản hơn nhiều.
UDP dùng khi: chấp nhận mất một chút dữ liệu (video/audio trực tiếp) hoặc tốc độ là yếu tố quyết định (game online).
Khác biệt chính với TCP:
- Connectionless (Không kết nối): Không thiết lập kết nối trước như TCP (không có handshake 3 bước).
- Không đảm bảo truyền thành công: Gửi dữ liệu cho thiết bị nào đang lắng nghe, không quan tâm gói tin có mất hay không. Do đó UDP còn gọi là giao thức "fire-and-forget" (bắn xong quên).
Ví dụ so sánh:
- TCP như cuộc trò chuyện 2 người: A hỏi B có nói chuyện không → B đồng ý → A xác nhận → cả 2 nói chuyện.
- UDP như người biểu tình cầm loa: Ai chú ý nghe được phần lớn lời nói. Nhưng không đảm bảo mọi người trong khu vực đều nghe, hoặc thậm chí ai cũng không nghe.
TCP Hay UDP Nào Nhanh Hơn?
Chung chung UDP nhanh hơn.
UDP đơn giản hơn, không thiết lập kết nối trước, không kiểm tra gói tin có đến hết không. Chỉ việc bắn dữ liệu cho thiết bị yêu cầu, làm tiếp cho đến khi ngắt kết nối hoặc hết dữ liệu.
Ví dụ: uống nước từ vòi (UDP) vs uống từ chai (TCP). Cả 2 cũng no, nhưng vòi nước nhanh hơn (dù có thể ướt áo).
Nhưng nhanh hơn không có nghĩa UDP tốt hơn tổng thể. Chỉ tốt hơn trong tình huống đặc thù.
TCP cần thiết khi bắt buộc mọi gói tin đến, đúng thứ tự. Web không chạy được بدون TCP.
TCP chậm hơn do handshake và kiểm tra gói mất, nhưng vẫn có thể rất nhanh. YouTube, Netflix dùng TCP (qua HTTP). TCP cho phép buffering: trình duyệt yêu cầu và tải thêm dữ liệu khi bạn xem, cho phép tua nhanh, xem mượt.
UDP tốt cho: video/audio trực tiếp, game online - nơi tốc độ quan trọng hơn mất dữ liệu tiềm ẩn.
- Google Meet, Zoom: video/audio truyền qua UDP. Mất gói → lag nhỏ, hình/âm thanh cắt ngang.
- Game online: TCP सुनिश chắc gói tin đến → lý tưởng? Thực tế: mọi việc kiểm tra/gửi lại của TCP chỉ thêm độ trễ (latency). Nhà phát triển game dùng cách khác đảm bảo input/trạng thái chính xác. Xem bài viết này để hiểu tại sao game ưu tiên UDP.
Kết
Hy vọng bài viết giúp bạn hiểu rõ hơn sắc thái giữa TCP và UDP. Ai hỏi nhanh hơn → trả lời: "UDP nhanh hơn, nhưng..."
Nếu thích bài viết, cho tôi biết trên Twitter.