GIAO THỨC TCP VÀ UDP TRONG TRUYỀN TẢI DỮ LIỆU
5-ĐỊNH NGHĨA VỀ TCP VÀ UDP TRONG TRUYỀN TẢI DỮ LIỆU
Trong mô hình mạng hai giao thức TCP và UDP được hoạt động ở tầng Giao vận - Transport Layer, TCP và UDP là hai giao thức cốt lõi và phổ biến nhất được sử dụng để truyền dữ liệu qua Internet, dù có cùng mục đích là giúp các thiết bị giao tiếp với nhau, cách thức hoạt động của chúng lại hoàn toàn trái ngược với nhau, dưới đây là phân tích chi tiết và dễ hiểu về hai giao thức này.

1. Giao thức TCP là gì?
TCP (Transmission Control Protocol - Giao thức điều khiển truyền vận) là giao thức hướng kết nối (connection-oriented). Điểm đặc trưng của TCP là nó đảm bảo dữ liệu được truyền đến nơi nhận một cách toàn vẹn, chính xác và đúng thứ tự.
Cách thức hoạt động:
Bắt tay 3 bước (Three-way handshake): Trước khi truyền dữ liệu, thiết bị gửi và nhận phải thiết lập một kết nối logic với nhau thông qua quá trình gửi các gói tin SYN và ACK.
Kiểm tra và sửa lỗi: Nếu một gói tin bị mất hoặc lỗi trên đường truyền, TCP sẽ yêu cầu gửi lại gói tin đó.
Đảm bảo thứ tự: Các gói tin được đánh số thứ tự để khi đến đích, thiết bị nhận có thể sắp xếp lại chúng chính xác như ban đầu.
Ứng dụng thực tế:
TCP được dùng cho các dịch vụ đòi hỏi độ tin cậy tuyệt đối, nơi mà một lỗi nhỏ về dữ liệu cũng không được phép xảy ra:
Duyệt web (HTTP/HTTPS)
Gửi email (SMTP/IMAP)
Truyền file (FTP)
Đăng nhập từ xa (SSH/Telnet)
2. Giao thức UDP là gì?
UDP (User Datagram Protocol - Giao thức gói dữ liệu người dùng) là giao thức không hướng kết nối (connectionless). Khác với TCP, UDP tập trung tối đa vào tốc độ và sự đơn giản, bỏ qua các bước kiểm tra phức tạp.
Cách thức hoạt động:
Bắn và quên (Fire and forget): UDP cứ thế đóng gói dữ liệu và gửi đi mà không cần thiết lập kết nối trước, cũng không cần biết thiết bị nhận có đang sẵn sàng hay không.
Không kiểm tra lỗi: UDP không quan tâm gói tin có bị mất, bị trùng hay bị ngược thứ tự trên đường truyền hay không. Nó không gửi lại gói tin bị lỗi.
Header nhẹ: Nhờ lược bỏ các tính năng quản lý, kích thước phần đầu (header) của gói tin UDP rất nhỏ, giúp giảm độ trễ (ping) xuống mức tối thiểu.

Ứng dụng thực tế:
UDP là lựa chọn tối ưu cho các ứng dụng cần tốc độ thời gian thực (real-time), nơi dữ liệu truyền đi liên tục và có thể chấp nhận mất một vài khung hình hoặc tiếng nhiễu nhỏ:
Xem video trực tuyến (Streaming Youtube, Netflix)
Gọi video/thoại (VoIP, FaceTime, Zoom)
Chơi game online (các game bắn súng, MOBA cần ping thấp)
Các dịch vụ hệ thống nhanh như DNS (Dịch vụ phân giải tên miền) hoặc DHCP.
Bảng so sánh nhanh giữa TCP và UDP
Đặc tính | TCP (Tin cậy nhưng chậm hơn) | UDP (Nhanh nhưng không đảm bảo) |
Kết nối | Phải kết nối trước khi truyền (Bắt tay 3 bước) | Không cần kết nối trước |
Độ tin cậy | Đảm bảo dữ liệu đến đích 100%, không lỗi | Có thể bị mất gói tin hoặc lỗi dữ liệu |
Thứ tự gói tin | Đảm bảo đúng thứ tự ban đầu | Các gói tin có thể đến lộn xộn |
Tốc độ | Chậm hơn (do mất thời gian kiểm tra, xác nhận) | Rất nhanh, độ trễ cực thấp |
Kiểm soát lưu lượng | Có (Tránh làm nghẽn mạng) | Không |

