Có bao giờ bạn tự hỏi tại sao dữ liệu gửi đi trên Internet lại đến đúng nơi, không bị mất, không lộn xộn? Câu trả lời nằm ở TCP (Transmission Control Protocol – Giao thức điều khiển truyền vận) – một trong những giao thức quan trọng nhất trong thế giới mạng.

 

TCP là gì?

  • Kết nối có định hướng (connection-oriented): Trước khi truyền dữ liệu, hai máy tính cần thiết lập một kết nối cố định – giống như bạn gọi điện thoại, phải bắt máy trước khi nói chuyện.

  • Đảm bảo đáng tin cậy (reliable): TCP đảm bảo dữ liệu được gửi đến đúng, đủ và theo đúng thứ tự. Nếu mất gói, TCP sẽ tự gửi lại.

  • Dạng luồng (bitstream-oriented): Dữ liệu được truyền dưới dạng dòng liên tục, không chia rõ ràng từng gói tin như trong

UDP (User Datagram Protocol) :  UDP. Một giao thức truyền dữ liệu "không kết nối" và không đảm bảo dữ liệu đến nơi hay đúng thứ tự – dùng cho các ứng dụng yêu cầu tốc độ như video, audio, game...

TCP xác định một kết nối bằng cách nào?

Mỗi kết nối TCP được định danh duy nhất bằng 4 thành phần (4-tuple):

  • IP nguồn (source IP)

  • IP đích (destination IP)

  • Cổng nguồn (source port)

  • Cổng đích (destination port)

Thiết lập kết nối TCP – 3 bước bắt tay (3-way handshake)

  • Client gửi gói SYN (synchronize) để yêu cầu kết nối.

  • Server phản hồi bằng SYN-ACK (synchronize-acknowledge).

  • Client gửi ACK (acknowledgement) để xác nhận.

Kết thúc quá trình, hai bên chuyển sang trạng thái ESTABLISHED, sẵn sàng truyền dữ liệu.

SYN: Gói tin khởi tạo kết nối.
ACK: Gói tin xác nhận đã nhận dữ liệu.
SYN-ACK: Gói tin chứa cả yêu cầu đồng bộ và xác nhận từ server.

Khi mất gói xảy ra thì sao?

TCP sử dụng cơ chế:

  • Tự động gửi lại nếu không nhận được ACK từ phía bên kia.

  • Giới hạn số lần gửi lại, sau đó có thể đóng kết nối nếu không thành công.

Điều này giúp TCP được gọi là giao thức đáng tin cậy (reliable protocol).

Kết thúc kết nối TCP – 4 bước

  • Client gửi FIN (finish) để báo muốn ngắt kết nối.

  • Server phản hồi ACK, rồi sau đó cũng gửi lại FIN.

  • Client phản hồi ACK và bước vào trạng thái TIME_WAIT để đảm bảo không còn dữ liệu nào còn trễ trong mạng.

TIME_WAIT: Trạng thái chờ ngắn trước khi kết nối thực sự được đóng, giúp tránh các xung đột gói tin trễ.

Nếu một bên "chết bất ngờ" thì sao?

TCP có cơ chế keepalive (duy trì kết nối sống):

  • Nếu sau một thời gian không có dữ liệu truyền, TCP sẽ gửi gói keepalive để kiểm tra xem bên kia còn "sống" hay không.

  • Nếu không có phản hồi, kết nối sẽ được đóng.

RST (reset): Một gói đặc biệt báo hiệu kết nối bị reset bất thường, thường thấy khi server đã đóng mà client vẫn gửi dữ liệu.

Tổng kết

TCP là nền móng cho hầu hết các dịch vụ quan trọng như Web (HTTP/HTTPS), Email (SMTP/IMAP), FTP…
Việc hiểu rõ cách TCP hoạt động giúp bạn:

  • Hiểu các sự cố mạng thường gặp.

  • Giải thích nguyên nhân mất kết nối, trễ dữ liệu.

  • Tối ưu hóa hệ thống mạng hoặc xử lý firewall, NAT…