Snow flake

[command] netstat, ss 명령어 본문

Programming/Linux

[command] netstat, ss 명령어

MAYSON 2026. 9. 22. 23:33
반응형

top으로 CPU/메모리 상태를 확인했다면, 네트워크 연결 상태를 확인할 때 사용하는 명령어가 netstat과 ss입니다. 특정 포트가 열려있는지, 어떤 프로세스가 어떤 포트를 쓰고 있는지, 외부와의 연결이 정상인지 확인할 때 자주 쓰입니다.

netstat이란

netstat은 Network Statistics의 약자로, 네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계 등을 보여주는 명령어입니다. 오래전부터 유닉스/리눅스 계열에서 표준으로 쓰여온 명령어입니다.

# 사용법
netstat [옵션]

# 현재 연결된 네트워크 상태 확인
netstat -a

# 결과 예시
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:1521            0.0.0.0:*               LISTEN
tcp        0      0 192.168.0.10:1521       192.168.0.20:54321      ESTABLISHED

Local Address는 현재 서버의 IP와 포트, Foreign Address는 접속해온 상대방의 IP와 포트, State는 연결 상태를 의미합니다. LISTEN은 해당 포트가 접속을 기다리고 있는 상태, ESTABLISHED는 실제로 연결이 맺어진 상태입니다.

netstat 주요 옵션

# -t : TCP 연결만 표시
netstat -t

# -u : UDP 연결만 표시
netstat -u

# -l : LISTEN 상태(접속 대기 중)인 포트만 표시
netstat -l

# -n : 호스트명 대신 IP, 서비스명 대신 포트 번호로 표시 (조회 속도 빠름)
netstat -n

# -p : 해당 포트를 사용 중인 프로세스명과 PID 함께 표시 (root 권한 필요)
netstat -p

# 자주 쓰는 조합: TCP, LISTEN 상태, 숫자로, 프로세스 정보까지
netstat -tlnp

netstat -tlnp는 "지금 이 서버에서 어떤 포트가 열려있고, 어떤 프로세스가 그 포트를 쓰고 있는지"를 한 번에 확인할 수 있어서 실무에서 정말 자주 쓰이는 조합입니다.

특정 포트/프로세스 확인하기

# 특정 포트가 열려있는지 확인 (grep과 조합)
netstat -tlnp | grep 1521

# 특정 프로세스 이름으로 걸려있는 연결 확인
netstat -p | grep tnslsnr

grep 글에서 다뤘던 패턴 그대로, netstat 결과가 길 때는 grep으로 원하는 포트나 프로세스만 걸러서 봅니다. Oracle 리스너(1521번 포트)가 정상적으로 떠있는지 확인할 때 자주 쓰는 방식입니다.

ss란

ss는 Socket Statistics의 약자로, netstat의 후속 명령어입니다. ss는 커널로부터 정보를 직접 가져오는 방식이라 더 빠르게 동작하고, 명령어 옵션 체계도 netstat과 거의 비슷하게 설계되어 있어 어렵지 않게 옮겨 쓸 수 있습니다.

# 사용법
ss [옵션]

# TCP, LISTEN 상태, 숫자로, 프로세스 정보까지 (netstat -tlnp와 동일한 결과)
ss -tlnp

# 결과 예시
State    Recv-Q   Send-Q     Local Address:Port     Peer Address:Port    Process
LISTEN   0        128        0.0.0.0:1521           0.0.0.0:*            users:(("tnslsnr",pid=2345,fd=10))

옵션 이름(-t, -l, -n, -p)이 netstat과 동일하게 대응되어서, netstat -tlnp에 익숙하다면 ss -tlnp도 거의 그대로 쓸 수 있습니다.

netstat과 ss, 언제 뭘 써야 할까

사실 netstat은 net-tools 패키지에 속한 명령어인데, 이 패키지는 오랫동안 유지보수가 거의 이뤄지지 않아 데비안은 2009년, 페도라는 2011년부터 기본 설치 목록에서 제외하기 시작했습니다. 반면 ss가 속한 iproute2 패키지는 커널 업데이트에 맞춰 계속 관리되고 있어서, 최신 배포판에서는 사실상 ss가 표준으로 자리잡았습니다. 그래서 최근 배포판일수록 netstat 자체가 기본 설치되어 있지 않은 경우가 늘고 있고, netstat: command not found가 뜨면 ss로 바로 대체해서 쓰면 됩니다. 반대로 아주 오래된 서버나 net-tools가 이미 설치된 환경이라면 netstat을 그대로 써도 무방합니다.

실무에서 자주 마주치는 상황

DB 리스너가 살아있는지, 외부 서버와의 연결이 잘 맺어지는지 확인해야 하는 상황을 예로 들어보겠습니다.

# 1단계: 리스너 포트가 정상적으로 LISTEN 상태인지 확인
ss -tlnp | grep 1521

# 2단계: 특정 원격 서버와의 연결이 실제로 맺어졌는지 확인
ss -tn | grep 192.168.0.20

# 3단계: 연결이 안 보이면 프로세스 자체가 떠있는지 확인 (ps 글에서 다룬 방식)
ps -ef | grep tnslsnr

# 4단계: 프로세스는 떠있는데 포트가 안 열려있다면 재기동
lsnrctl stop
lsnrctl start

# 5단계: 재기동 후 다시 확인
ss -tlnp | grep 1521

"프로세스는 떠있는데 접속이 안 된다"는 문제는 실무에서 자주 발생하는데, 이럴 때 ps로 프로세스 존재만 확인하고 끝내면 원인을 놓치기 쉽습니다. ss나 netstat으로 실제 포트가 열려서 접속을 받고 있는지까지 함께 확인하는 습관을 들이면, 네트워크 관련 장애 원인을 훨씬 빠르게 좁힐 수 있습니다.

반응형

'Programming > Linux' 카테고리의 다른 글

[command] iostat, vmstat 명령어  (0) 2026.09.25
[command] wc, head, tail 명령어  (0) 2026.09.23
[command] top 명령어  (0) 2026.09.21
[command] ln 명령어  (0) 2026.09.20
[command] awk, sed 명령어  (0) 2026.09.15
Comments