Lệnh ss trong linux

Lệnh ss trong Linux: "Soái ca" mới của dân Networking

Chào các bạn! Nếu bạn là một системный администратор, developer hoặc đơn giản là người yêu thích khám phá hệ thống Linux, chắc hẳn bạn đã từng "vật lộn" với các công cụ dòng lệnh để theo dõi kết nối mạng. Chắc hẳn bạn đã quá quen với netstat và iproute2. Tuy nhiên, có một "soái ca" mới nổi lên, mạnh mẽ hơn, nhanh hơn và cung cấp nhiều thông tin hơn: đó chính là lệnh ss (socket statistics). Trong bài viết này, chúng ta sẽ cùng nhau khám phá sức mạnh của ss, từ cơ bản đến nâng cao, và xem tại sao nó lại trở thành lựa chọn hàng đầu của nhiều chuyên gia mạng.

Tại sao nên dùng ss thay cho netstat?

Trước khi đi sâu vào chi tiết, hãy cùng điểm qua một vài lý do tại sao ss lại được ưa chuộng hơn netstat:

  • Tốc độ: ss nhanh hơn đáng kể so với netstat, đặc biệt khi xử lý số lượng lớn kết nối. Điều này là do ss trực tiếp truy cập thông tin từ kernel, trong khi netstat phải thông qua thư viện libnetstat.
  • Thông tin chi tiết: ss cung cấp nhiều thông tin hơn về các socket và kết nối TCP/IP, bao gồm các thông số TCP như RTT (Round-Trip Time) và congestion window.
  • Tính linh hoạt: ss hỗ trợ nhiều tùy chọn lọc và hiển thị thông tin, giúp bạn dễ dàng tìm kiếm và phân tích dữ liệu.
  • Hiện đại: ss là một phần của bộ công cụ iproute2, được phát triển và duy trì tích cực, trong khi netstat đã trở nên lỗi thời.

Cú pháp cơ bản của lệnh ss

Cú pháp cơ bản của lệnh ss rất đơn giản:

ss [options] [filters]

Trong đó:

  • options: Các tùy chọn để điều chỉnh đầu ra và hành vi của lệnh.
  • filters: Các bộ lọc để chọn các socket và kết nối cụ thể.

Các tùy chọn hữu ích của lệnh ss

Dưới đây là một số tùy chọn thường dùng của lệnh ss:

  • -t: Hiển thị các kết nối TCP.
  • -u: Hiển thị các kết nối UDP.
  • -l: Hiển thị các socket đang lắng nghe (listening).
  • -a: Hiển thị tất cả các socket, bao gồm cả TCP, UDP và Unix domain sockets.
  • -p: Hiển thị thông tin về tiến trình (process) sử dụng socket. Yêu cầu quyền root.
  • -n: Không phân giải tên host và service.
  • -H: Ẩn header.
  • -o: Hiển thị thông tin về timer.
  • -e: Hiển thị thông tin mở rộng, ví dụ như TCP window size.
  • -m: Hiển thị thông tin về memory usage.
  • -i: Hiển thị thông tin TCP Internal.

Các ví dụ thực tế với lệnh ss

Để hiểu rõ hơn về cách sử dụng ss, chúng ta sẽ cùng xem qua một vài ví dụ thực tế:

  1. Liệt kê tất cả các kết nối TCP đang lắng nghe:
    ss -tl
  2. Liệt kê tất cả các kết nối UDP đang lắng nghe:
    ss -ul
  3. Liệt kê tất cả các kết nối TCP đã thiết lập (established):
    ss -t state established
  4. Liệt kê tất cả các kết nối đến cổng 80:
    ss -t '( dport = :80 )'
  5. Liệt kê tất cả các kết nối đến cổng 443 và hiển thị PID:
    sudo ss -tp '( dport = :443 )'
  6. Tìm kết nối đến một địa chỉ IP cụ thể:
    ss dst 192.168.1.100

Bộ lọc nâng cao với lệnh ss

ss cung cấp nhiều bộ lọc mạnh mẽ để bạn có thể tìm kiếm và phân tích dữ liệu một cách chính xác. Dưới đây là một số bộ lọc thường dùng:

  • dport: Cổng đích (destination port).
  • sport: Cổng nguồn (source port).
  • src: Địa chỉ IP nguồn (source IP address).
  • dst: Địa chỉ IP đích (destination IP address).
  • state: Trạng thái kết nối (ví dụ: established, syn-sent, syn-recv, ...).

