Bài 3. Giao thức TCP và UDP: Cách Dữ Liệu Di Chuyển trong DevOps

Giao thức TCP và UDP Chuyên Sâu: Cách Dữ Liệu Di Chuyển trong DevOps

Bạn có bao giờ tự hỏi dữ liệu trong pipeline CI/CD di chuyển thế nào từ server này sang server khác? Hay tại sao một job deploy lại thất bại dù mạng vẫn “sống”? Câu trả lời nằm ở TCP và UDP trong DevOps – hai giao thức mạng cốt lõi. Trong bài thứ ba của series, chúng ta sẽ đi sâu vào giao thức TCP, UDP, cách chúng hoạt động, và ứng dụng thực tế trong DevOps.

Giao thức Mạng: TCP và UDP Là Gì?

Ở tầng Transport (tầng 4 OSI), TCP (Transmission Control Protocol)UDP (User Datagram Protocol) chịu trách nhiệm vận chuyển dữ liệu giữa các thiết bị. Chúng quyết định cách dữ liệu được chia nhỏ, gửi đi, và tái tạo.

  • TCP: Đáng tin cậy, có thứ tự, dùng cho HTTP, SSH, database.
  • UDP: Nhanh, không đảm bảo thứ tự, dùng cho streaming, DNS.

Trong DevOps: Hiểu TCP và UDP giúp bạn tối ưu hiệu năng và debug lỗi mạng nhanh chóng.

TCP Chuyên Sâu: Cơ Chế Đảm Bảo Độ Tin Cậy

TCP Handshake Là Gì?

TCP sử dụng 3-way handshake để thiết lập kết nối:

  1. SYN: Client gửi gói SYN (synchronize) đến server.
  2. SYN-ACK: Server trả lời SYN-ACK (acknowledge).
  3. ACK: Client gửi ACK, kết nối được thiết lập.

Ví dụ: Khi bạn SSH vào server (ssh user@server), TCP handshake đảm bảo kết nối ổn định trước khi truyền dữ liệu.

Các Tính Năng Chính của TCP

  • Đảm bảo thứ tự: Dữ liệu đến đúng thứ tự nhờ sequence number.
  • Kiểm soát luồng (Flow Control): Dùng window size để tránh quá tải.
  • Kiểm soát tắc nghẽn (Congestion Control): Giảm tốc độ khi mạng nghẽn (thuật toán như TCP Reno, Cubic).
  • Retransmission: Gửi lại gói tin bị mất.

Ứng dụng trong DevOps: TCP phù hợp cho pipeline CI/CD (push code, sync database) vì cần độ tin cậy cao.

Nhược điểm: Overhead lớn (header 20 byte), chậm hơn UDP trong mạng không ổn định.

UDP Chuyên Sâu: Tốc Độ Đánh Đổi Độ Tin Cậy

UDP Hoạt Động Thế Nào?

UDP không có handshake hay kiểm soát luồng – nó chỉ “bắn” dữ liệu đi:

  • Header nhỏ: Chỉ 8 byte (so với 20 byte của TCP).
  • Không thứ tự: Gói tin có thể đến lộn xộn hoặc mất.
  • Không retransmission: Mất gói là mất luôn.

Ví dụ: DNS query dùng UDP vì nhanh, chỉ cần 1 gói tin nhỏ.

UDP Hiệu Năng Cao Khi Nào?

  • Streaming: Video call (Zoom) chấp nhận mất gói để giữ tốc độ.
  • Real-time: Game online, IoT cần phản hồi tức thời.
  • DevOps: Monitoring tools (Prometheus scrape qua UDP) ưu tiên tốc độ.

Nhược điểm: Không phù hợp cho dữ liệu quan trọng (file transfer, database sync).

TCP vs UDP: So Sánh Chi Tiết

Tiêu chí TCP UDP
Độ tin cậy Cao (retransmission) Thấp (no retry)
Tốc độ Chậm hơn (overhead) Nhanh hơn (nhẹ)
Kết nối Có handshake Không handshake
Ứng dụng DevOps CI/CD, SSH, DB sync DNS, monitoring
Header size 20 byte 8 byte

Tình huống thực tế: Một hệ thống log tập trung (ELK) dùng TCP để gửi log từ agent về server, nhưng monitoring latency dùng UDP để giảm tải.

Thực Hành: Debug TCP và UDP với Netcat

Hãy thử gửi dữ liệu bằng netcat (nc) – công cụ đơn giản để test giao thức mạng.

Test TCP

  1. Server: Mở terminal, chạy:
    nc -l 12345
  2. Client: Mở terminal khác, gửi dữ liệu:
    echo "Hello TCP" | nc 127.0.0.1 12345
  3. Kết quả: Server nhận được “Hello TCP”.

Test UDP

  1. Server: Chạy:
    nc -u -l 12345
  2. Client: Gửi:
    echo "Hello UDP" | nc -u 127.0.0.1 12345
  3. Kết quả: Server nhận nếu không mất gói.

Debug tip:

  • Dùng tcpdump -i lo port 12345 để bắt gói tin.
  • Nếu TCP thất bại: Kiểm tra handshake (SYN không đến?).
  • Nếu UDP thất bại: Gói tin có thể mất do mạng.

Kết Luận

TCP và UDP trong DevOps là hai công cụ mạnh mẽ với mục đích khác nhau: TCP cho độ tin cậy, UDP cho hiệu năng. Hiểu cách chúng hoạt động – từ TCP handshake đến UDP hiệu năng – giúp bạn chọn đúng giao thức cho hệ thống. Bài tiếp theo, chúng ta sẽ khám phá DNS và phân giải tên – chìa khóa để kết nối tên miền với IP.

Bài tập nhỏ:

  • Dùng nc gửi 10 gói tin qua UDP. Bao nhiêu gói đến server?
  • Chạy tcpdump để xem header TCP khi SSH vào localhost.

Tiếp tục series để làm chủ giao thức mạng trong DevOps!

Điều hướng chuỗi bài viết<< Bài 2. Địa chỉ IP và Subnetting Nâng Cao: Thiết Kế Mạng Hiệu Quả trong DevOps
>> Bài 4. DNS và Phân Giải Tên: Bí Mật Kết Nối Tên Miền trong DevOps
Article Thumbnail
Article Thumbnail
Datadog Webinar: Modernize AWS Logs at Scale
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận