๊ฐœ๋ฐœ๋…ธํŠธ/Linux

[Linux] ss / netstat — ํฌํŠธ·์†Œ์ผ“ ๋ถ„์„ ์™„์ „ ์ •๋ณต ๐ŸŒ

๋กœ๋กœ๋ฝœ 2025. 11. 24. 07:30

์„œ๋ฒ„๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋А๋ ค์ง€๊ฑฐ๋‚˜ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํŠธ๋ฅผ ์žก๊ณ  ์žˆ์„ ๋•Œ,
๋˜๋Š” “์ง€๊ธˆ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋ถ™์–ด ์žˆ๋Š”์ง€” ํ™•์ธํ•ด์•ผ ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ฌ๋ ค์•ผ ํ•  ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ ss(Socket Statistics) ์ž…๋‹ˆ๋‹ค.

์˜ˆ์ „์—๋Š” ๋Œ€๋ถ€๋ถ„ netstat์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ,
์ง€๊ธˆ์˜ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ(iproute2 ๊ธฐ๋ฐ˜)์—์„œ๋Š” ss๊ฐ€ ๋” ๋น ๋ฅด๊ณ , ๋” ์ •ํ™•ํ•˜๊ณ , ๋” ํ‘œ์ค€์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ss์˜ ํ•ต์‹ฌ ์˜ต์…˜๋ถ€ํ„ฐ ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์“ฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ํŒจํ„ด๊นŒ์ง€
์ดˆ๋ณด์ž๋„ ๋ฐ”๋กœ ๋”ฐ๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.


1. ss๊ฐ€ netstat๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ์ด์œ 

Linux Network Tools ๋น„๊ต ๋‹ค์ด์–ด๊ทธ๋žจ. netstat์™€ ss์˜ ํŒจํ‚ค์ง€, ๋™์ž‘ ๋ฐฉ์‹, ์†๋„ ์ฐจ์ด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋น„๊ตํ•œ ์ด๋ฏธ์ง€๋กœ, netstat๋Š” deprecated์ด๋ฉฐ /proc ์Šค์บ” ๊ธฐ๋ฐ˜์ด๊ณ  ๋А๋ฆฐ ๋ฐ˜๋ฉด ss๋Š” iproute2 ๊ธฐ๋ฐ˜์œผ๋กœ Netlink API๋ฅผ ํ†ตํ•ด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์‘๋‹ตํ•˜๋Š” ํŠน์ง•์„ ๋ณด์—ฌ์คŒ.
netstat vs ss ๋ฆฌ๋ˆ…์Šค ๋„คํŠธ์›Œํฌ ์ƒํƒœ ํ™•์ธ ๋„๊ตฌ ๋น„๊ต ๋‹ค์ด์–ด๊ทธ๋žจ

์˜ˆ์ „ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋Š” net-tools ํŒจํ‚ค์ง€์˜ netstat ๋ช…๋ น์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ modern Linux ๋Œ€๋ถ€๋ถ„์€ iproute2 ๊ธฐ๋ฐ˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ
์—ฌ๊ธฐ์—๋Š” ๋” ๋น ๋ฅธ ๋„คํŠธ์›Œํฌ ๋ถ„์„ ๋„๊ตฌ ss(Socket Statistics) ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๊ตํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


ํ•ญ๋ชฉ ss netstat
์†๋„ ๋งค์šฐ ๋น ๋ฆ„ ๋А๋ฆผ
์ •ํ™•๋„ ์ตœ์‹  ์ปค๋„ ๊ธฐ๋ฐ˜ ์ •๋ณด ์ œํ•œ ์žˆ์Œ
์ง€์› ์—ฌ๋ถ€ ์ตœ์‹  ์‹œ์Šคํ…œ ํ‘œ์ค€ deprecated(๊ฑฐ์˜ ์‚ฌ์šฉ X)
์„ค์น˜ ๊ธฐ๋ณธ ํฌํ•จ ๋”ฐ๋กœ ์„ค์น˜ ํ•„์š”

๐Ÿ’ก ์ง€๊ธˆ์€ ss๋ฅผ ๊ธฐ๋ณธ, netstat๋Š” ๋ณด์กฐ ๋„๊ตฌ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


2. ss ๋ช…๋ น์–ด ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” 4๊ฐ€์ง€

