Liên hệProfile
Danh mục

Mục Lục

    Cách sử dụng ss Linux để kiểm tra kết nối mạng nhanh chóng và hiệu quả

    Nguyễn Hưng

    Ngày đăng:

    10/01/2026

    Cập nhật lần cuối:

    10/01/2026

    Lượt xem:
    Chia sẻ
    Đánh giá
    5/5 - (1 bình chọn)

    Nguyễn Hưng

    Lượt xem:
    Ngày đăng:

    10/01/2026

    Cập nhật lần cuối:

    10/01/2026

    Mục lục

    Lệnh ss (socket statistics) là một công cụ dòng lệnh mạnh mẽ trong các hệ điều hành Linux, được sử dụng để kiểm tra, giám sát và hiển thị thông tin chi tiết về các kết nối socket mạng. Trong bài viết này, mình sẽ cùng bạn tìm hiểu các trường hợp nên sử dụng lệnh ss và hướng dẫn sử dụng lệnh ss Linux hiệu quả, nhanh chóng nhất.

    Những điểm chính

    • Khái niệm ss: Hiểu rõ lệnh ss là gì, vai trò của lệnh ss trong việc giám sát kết nối mạng.
    • Các cú pháp lệnh phổ biến: Có được bảng tra cứu nhanh các tùy chọn quan trọng, giúp bạn tùy chỉnh việc hiển thị thông tin kết nối.
    • Các trường hợp cần kiểm tra: Biết được những tình huống thực tế cần sử dụng lệnh ss, từ việc điều tra kết nối đáng ngờ, chẩn đoán hiệu năng đến kiểm toán hệ thống.
    • Hướng dẫn sử dụng cơ bản và nâng cao: Nắm vững cách sử dụng các tùy chọn cơ bản (-ptan) và nâng cao (-u, -x) để xem thông tin chi tiết về các kết nối TCP, UDP và UNIX socket.
    • Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các câu hỏi thực tế về việc hiển thị tiến trình, ý nghĩa của trạng thái TIME-WAIT và khi nào nên dùng bộ lọc tích hợp thay vì grep.

    Lệnh ss Linux là gì?

    Lệnh ss (viết tắt của socket statistics) là một công cụ dòng lệnh mạnh mẽ dùng để kiểm tra các thông số thống kê về socket mạng trên hệ thống Linux. Lệnh này cung cấp thông tin chi tiết về các kết nối mạng, tương tự như lệnh netstat nhưng có tốc độ xử lý nhanh hơn và cung cấp nhiều thông tin chuyên sâu hơn.

    Lệnh ss được dùng để hiển thị thông tin chi tiết về các kết nối mạng và thống kê socket
    Lệnh ss được dùng để hiển thị thông tin chi tiết về các kết nối mạng và thống kê socket

    Lệnh ss được đánh giá cao hơn các công cụ giám sát mạng truyền thống nhờ những đặc điểm sau:

    • Tốc độ: ss lấy thông tin trực tiếp từ không gian nhân (kernel space) của hệ điều hành, giúp lệnh này chạy nhanh hơn khi khi hệ thống có hàng ngàn kết nối. Trong khi đó, netstat phải đọc và phân tích các file trong thư mục /proc, một quá trình có thể rất chậm trên các máy chủ có lượng truy cập lớn.
    • Thông tin chi tiết hơn: ss có khả năng hiển thị nhiều thông tin về trạng thái các gói TCP, UDP, raw sockets và Unix sockets.
    • Khả năng lọc mạnh mẽ: Hỗ trợ các bộ lọc phức tạp giúp bạn tìm kiếm kết nối theo trạng thái hoặc dải địa chỉ IP một cách chính xác.

    Các cú pháp lệnh ss phổ biến nhất

    Dưới đây là bảng tổng hợp các tùy chọn phổ biến nhất của lệnh ss:

    Tùy chọnTên đầy đủMô tả chức năng
    -a--allHiển thị tất cả các socket (cả đang lắng nghe và không lắng nghe).
    -l--listeningChỉ hiển thị các socket đang ở trạng thái listening (đang chờ kết nối).
    -t--tcpChỉ hiển thị các kết nối TCP.
    -u--udpChỉ hiển thị các kết nối UDP.
    -p--processesHiển thị Process ID (PID) và tên tiến trình đang sử dụng socket.
    -n--numericHiển thị số hiệu cổng (port) thay vì giải mã tên dịch vụ (ví dụ: hiện 80 thay vì http).
    -r--resolveCố gắng giải mã địa chỉ IP thành tên miền (hostname).
    -i--infoHiển thị thông tin TCP nội bộ chi tiết (RTT, window size,…).
    -s--summaryHiển thị bảng tóm tắt ngắn gọn về số lượng các loại socket.
    -4--ipv4Chỉ hiển thị các socket IPv4.
    -6--ipv6Chỉ hiển thị các socket IPv6.
    -x--unixChỉ hiển thị các UNIX domain sockets.

    Các trường hợp cần kiểm tra kết nối mạng

    Dưới đây là các tình huống phổ biến nhất mà bạn cần sử dụng lệnh ss để kiểm tra kết nối mạng:

    • Kiểm tra các cổng đang lắng nghe (Listening Ports): Khi bạn vừa cài đặt một dịch vụ web (như Nginx hay Apache), bạn cần xác định xem cổng 80 hoặc 443 đã mở và sẵn sàng nhận kết nối hay chưa.
    • Xác định dịch vụ đang chiếm dụng cổng: Nếu một ứng dụng không khởi động được do lỗi “Address already in use”, lệnh ss giúp tìm chính xác mã định danh tiến trình (PID) và tên ứng dụng đang chạy trên cổng đó.
    • Giám sát trạng thái kết nối TCP: Theo dõi các kết nối đang ở trạng thái ESTABLISHED, CLOSE_WAIT hoặc TIME_WAIT để phát hiện các dấu hiệu bất thường về hiệu suất hoặc tấn công mạng.
    • Kiểm tra lưu lượng từ một địa chỉ IP cụ thể: Lọc các kết nối đến từ một nguồn IP nhất định để kiểm tra xem máy khách (client) có đang kết nối thành công tới máy chủ hay không.
    • Chẩn đoán lỗi mạng (Troubleshooting): Xác định các socket bị treo hoặc kiểm tra xem dữ liệu có đang bị tắc nghẽn trong hàng đợi truyền tải hay không.
    • Phát hiện dấu hiệu tấn công mạng: Khi hệ thống giám sát an ninh (IDS/IPS) hoặc tường lửa phát ra cảnh báo về lưu lượng mạng bất thường.
    • Kiểm tra tường lửa: Sau khi cấu hình tường lửa (như iptables hoặc ufw), quản trị viên cần đảm bảo rằng các quy tắc chặn hoặc cho phép kết nối đang hoạt động đúng như mong muốn bằng cách quan sát trạng thái các socket.
    • Tối ưu hóa hiệu suất hệ thống: Việc giám sát số lượng kết nối đồng thời giúp đánh giá tải của hệ thống để quản trị viên điều chỉnh cấu hình hoặc nâng cấp tài nguyên cho phù hợp.
    Kiểm tra kết nối mạng khi cần xác định tiến trình đang sử dụng băng thông mạng ở mức cao.
    Kiểm tra kết nối mạng khi cần xác định tiến trình đang sử dụng băng thông mạng ở mức cao (Nguồn: Internet)

    Xem các kết nối TCP và process liên quan

    Để xem tất cả các kết nối TCP và các process liên quan, bạn hãy sử dụng lệnh sau (bạn cần quyền root hoặc sudo để xem thông tin process của tất cả user):

    sudo ss -ptan

    Kết quả trả về sẽ trông tương tự như sau:

    Xem các kết nối TCP và process liên quan
    Xem các kết nối TCP và process liên quan

    Trong đó bạn cần chú ý những yếu tố sau:

    • State: Trạng thái của kết nối (LISTEN: đang chờ kết nối, ESTAB: đã thiết lập kết nối).
    • Local Address:Port: Địa chỉ IP và cổng trên server của bạn.
    • Peer Address:Port: Địa chỉ IP và cổng của máy chủ từ xa đang kết nối tới.
    • Process: Cho bạn biết tên process, Process ID (PID), và File Descriptor (fd).

    Lọc kết quả với bộ lọc tích hợp của ss

    Mặc dù grep là một công cụ linh hoạt, ss lại cung cấp một cơ chế lọc nội bộ mạnh mẽ và chính xác hơn, giúp bạn đi thẳng vào vấn đề mà không cần xử lý chuỗi văn bản. Cú pháp chung là:

    ss [tùy chọn] [bộ lọc].

    1. Lọc theo trạng thái kết nối (State Filtering)

    Lọc trạng thái kết nối là cách nhanh nhất để phân loại các kết nối. Bạn có thể sử dụng các trạng thái chuẩn của TCP như established, syn-sent, time-wait, listen

    # Chỉ hiển thị các socket đang ở trạng thái LISTEN (thay cho tùy chọn -l)
    ss state listening
    hiển thị các socket đang ở trạng thái LISTEN
    Hiển thị các socket đang ở trạng thái LISTEN
    # Liệt kê tất cả các kết nối TCP đã được thiết lập thành công
    ss -t state established
    Liệt kê tất cả các kết nối TCP đã được thiết lập thành công
    Liệt kê tất cả các kết nối TCP đã được thiết lập thành công
    # Điều tra các kết nối đang ở trạng thái TIME-WAIT, thường xuất hiện sau khi kết nối đóng
    ss state time-wait
    Điều tra các kết nối đang ở trạng thái TIME-WAIT
    Điều tra các kết nối đang ở trạng thái TIME-WAIT

    2. Lọc theo địa chỉ IP và cổng (Address Filtering)

    Đây là phương pháp thay thế grep hiệu quả nhất khi bạn đã có thông tin về địa chỉ hoặc cổng cần điều tra.

    • dport: Cổng đích (destination port).
    • sport: Cổng nguồn (source port).
    • src: Địa chỉ IP nguồn (source address).
    • dst: Địa chỉ IP đích (destination address).
    # Tìm tất cả kết nối đang nhắm tới cổng 443 (HTTPS)
    ss -tan 'dport = :443'
    Tìm tất cả kết nối đang nhắm tới cổng 443
    Tìm tất cả kết nối đang nhắm tới cổng 443
    # Tìm tất cả kết nối được khởi tạo từ cổng 22 của server (kết nối SSH ra ngoài)
    ss -tan 'sport = :22'
    Tìm tất cả kết nối được khởi tạo từ cổng 22
    Tìm tất cả kết nối được khởi tạo từ cổng 22
    # Liệt kê tất cả các kết nối (ra và vào) liên quan đến địa chỉ IP 192.168.1.100
    ss -tan dst 192.168.1.100 or src 192.168.1.100
    Liệt kê tất cả các kết nối (ra và vào) liên quan đến địa chỉ IP 192.168.1.100
    Liệt kê tất cả các kết nối liên quan đến địa chỉ IP 192.168.1.100

    Việc sử dụng bộ lọc tích hợp này không chỉ giúp câu lệnh của bạn trông chuyên nghiệp hơn mà còn cho kết quả nhanh và chính xác hơn so với việc phân tích văn bản bằng grep.

    Kiểm tra và xác định nguyên nhân

    Lệnh ss -ptan có thể trả về rất nhiều dòng, vì vậy bạn có thể sử dụng grep để lọc ra thông tin cần thiết:

    Kịch bản 1: Tìm process đang lắng nghe trên cổng 8080

    # Thêm -l để chỉ tìm các cổng đang LISTEN
    sudo ss -plnt | grep ':8080'
    Tìm process đang lắng nghe trên cổng 8080.
    Tìm process đang lắng nghe trên cổng 8080.

    Kết quả sẽ chỉ ra chính xác process nào đang chiếm giữ cổng 8080, ví dụ: users:(("java",pid=2501,...)).

    Kịch bản 2: Tìm process đang kết nối tới IP 203.0.113.10

    sudo ss -ptn | grep '203.0.113.10'
    Tìm process đang kết nối tới IP 203.0.113.10.
    Tìm process đang kết nối tới IP 203.0.113.10.

    Lệnh này sẽ lọc ra đúng dòng kết nối mà bạn đang quan tâm, ví dụ dòng có process nginx với pid=1567 ở trên.

    Xác định nguyên nhân

    Khi đã có PID (ví dụ: 1567), bạn có thể sử dụng các công cụ khác để tiếp tục tìm hiểu.

    • Sử dụng ps để xem thông tin chi tiết:
    ps -uf -p 1567
    Xem thông tin chi tiết bằng lệnh ps
    Xem thông tin chi tiết bằng lệnh ps

    Lệnh này sẽ cho bạn thấy người dùng nào đã chạy process (USER), thời gian bắt đầu và toàn bộ câu lệnh đã khởi chạy nó (COMMAND).

    • Sử dụng hệ thống file /procđể tìm file thực thi gốc
    ls -l /proc/1567/exe
    Sử dụng hệ thống file /proc để tìm file thực thi gốc
    Sử dụng hệ thống file /proc để tìm file thực thi gốc

    Kết quả nhận được sẽ là một liên kết tượng trưng (symbolic link) trỏ thẳng đến file nhị phân gốc đã được thực thi, ví dụ: /usr/sbin/nginx.

    Các tùy chọn hiển thị nâng cao để chẩn đoán hiệu năng

    Ngoài việc xác định process, ss còn là một công cụ mạnh mẽ để chẩn đoán các vấn đề về hiệu năng mạng nhờ vào các tùy chọn hiển thị thông tin chi tiết.

    • -s (--summary): Cung cấp một bảng tóm tắt nhanh về tổng số socket đang được sử dụng, phân loại theo giao thức, giúp bạn có cái nhìn tổng quan về tải mạng hiện tại.
    ss -s
    Bảng tóm tắt nhanh về tổng số socket đang được sử dụng
    Bảng tóm tắt nhanh về tổng số socket đang được sử dụng
    • -i (--info): Hiển thị các thông tin TCP nội bộ cực kỳ chi tiết về một kết nối, chẳng hạn như rtt (Round-Trip Time – độ trễ), cwnd (Congestion Window – cửa sổ chống nghẽn), retrans (số lần truyền lại gói tin)… giúp bạn tìm hiểu lý do kết nối bị chậm hoặc không ổn định.
    Các thông tin TCP nội bộ cực kỳ chi tiết về một kết nối
    Các thông tin TCP nội bộ cực kỳ chi tiết về một kết nối
    # Xem thông tin TCP chi tiết của các kết nối đã thiết lập:
    ss -tin
    Xem thông tin TCP chi tiết của các kết nối đã thiết lập
    Xem thông tin TCP chi tiết của các kết nối đã thiết lập
    • -m (--memory): Hiển thị lượng bộ nhớ mà mỗi socket đang chiếm dụng, hữu ích khi bạn cần điều tra các vấn đề liên quan đến cạn kiệt tài nguyên bộ nhớ do có quá nhiều kết nối.
    ss -tm
    Hiển thị lượng bộ nhớ mà mỗi socket đang chiếm dụng
    Hiển thị lượng bộ nhớ mà mỗi socket đang chiếm dụng

    Câu hỏi thường gặp

    Tại sao ss không hiển thị tiến trình (process) cho một số kết nối?

    Vì tiến trình đó đã kết thúc nhưng socket vẫn đang trong trạng thái chờ đóng (ví dụ: TIME-WAIT), hoặc đó là một socket do chính kernel Linux quản lý.

    Có nguy hiểm không khi thấy nhiều kết nối ở trạng thái TIME-WAIT?

    Có. Vì quá nhiều kết nối TIME-WAIT có thể làm cạn kiệt số cổng khả dụng của hệ thống, khiến server không thể tạo thêm kết nối mới.

    Nên dùng bộ lọc của ss hay dùng grep?

    Bạn hãy ưu tiên bộ lọc của ss (ss ‘dport = :443’) vì có tính chính xác cao, nhanh hơn và cho phép kết hợp các điều kiện logic phức tạp, điều mà grep không làm được.

    Lệnh netstat có còn hữu ích không?

    Lệnh netstat chỉ còn cần thiết trên các bản Linux rất cũ chưa có ss, hoặc để duy trì các script tự động cũ được viết cho netstat.

    Tùy chọn -i cho biết gì về chất lượng kết nối?

    Tùy chọn -i giúp chẩn đoán sự cố mạng:
    – rtt (Round-Trip Time) cao cho thấy độ trễ lớn (kết nối chậm).
    – retrans (retransmissions) cao cho thấy có tình trạng mất gói tin (packet loss), gây ra hiệu năng kém.

    Việc hiểu và vận dụng lệnh ss Linux mang đến cho bạn một công cụ mạnh mẽ để giám sát, phân tích và xử lý các vấn đề liên quan đến kết nối mạng. Nhờ khả năng hiển thị chi tiết hoạt động của các kết nối TCP, UDP và UNIX socket cùng bộ lọc nâng cao, ss giúp tiết kiệm thời gian điều tra sự cố và hỗ trợ tối ưu hiệu năng mạng cho hệ thống.

    5/5 - (1 bình chọn)
    Nguyễn Hưng
    Tôi là Nguyễn Hưng hay còn được biết đến với nickname là Bo, chuyên gia về hệ thống, mạng và bảo mật. Tôi là Co-Founder của Vietnix và Co-Founder của dự án Chống Lừa Đảo.
    0 0 đánh giá
    Đánh giá bài viết
    Theo dõi
    Thông báo của
    guest
    0 Góp ý
    Cũ nhất
    Mới nhất Được bỏ phiếu nhiều nhất
    Phản hồi nội tuyến
    Xem tất cả bình luận

    BÀI VIẾT LIÊN QUAN

    Cách dùng dmidecode trên Linux để xem thông tin phần cứng chính xác và nhanh chóng
    Cách dùng dmidecode trên Linux để xem thông tin phần cứng chính xác và nhanh chóng

    dmidecode là một công cụ dòng lệnh trên Linux dùng để đọc và hiển thị thông tin phần cứng máy tính từ bảng DMI hoặc SMBIOS cung cấp bởi BIOS, giúp kiểm tra chi tiết như nhà sản xuất, model, số serial, BIOS, CPU, RAM mà không cần mở máy. Trong bài viết này, mình…

    27/02/2026

    Lệnh partx Linux là gì? 7 ví dụ ứng dụng thực tế của lệnh partx
    Lệnh partx Linux là gì? 7 ví dụ ứng dụng thực tế của lệnh partx

    Lệnh partx Linux là một công cụ dòng lệnh thuộc gói util-linux, được sử dụng để thêm, xóa hoặc liệt kê các phân vùng của thiết bị đĩa vào bảng phân vùng của hệ thống mà không cần khởi động lại hoặc gắn lại thiết bị. Trong bài viết này, mình sẽ hướng dẫn bạn…

    27/02/2026

    Hướng dẫn 7 cách kiểm tra CPU trên Linux chính xác và nhanh chóng
    Hướng dẫn 7 cách kiểm tra CPU trên Linux chính xác và nhanh chóng

    Trong môi trường quản trị Linux, việc kiểm tra tốc độ xung nhịp CPU là một thao tác cần thiết giúp người dùng đánh giá khả năng chịu tải, phát hiện các điểm nghẽn hiệu suất  và hỗ trợ tối ưu trong quá trình tối ưu hóa hoặc khắc phục sự cố phần cứng. Trong…

    27/02/2026

    Hướng dẫn xóa bộ nhớ Cache, bộ đệm và Swap trong Linux nhanh chóng, chi tiết
    Hướng dẫn xóa bộ nhớ Cache, bộ đệm và Swap trong Linux nhanh chóng, chi tiết

    Trong Linux, bộ nhớ cache là nơi lưu trữ tạm thời dữ liệu và các file đã truy cập gần đây để giảm thời gian truy xuất ở lần tiếp theo. Tuy nhiên, theo thời gian, bộ nhớ cache có thể chiếm dụng quá nhiều RAM, đặc biệt trên các máy chủ có uptime dài…

    27/02/2026

    linux

    lenh

    text