Nếu bạn đang tìm hiểu mạng máy tính, hoặc đã đào sâu cài đặt mạng của một số ứng dụng, bạn chắc chắn đã thấy thuật ngữ: TCP và UDP.
TCP, viết tắt của Transmission Control Protocol (Giao thức điều khiển truyền tải), và UDP, viết tắt của User Datagram Protocol (Giao thức datagram người dùng), là một phần của bộ giao thức internet (internet protocol suite). TCP và UDP là các phương pháp khác nhau để gửi thông tin qua internet.
Nhưng ngay cả khi biết chúng là viết tắt của gì, vẫn khó biết nên dùng giao thức nào, hoặc tại sao chọn cái này hơn cái kia.
Trong bài này, chúng ta sẽ xem qua cơ bản mạng máy tính, sự khác biệt giữa TCP và 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 đi sâu vào cách TCP và UDP hoạt động, hữu ích khi biết cơ bản về cách internet hoạt động.
Nói chung, internet là mạng các thiết bị kết nối. Mỗi thiết bị, dù là smartphone hay server, giao tiếp qua bộ giao thức internet.
Bộ giao thức internet là tập hợp các giao thức, hoặc phương pháp, khác nhau để thiết bị giao tiếp với nhau. Cả TCP và UDP都是 major protocols trong bộ giao thức internet:
Mỗi thiết bị kết nối internet có địa chỉ IP duy nhất. Và khi nào hai thiết bị giao tiếp qua internet, chúng có thể dùng TCP hoặc UDP.
Dưới đây so sánh ngắn gọn giữa hai:
Để xem tổng quan cấp cao hơn về cách internet hoạt động, xem video 5 phút này:
TCP là gì?
TCP, hay Transmission Control Protocol, là giao thức mạng phổ biến nhất trực tuyến. TCP cực kỳ tin cậy, dùng cho mọi thứ từ lướt web (HTTP), gửi email (SMTP), và truyền file (FTP).
TCP dùng trong tình huống cần thiết rằng tất cả dữ liệu gửi từ thiết bị này được thiết bị kia nhận hoàn toàn nguyên vẹn.
Ví dụ, khi truy cập trang web, TCP dùng đảm bảo mọi thứ từ text, hình ảnh, và mã cần render trang đều đến. Không có TCP, hình ảnh hoặc text có thể thiếu, hoặc đến sai thứ tự, làm hỏng trang.
TCP là giao thức hướng kết nối (connection-oriented), nghĩa là thiết lập kết nối giữa hai thiết bị trước khi truyền dữ liệu, và duy trì kết nối đó trong suốt quá trình truyền.
Để thiết lập kết nối giữa hai thiết bị, TCP dùng phương pháp gọi là three-way handshake (bắt tay ba bước):
Ví dụ, để đọc bài này trên thiết bị của bạn, thiết bị trước gửi tin nhắn đến server freeCodeCamp News gọi là SYN (Synchronize Sequence Number).
Sau đó server freeCodeCamp News gửi lại tin nhắn xác nhận gọi là SYN-ACK.
Khi thiết bị nhận SYN-ACK từ server, nó gửi lại tin nhắn xác nhận ACK, thiết lập kết nối.
Một khi kết nối TCP thiết lập giữa hai thiết bị, giao thức đảm bảo tất cả dữ liệu được truyền.
Quay lại ví dụ thiết bị của bạn và freeCodeCamp News, khi three-way handshake hoàn tất, server News bắt đầu gửi tất cả dữ liệu trình duyệt thiết bị cần render bài viết.
Tất cả thiết bị chia dữ liệu thành gói tin (packets) nhỏ trước khi gửi qua internet. Những gói tin này cần lắp ráp lại ở đầu kia.
Vì vậy khi server freeCodeCamp News gửi HTML, CSS, hình ảnh, và mã khác cho bài này, nó chia mọi thứ thành gói tin dữ liệu nhỏ trước khi gửi đến thiết bị bạn. Thiết bị bạn sau đó lắp ráp gói tin thành file và hình ảnh cần thiết để render bài viết.
TCP đảm bảo các gói tin này đều đến thiết bị bạn. Nếu bất kỳ gói tin nào mất trên đường, TCP giúp thiết bị dễ dàng báo cho server biết thiếu dữ liệu, và server gửi lại gói tin đó.
Khi thiết bị nhận đủ dữ liệu render bài viết, TCP tự động chấm dứt kết nối giữa hai thiết bị với phương pháp tương tự three-way handshake, lần này dùng gói FIN và ACK.
UDP là gì?
UDP, hay User Datagram Protocol, là một trong các giao thức chính cấu thành bộ giao thức internet. UDP kém tin cậy hơn TCP, nhưng đơn giản hơn nhiều.
UDP dùng cho tình huống chấp nhận được mất mát dữ liệu, như video/âm thanh trực tiếp (live), hoặc tốc độ là yếu tố then chốt như game online.
Mặc dù UDP tương tự TCP là dùng gửi nhận dữ liệu trực tuyến, có một vài khác biệt then chốt.
Thứ nhất, UDP là giao thức không kết nối (connectionless), nghĩa là không thiết lập kết nối trước như TCP với three-way handshake.
Thứ hai, UDP không đảm bảo tất cả dữ liệu truyền thành công. Với UDP, dữ liệu gửi đến bất kỳ thiết bị nào đang lắng nghe, nhưng không quan tâm nếu một phần mất trên đường. Đây là lý do UDP còn gọi là giao thức "fire-and-forget" (bắn và quên).
Cách hay hình dung khác biệt: TCP giống cuộc trò chuyện giữa hai người. Người A mời người B nói chuyện. Người B nói được thôi. Người A đồng ý và cả hai bắt đầu nói.
UDP giống người biểu tình ngoài đường với loa to. Mọi người chú ý đến người biểu tình nên nghe hầu hết điều họ nói. Nhưng không đảm bảo mọi người trong khu vực nghe được, hoặc họ có đang lắng nghe.
TCP hay UDP – Cái nào nhanh hơn?
Nói chung, UDP là giao thức nhanh hơn.
UDP đơn giản hơn nhiều, không cố thiết lập kết nối giữa thiết bị trước khi gửi dữ liệu, hoặc xác minh tất cả dữ liệu có đến không. Nó đơn giản gửi dữ liệu đến bất kỳ thiết bị nào yêu cầu, và tiếp tục làm vậy cho đến khi thiết bị kia ngắt kết nối hoặc không còn dữ liệu gửi.
Hãy tưởng tượng uống nước từ vòi nước thay vì uống chai từ chai. Bạn giải khát khát cả hai cách, nhưng có thể áo ướt dùng cách trước.
Nhưng nhanh hơn không có nghĩa UDP là giao thức tốt hơn tổng thể. Chỉ có nghĩa nó tốt hơn trong tình huống nhất định.
Như đề cập, TCP cần thiết khi quan trọng rằng tất cả gói tin gửi theo thứ tự và tất cả đều đến. Web sẽ không hoạt động không có TCP.
Và dù TCP chậm hơn do cách thiết lập kết nối, và kiểm tra gói tin thiếu, nó vẫn có thể nhanh như chớp. Vì chúng trên web dùng HTTP, trang như YouTube hay Netflix đều dùng TCP gửi dữ liệu đến thiết bị bạn.
TCP cũng cho phép buffering (đệm), trình duyệt có thể yêu cầu và tải thêm dữ liệu khi bạn xem, cho phép phát mượt và tua tới phần khác của video.
UDP là lựa chọn tốt hơn cho video/âm thanh trực tiếp hoặc game online nơi tốc độ quan trọng hơn mất dữ liệu tiềm ẩn.
Khi gọi qua Google Meet hoặc Zoom, video và âm thanh truyền qua UDP. Nếu gói tin mất, chỉ hiện lag hoặc video/âm thanh bị cắt một chút.
Nếu chơi game, bạn có thể nghĩ cách TCP đảm bảo gói tin đến thiết bị kia làm nó lựa chọn lý tưởng. Thực tế, mọi kiểm tra và gửi lại dữ liệu TCP làm chỉ thêm độ trễ (latency).
Game developer tìm cách thông minh khác đảm bảo input và state người chơi chính xác nhất. Nếu quan tâm đọc thêm tại sao UDP ưu tiên cho game online, xem bài này.
FIN
Tôi hy vọng bài này giúp bạn hiểu một số sắc thái giữa TCP và UDP. Và nếu ai hỏi cái nào nhanh, hãy nói những gì bạn đọc ở đây: "UDP nhanh hơn, nhưng..."
Và nếu thích bài viết, cho tôi biết trên Twitter.