๋ฆฌ๋ˆ…์Šค ss -tulpn ๋ช…๋ น์–ด ๊ฒฐ๊ณผ ํ™”๋ฉด. TCP์™€ UDP ์†Œ์ผ“์˜ ์ƒํƒœ(UNCONN, LISTEN), Recv-Q์™€ Send-Q ๊ฐ’, Local Address์™€ Port, Peer Address ์ •๋ณด๊ฐ€ ์—ด ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋œ ์˜ˆ์‹œ ์ถœ๋ ฅ.
ss -tulpn ๋ช…๋ น์–ด๋กœ ์—ด๋ฆฐ ํฌํŠธ์™€ ์†Œ์ผ“ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ์‹ค์ œ ์ถœ๋ ฅ ์˜ˆ์‹œ

1) ์ „์ฒด TCP ์—ฐ๊ฒฐ ๋ณด๊ธฐ

ss -t
 

2) LISTEN ์ƒํƒœ(์—ด๋ฆฐ ํฌํŠธ) ๋ณด๊ธฐ

ss -tulpn
 

์˜ต์…˜ ์„ค๋ช…:

์˜ต์…˜ ์˜๋ฏธ
-t TCP
-u UDP
-l LISTEN ์ƒํƒœ๋งŒ
-p ํ”„๋กœ์„ธ์Šค ์ •๋ณด(PID) ํ‘œ์‹œ
-n ํฌํŠธ๋ฒˆํ˜ธ ์ˆซ์ž๋กœ ํ‘œ์‹œ

์ฆ‰,

ss -tulpn
 

์ด ์กฐํ•ฉ ํ•˜๋‚˜๋กœ ์—ด๋ฆฐ ํฌํŠธ + ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ  ์ค‘์ธ์ง€ ํ•œ ๋ฒˆ์— ํ™•์ธ ๊ฐ€๋Šฅ.

3) ํŠน์ • ํฌํŠธ๋ฅผ ๋ˆ„๊ฐ€ ์“ฐ๋Š”์ง€ ํ™•์ธ

์˜ˆ: 80๋ฒˆ ํฌํŠธ๋ฅผ ๋ˆ„๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ์ง€

ss -tulpn | grep :80
 

์ถœ๋ ฅ ์˜ˆ:

tcp   LISTEN  0  128  0.0.0.0:80   0.0.0.0:*   users:(("nginx",pid=1234,fd=6))
 

→ nginx(PID 1234)๊ฐ€ 80๋ฒˆ ํฌํŠธ ์ ์œ  ์ค‘

4) ํ˜„์žฌ ์ ‘์†์ž(ESTABLISHED) ํ™•์ธ

ss -ta
 

ํŠน์ • IP๋งŒ ๋ณด๋ ค๋ฉด:

ss -ta | grep 192.168.0.10
 

 

3. ๊ฐœ๋ฐœ์ž·์šด์˜์ž๊ฐ€ ์‹ค์ œ๋กœ ์ž์ฃผ ๊ฒช๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‹ค๋ฌด ์˜ˆ์ œ 

๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„์—์„œ ํฌํŠธ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ. Process A๊ฐ€ ์ด๋ฏธ PORT 8080์„ ์ ์œ ํ•ด LISTEN ์ค‘์ด๋ฉฐ, ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋ ค๋Š” Process B๊ฐ€ ๋™์ผ ํฌํŠธ๋ฅผ ์—ด์ง€ ๋ชปํ•ด OS Kernel์ด "Address already in use" ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ƒํ™ฉ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ์ด๋ฏธ์ง€.
ํฌํŠธ ์ถฉ๋Œ ๋ฐœ์ƒ ์›๋ฆฌ : "Address already in use" ์˜ค๋ฅ˜ ์‹œ๋‚˜๋ฆฌ์˜ค ๋‹ค์ด์–ด๊ทธ๋žจ

์—ฌ๊ธฐ๋ถ€ํ„ฐ๋Š” ์‹ค์ œ๋กœ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ํŒจํ„ด๋“ค์ž…๋‹ˆ๋‹ค.
์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น๋งŒ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ 1) “ํฌํŠธ ์ถฉ๋Œ” ๋•Œ๋ฌธ์— ์„œ๋ฒ„๊ฐ€ ์•ˆ ๋œจ๋Š” ๊ฒฝ์šฐ

