Giới thiệu

Bạn đã bao giờ gặp tình huống pipeline CI/CD thất bại mà log không cho biết lý do? Hay ứng dụng chậm nhưng không rõ vấn đề nằm ở đâu – code hay mạng? Phân tích lưu lượng mạng là kỹ năng giúp bạn “nhìn” được dữ liệu thực sự di chuyển thế nào. Trong bài thứ tám của series chuyên sâu, chúng ta sẽ đi sâu vào cách dùng Wireshark và tcpdump, cấu trúc gói tin, đo lường hiệu năng, và ứng dụng thực tế để debug mạng trong DevOps. Hãy chuẩn bị để làm chủ nghệ thuật “bắt gói tin”!

Phân tích lưu lượng mạng: Tại sao lại quan trọng

Lưu lượng mạng là gì?

Lưu lượng mạng là tập hợp các gói tin (packet) di chuyển giữa các thiết bị – từ runner CI/CD đến server, từ microservice đến database, hay từ server đến client. Mỗi gói tin mang thông tin về nguồn, đích, và dữ liệu thực tế.

  • Vai trò trong DevOps:
    • Debug: Xác định lỗi mạng (latency, packet loss).
    • Tối ưu: Đo băng thông, tìm bottleneck.
    • Bảo mật: Phát hiện truy cập bất thường.

Ví dụ thực tế: Một team DevOps nhận thấy job deploy lên S3 chậm bất thường. Phân tích lưu lượng mạng cho thấy 30% gói tin bị mất (packet loss) do router trung gian lỗi, điều mà log ứng dụng không thể phát hiện.

Khi nào cần phân tích?

  • Ứng dụng timeout mà ping vẫn OK.
  • Traffic tăng đột biến nhưng không rõ nguồn.
  • Microservices không giao tiếp được dù port mở.

Hiểu cách bắt và đọc gói tin là bước quan trọng để làm chủ hệ thống phân tán.

Gói tin (Packet): Cấu trúc và ý nghĩa

Cấu trúc gói tin

Mỗi gói tin là một đơn vị dữ liệu, gồm ba phần chính:

  1. Header Ethernet (Tầng 2):
    • MAC nguồn và đích.
    • Loại gói (IP, ARP).
    • Kích thước: 14 byte.
  2. Header IP (Tầng 3):
    • IP nguồn và đích.
    • Protocol (TCP=6, UDP=17).
    • TTL (Time to Live): Số hop tối đa.
    • Kích thước: 20 byte (IPv4).
  3. Header TCP/UDP (Tầng 4):
    • Port nguồn và đích.
    • Sequence number (TCP).
    • Kích thước: 20 byte (TCP), 8 byte (UDP).
  4. Payload: Dữ liệu thực tế (HTTP request, file chunk).

Ví dụ: Gói tin HTTP từ 192.168.1.10:12345 đến 8.8.8.8:80 có header IP (nguồn: 192.168.1.10, đích: 8.8.8.8), header TCP (port: 12345 → 80), và payload là “GET /index.html”.

Đo lường hiệu năng

  • Latency: Thời gian gói tin đi từ nguồn đến đích.
  • Packet Loss: Tỷ lệ gói tin bị mất.
  • Throughput: Lượng dữ liệu truyền trong 1 giây (Mbps).

Trong DevOps: Latency cao có thể do mạng chậm, packet loss do router lỗi, throughput thấp do băng thông bị giới hạn.

Công cụ phân tích: Wireshark và Tcpdump

Wireshark: Giao diện trực quan

Wireshark là công cụ bắt gói tin phổ biến với giao diện đồ họa.

  • Tính năng:
    • Lọc gói tin (VD: ip.addr == 192.168.1.10).
    • Phân tích header chi tiết.
    • Theo dõi luồng TCP (Follow TCP Stream).
  • Cài đặt: Tải từ wireshark.org, chạy trên Windows/Mac/Linux.

Ví dụ: Bắt gói tin HTTP:

  1. Mở Wireshark, chọn interface (VD: eth0).
  2. Lọc: http.request.
  3. Truy cập google.com trên browser → Thấy request GET và response.

Tcpdump: Dòng lệnh mạnh mẽ

Tcpdump là công cụ dòng lệnh nhẹ, lý tưởng cho server không có GUI.

  • Cú pháp cơ bản: tcpdump -i eth0 -n
    • -i: Interface.
    • -n: Không resolve IP/port thành tên.
  • Lọc: tcpdump -i eth0 port 80
So sánh:Công cụƯu điểm
WiresharkGiao diện đẹp, chi tiếtNặng, cần GUI
TcpdumpNhẹ, chạy trên serverKhó đọc nếu phức tạp

DevOps: Dùng tcpdump trên server production, Wireshark trên local để phân tích sâu.

Ứng dụng thực tế trong DevOps

Debug Pipeline CI/CD

  • Vấn đề: Job pull image từ registry timeout.
  • Phân tích: Dùng tcpdump bắt gói tin đến registry → Phát hiện TCP retransmission do packet loss.
  • Giải pháp: Đổi DNS server hoặc kiểm tra router.

Tối ưu Microservices

  • Vấn đề: API gọi DB chậm.
  • Phân tích: Wireshark đo latency giữa hai IP → 200ms, bất thường.
  • Giải pháp: Kiểm tra MTU (Maximum Transmission Unit) hoặc switch.

Phát hiện bảo mật

  • Vấn đề: Traffic bất thường vào port 22 (SSH).
  • Phân tích: Tcpdump bắt gói → Nhiều SYN từ IP lạ.
  • Giải pháp: Thêm rule firewall chặn IP.

Bắt và phân tích gói tin

Dùng Tcpdump

  1. Bắt gói tin trên port 80: sudo tcpdump -i eth0 -n tcp port 80
    • Kết quả mẫu: 10:00:01 IP 192.168.1.10.12345 > 142.250.190.14.80: Flags [S], seq 123456
  2. Lưu file: sudo tcpdump -i eth0 -w capture.pcap -c 1000
    • -w: Lưu file, -c: Giới hạn 1000 gói.

Dùng Wireshark

  1. Mở Wireshark, chọn interface (VD: eth0).
  2. Lọc gói HTTP:
    • Nhập http vào filter bar → Enter.
  3. Mở trình duyệt, truy cập example.com.
  4. Phân tích:
    • Click gói tin → Xem header IP, TCP, và payload (HTTP GET).

Đo Lường Hiệu Năng

  • Latency: Dùng Wireshark, xem delta time giữa gói SYN và ACK.
  • Packet Loss: Tìm “TCP Retransmission” trong Wireshark hoặc tcpdump.
  • Throughput: Dùng iperf:
# Server
iperf -s
# Client
iperf -c <server-ip>

Debug tip:

  • Latency cao: Kiểm tra traceroute tìm hop chậm.
  • Packet loss: Dùng ping -c 1000 <ip> tính tỷ lệ mất.
  • Traffic bất thường: Lọc tcp.flags.syn để phát hiện SYN flood.

Leave a Reply

This site uses cookies to offer you a better browsing experience. By browsing this website, you agree to our use of cookies.