Bạn có thể kết hợp các bộ lọc này để tạo ra các truy vấn phức tạp. Ví dụ:

ss -t 'dport = :80 and src 192.168.1.0/24'

Lệnh này sẽ liệt kê tất cả các kết nối TCP đến cổng 80 từ dải địa chỉ 192.168.1.0/24.

So sánh ss và netstat

Để dễ hình dung hơn về sự khác biệt giữa ss và netstat, chúng ta hãy xem qua bảng so sánh sau:

Tính năng netstat ss
Tốc độ Chậm hơn Nhanh hơn đáng kể
Thông tin chi tiết Ít thông tin hơn Nhiều thông tin hơn (TCP RTT, congestion window...)
Tính linh hoạt Ít linh hoạt hơn Linh hoạt hơn với nhiều tùy chọn lọc
Khả năng mở rộng Hạn chế Tốt hơn với các hệ thống lớn
Độ tin cậy Có thể không chính xác trong một số trường hợp Chính xác hơn do truy cập trực tiếp vào kernel
Bảo trì Ngừng phát triển Được phát triển và duy trì liên tục

Ví dụ thực tế: Giám sát kết nối web server

Hãy tưởng tượng bạn là системный администратор và bạn muốn giám sát các kết nối đến web server của mình (ví dụ, cổng 80 và 443). Bạn có thể sử dụng lệnh ss để theo dõi số lượng kết nối, trạng thái của chúng và địa chỉ IP của các client.

  1. Theo dõi số lượng kết nối đến cổng 80:
    watch -n 1 "ss -tn '( dport = :80 )' | wc -l"
  2. Hiển thị tất cả các kết nối TCP đã thiết lập đến cổng 443, kèm theo PID:
    sudo ss -tp '( dport = :443 )' state established
  3. Tìm các kết nối có thời gian RTT cao (có thể là dấu hiệu của vấn đề mạng):
    ss -it | grep rtt

Bằng cách kết hợp các lệnh ss với các công cụ khác như watchgrep, bạn có thể tạo ra các dashboard giám sát mạnh mẽ và phát hiện sớm các vấn đề về mạng.

FAQ về lệnh ss

  1. Lệnh ss có yêu cầu quyền root không?
    Không phải lúc nào cũng cần. Tuy nhiên, để hiển thị thông tin về tiến trình (sử dụng tùy chọn -p), bạn cần có quyền root.
  2. Làm thế nào để lọc các kết nối theo giao thức (ví dụ, HTTP/2)?
    Bạn không thể lọc trực tiếp theo giao thức HTTP/2 bằng lệnh ss. Tuy nhiên, bạn có thể lọc theo cổng (ví dụ, 443) và sau đó sử dụng các công cụ khác (ví dụ, Wireshark) để phân tích lưu lượng và xác định giao thức.
  3. Lệnh ss có thể thay thế hoàn toàn netstat không?
    Trong hầu hết các trường hợp, câu trả lời là có. ss cung cấp nhiều tính năng hơn, nhanh hơn và được duy trì tốt hơn. Tuy nhiên, trong một số trường hợp hiếm gặp, netstat có thể cung cấp một số thông tin mà ss không có.
  4. Lệnh ss có trên tất cả các дистрибутив Linux không?
    Hầu hết các дистрибутив Linux hiện đại đều cài đặt sẵn ss vì nó là một phần của iproute2. Tuy nhiên, nếu bạn không tìm thấy nó, bạn có thể cài đặt bằng trình quản lý gói của дистрибутив (ví dụ, apt install iproute2 trên Ubuntu/Debian, yum install iproute2 trên CentOS/RHEL).

Kết luận

Lệnh ss là một công cụ mạnh mẽ và linh hoạt để theo dõi và phân tích kết nối mạng trên hệ thống Linux. Với tốc độ, thông tin chi tiết và khả năng lọc mạnh mẽ, ss xứng đáng là "soái ca" mới trong thế giới networking. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về ss và cách sử dụng nó trong thực tế. Chúc các bạn thành công!

Last Updated : 20/08/2025