์›น์„œ๋ฒ„๊ฐ€ 80 ํฌํŠธ๋ฅผ ์—ด๋ ค๊ณ  ํ•  ๋•Œ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

bind() failed: Address already in use
 

๋ฌธ์ œ ํ•ด๊ฒฐ:

ss -tulpn | grep :80
 

์ถœ๋ ฅ ์˜ˆ:

tcp LISTEN 0 128 0.0.0.0:80 users:(("python3",pid=2010,fd=8))
 

→ python3 ์„œ๋ฒ„๊ฐ€ 80๋ฒˆ ํฌํŠธ๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘
→ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์„ค์ • ๋ณ€๊ฒฝ ํ•„์š”

์˜ˆ์ œ 2) ํŠน์ • ์„œ๋น„์Šค์— ์ ‘์†์ž๊ฐ€ ์‹ค์ œ๋กœ ์žˆ๋Š”์ง€ ํ™•์ธ

์˜ˆ) Nginx์— ์ ‘์†ํ•œ ํด๋ผ์ด์–ธํŠธ ํ™•์ธ

ss -tan | grep :443
 

ESTABLISHED ์ƒํƒœ์˜ ์—ฐ๊ฒฐ๋งŒ ๋ณด๊ธฐ:

ss -tan state established | grep :443
 

์˜ˆ์ œ 3) CLOSE_WAIT, TIME_WAIT ์ƒํƒœ ๋ถ„์„

์„œ๋น„์Šค๊ฐ€ ๋น„์ •์ƒ์ ์ด๊ฑฐ๋‚˜
์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

CLOSE_WAIT

ss -tan | grep CLOSE-WAIT
 

→ ์„œ๋ฒ„ ์ชฝ ์ฝ”๋“œ๊ฐ€ ์†Œ์ผ“์„ ์ œ๋Œ€๋กœ close() ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์˜๋ฏธ

TIME_WAIT

ss -tan | grep TIME-WAIT
 

→ ์„œ๋ฒ„๊ฐ€ ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑ/ํ•ด์ œํ•˜๋Š” ์ƒํ™ฉ์—์„œ ํ”ํ•จ

TIME_WAIT์ด ์ˆ˜์ฒœ ๊ฐœ ์Œ“์ด๋ฉด
๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๋‚˜ ์›น์„œ๋ฒ„ ์„ค์ • ๋ฌธ์ œ ๊ฐ€๋Šฅ

์˜ˆ์ œ 4) UDP ํฌํŠธ ์‚ฌ์šฉ ์ค‘์ธ ์„œ๋ฒ„ ํ™•์ธ

ss -ulpn
 

์˜ˆ: DNS(53) ํฌํŠธ ํ™•์ธ

ss -ulpn | grep :53
 

์˜ˆ์ œ 5) ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์†Œ์ผ“๋งŒ ๋ณด๊ธฐ

์˜ˆ: PID 1234๊ฐ€ ์–ด๋–ค ์†Œ์ผ“์„ ์‚ฌ์šฉ ์ค‘์ธ์ง€

ss -p | grep 1234
 

4. netstat๋„ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ์ด์œ  (๋ณด์กฐ์šฉ)

๋ฆฌ๋ˆ…์Šค netstat -tulpn ๋ช…๋ น์–ด ์ถœ๋ ฅ ์˜ˆ์‹œ ํ™”๋ฉด. TCP์™€ UDP์˜ LISTEN ์ƒํƒœ ํฌํŠธ ๋ชฉ๋ก์ด ํ‘œ์‹œ๋˜๋ฉฐ, ๋กœ์ปฌ ์ฃผ์†Œ·ํฌํŠธ, ์™ธ๋ถ€ ์ฃผ์†Œ, ์—ฐ๊ฒฐ ์ƒํƒœ, PID/ํ”„๋กœ๊ทธ๋žจ ์ •๋ณด๊ฐ€ ์—ด ํ˜•ํƒœ๋กœ ์ •๋ฆฌ๋œ ๋ชจ์Šต.
netstat -tulpn ๋ช…๋ น์–ด๋กœ ์—ด๋ฆฐ ํฌํŠธ์™€ ์„œ๋น„์Šค ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ์ถœ๋ ฅ ์˜ˆ์‹œ