Để dễ hình dung: TCP giống như việc bạn gửi một món quà qua dịch vụ chuyển phát phát nhanh có bảo hiểm (phải ký nhận, kiểm tra kỹ lưỡng), còn UDP giống như việc bạn đứng trên loa phát thanh (bạn cứ nói liên tục, ai nghe được đoạn nào thì nghe, nếu mất một vài từ người nghe vẫn có thể đoán được ngữ cảnh).
Bạn đang tìm hiểu hai giao thức này để chuẩn bị cấu hình cho một dịch vụ cụ thể nào (như setup VPN, VoIP) hay đang ôn tập lý thuyết mạng vậy

(Các thiết bị được sử dụng trên mô hình OSI)


(Các thiết bị được ứng dụng trên mô hình OSI)
Mô hình vận chuyển giao thức UDP & TCP
Để hiểu chi tiết về mô hình vận chuyển của TCP và UDP, chúng ta cần nhìn sâu vào cách hai giao thức này đóng gói dữ liệu, thiết lập đường truyền, kiểm soát luồng và cách chúng xử lý khi có sự cố mạng xảy ra ở tầng Giao vận (Transport Layer).
Dưới đây là phân tích chi tiết về cơ chế vận chuyển của từng giao thức.
1. Mô hình vận chuyển của TCP: Cơ chế "Cam kết và Đảm bảo"
Mô hình vận chuyển của TCP hoạt động dựa trên nguyên tắc Tin cậy tuyệt đối, để làm được điều này, TCP thực hiện một chu trình khép kín từ lúc chuẩn bị truyền cho đến khi kết thúc.
a. Thiết lập liên kết (Bắt tay 3 bước - Three-way Handshake)
Trước khi bất kỳ dữ liệu thực tế nào được gửi đi, TCP bắt buộc phải thiết lập một kết nối logic giữa hai đầu thiết bị. Quá trình này giúp hai bên thống nhất về các thông số truyền tải (như số thứ tự gói tin ban đầu - ISN).
Bước 1 (SYN): Client gửi một gói tin SYN (Synchronize) đến Server để yêu cầu kết nối.
Bước 2 (SYN-ACK): Server nhận được, phản hồi lại bằng gói tin SYN-ACK để xác nhận đã nhận yêu cầu và sẵn sàng kết nối.
Bước 3 (ACK): Client gửi lại gói tin ACK (Acknowledge) cuối cùng để xác nhận. Kênh truyền chính thức thông suốt.
b. Đóng gói và Đánh số thứ tự (Segmentation & Sequencing)
TCP nhận dòng dữ liệu (Byte stream) từ tầng ứng dụng ứng dụng và chia nhỏ thành các đoạn gọi là Segment.
Mỗi Segment được gắn một Sequence Number (Seq). Số này giúp thiết bị nhận biết được vị trí của Segment đó trong toàn bộ file dữ liệu. Dù các gói tin có đi bằng các đường vòng khác nhau và đến nơi lộn xộn, thiết bị nhận vẫn có thể xếp lại đúng thứ tự ban đầu.
c. Cơ chế kiểm soát lỗi và Truyền lại (ARQ & Acknowledgement)
Khi bên nhận nhận được một gói tin hợp lệ, nó sẽ gửi ngược lại một gói tin ACK (chứa số thứ tự của gói tin tiếp theo mà nó mong muốn nhận).
Cơ chế Timeout: Bên gửi sẽ đặt một bộ đếm thời gian (Timer) cho mỗi gói gửi đi. Nếu hết thời gian mà chưa nhận được ACK từ bên nhận, TCP coi như gói tin đó đã bị mất trên đường truyền và tự động gửi lại (Retransmit) gói tin đó.
d. Kiểm soát luồng và Kiểm soát tắc nghẽn (Flow Control & Congestion Control)
Sliding Window (Cửa sổ trượt): Bên nhận sẽ thông báo cho bên gửi biết dung lượng bộ đệm còn trống của nó (Window Size). Bên gửi chỉ được phép gửi lượng dữ liệu tối đa nằm trong khoảng trống này, tránh tình trạng bên gửi gửi quá nhanh làm tràn bộ nhớ đệm của bên nhận.
Congestion Control: Nếu phát hiện mạng đang bị nghẽn (mất gói tin liên tục), TCP sẽ tự động giảm tốc độ gửi dữ liệu xuống (thu nhỏ cửa sổ truyền) và sau đó tăng từ từ trở lại khi mạng ổn định.
e. Giải phóng liên kết (Bắt tay 4 bước - Four-way Handshake)
Khi hoàn tất truyền dữ liệu, kết nối phải được đóng lại một cách an toàn thông qua gói tin FIN (Finish) và ACK từ cả hai phía để giải phóng tài nguyên hệ thống.
2. Mô hình vận chuyển của UDP: Cơ chế "Hướng luồng và Tối giản"
Mô hình vận chuyển của UDP tuân theo triết lý Tối ưu hiệu suất. Nó loại bỏ hoàn toàn các thủ tục rườm rà để dữ liệu được đẩy đi nhanh nhất có thể.
a. Không hướng kết nối (Connectionless)
UDP không có giai đoạn bắt tay. Tiến trình ứng dụng đẩy dữ liệu xuống đến đâu, UDP đóng gói đến đó và đẩy ngay ra card mạng.
Không có khái niệm "thiết lập kênh truyền". Bên gửi cứ gửi, không cần biết bên nhận có đang "online", có bị quá tải hay có sẵn sàng nhận hay không.
b. Đóng gói dạng Datagram
Dữ liệu trong UDP được đóng gói thành các Datagram.
Cấu trúc Header của UDP cực kỳ tối giản (chỉ vỏn vẹn 8 byte, trong khi TCP header tiêu chuẩn lên tới 20 byte). UDP Header chỉ chứa: Source Port, Destination Port, Length và Checksum (để kiểm tra lỗi bit, nếu lỗi thì hủy gói chứ không sửa hay xin gửi lại).
c. Vận chuyển độc lập (Independent Routing)
Mỗi gói tin UDP (Datagram) được xử lý hoàn toàn độc lập với nhau.
Nếu gói tin số 1 và số 2 cùng được gửi đi, chúng có thể đi qua các router khác nhau trên Internet. Gói 2 có thể đến trước gói 1, và UDP ở đầu nhận sẽ đẩy thẳng dữ liệu này lên tầng ứng dụng mà không sắp xếp lại thứ tự.
d. Không kiểm soát luồng và tắc nghẽn
UDP không có cơ chế Sliding Window. Nó sẽ gửi dữ liệu với tốc độ tối đa mà ứng dụng yêu cầu hoặc băng thông cho phép. Nếu bộ đệm bên nhận bị đầy, các gói tin đến sau sẽ bị gạt bỏ (Drop) mà không có thông báo.
So sánh về mặt kỹ thuật bản chất vận chuyển của 2 giao thức:
Tính chất vận chuyển | TCP | UDP |
Trạng thái kết nối | Stateful (Theo dõi chặt chẽ trạng thái kết nối, số thứ tự, cửa sổ) | Stateless (Không lưu lại trạng thái, mỗi gói tin là độc lập) |
Đơn vị dữ liệu | Segment (Mảnh dữ liệu có liên kết chuỗi) | Datagram (Gói dữ liệu độc lập) |
Kiểu truyền tải | Byte-stream (Dòng dữ liệu liên tục, có kiểm soát) | Message-oriented (Truyền theo từng khối thông điệp rạch ròi) |
Khả năng tốn tài nguyên | Cao (Tốn CPU, RAM để duy trì bảng trạng thái và bộ đệm) | Thấp (Hầu như không tốn tài nguyên để quản lý) |