netstat๋Š” ์ง€๊ธˆ์€ ์ฃผ๋กœ ๋ณด์กฐ ๋„๊ตฌ์ง€๋งŒ
์—ฌ์ „ํžˆ ์ผ๋ถ€ ๋””๋ฒ„๊น…์—์„œ ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ) LISTEN ํฌํŠธ๋งŒ ๋ณด๊ธฐ:

netstat -tulpn
 

์˜ˆ) ์ „์ฒด ์—ฐ๊ฒฐ ๋ณด๊ธฐ

netstat -an
 

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์ •๋ณด๋Š” ss๊ฐ€ ๋” ์ž์„ธํžˆ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.


5. ss + ps + grep ์กฐํ•ฉ 

ss, ps, grep ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ํฌํŠธ ์ถฉ๋Œ(Address already in use) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•œ ํ๋ฆ„๋„. ss -tulpn์œผ๋กœ PID๋ฅผ ์ฐพ๊ณ , ps๋กœ ํ”„๋กœ์„ธ์Šค ์ •๋ณด๋ฅผ ํ™•์ธํ•œ ๋’ค ํ•„์š” ์‹œ kill๋กœ ์ข…๋ฃŒํ•˜๋Š” ๋ฃจํ‹ด๊ณผ, PID๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋ฐฉํ™”๋ฒฝ·์„ค์ • ํŒŒ์ผ·TIME_WAIT ์ƒํƒœ ๋“ฑ ์ถ”๊ฐ€ ์›์ธ์„ ์ ๊ฒ€ํ•˜๋„๋ก ์•ˆ๋‚ดํ•˜๋Š” ๊ตฌ์กฐ.
ss + ps + grep์„ ํ™œ์šฉํ•œ ํฌํŠธ ์ถฉ๋Œ ๋ฐ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ ํ•ด๊ฒฐ ํ๋ฆ„๋„

โœ” ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ํฌํŠธ๋ฅผ ์žก๋Š”์ง€ ๋ฐ”๋กœ ํ™•์ธ

ss -tulpn | grep LISTEN
 

โœ” web server๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋А๋ฆด ๋•Œ

  • ์—ฐ๊ฒฐ ์ƒํƒœ ๋จผ์ € ํ™•์ธ
ss -tan | grep :443
 
  • CPU ์‚ฌ์šฉ๋ฅ  ํ™•์ธ
ps aux --sort=-%cpu | head
 

โœ” ํฌํŠธ ์ ์œ ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ

ss -tulpn | grep :8080
 

์ถœ๋ ฅ์—์„œ PID ํ™•์ธ ํ›„:

kill -9 PID
 

6. ๋งˆ๋ฌด๋ฆฌ — ss๋Š” ๋‹จ์ˆœํ•œ ํฌํŠธ ํ™•์ธ ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋‹ค

ss๋Š” ๋‹จ์ˆœํžˆ “์—ด๋ฆฐ ํฌํŠธ ํ™•์ธ” ์ˆ˜์ค€์˜ ๋ช…๋ น์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
๋ฆฌ๋ˆ…์Šค ๋„คํŠธ์›Œํฌ ์ปค๋„ฅ์…˜์˜ ์ „์ฒด ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ง„๋‹จํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

  • ์–ด๋–ค ํฌํŠธ๊ฐ€ ์—ด๋ ค์žˆ๋Š”์ง€
  • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ํฌํŠธ๋ฅผ ์ ์œ ํ•˜๋Š”์ง€
  • ์ ‘์†์ž๊ฐ€ ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ ์ค‘์ธ์ง€
  • CLOSE_WAIT, TIME_WAIT ๊ฐ™์€ ๋น„์ •์ƒ ์ƒํƒœ
  • UDP/TCP ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๋ถ„์„

์ด ๋ชจ๋“  ์ž‘์—…์„ ss ํ•˜๋‚˜๋กœ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด,
ss๋Š” ๋„คํŠธ์›Œํฌ์˜ ํ˜„์žฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ง„๋‹จ ๋„๊ตฌ์ด๋ฉฐ,
์„œ๋ฒ„·์ž„๋ฒ ๋””๋“œ·๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ๋ชจ๋‘๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ตํ˜€์•ผ ํ•  ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.