์๋ฒ๊ฐ ๊ฐ์๊ธฐ ๋๋ ค์ง๊ฑฐ๋ ํน์ ์ ํ๋ฆฌ์ผ์ด์
์ด ํฌํธ๋ฅผ ์ก๊ณ ์์ ๋,
๋๋ “์ง๊ธ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋๋ก ๋ถ์ด ์๋์ง” ํ์ธํด์ผ ํ ๋ ๊ฐ์ฅ ๋จผ์ ๋ ์ฌ๋ ค์ผ ํ ๋ช
๋ น์ด๊ฐ ๋ฐ๋ก ss(Socket Statistics) ์
๋๋ค.
์์ ์๋ ๋๋ถ๋ถ netstat์ ์ฌ์ฉํ์ง๋ง,
์ง๊ธ์ ๋ฆฌ๋
์ค ํ๊ฒฝ(iproute2 ๊ธฐ๋ฐ)์์๋ ss๊ฐ ๋ ๋น ๋ฅด๊ณ , ๋ ์ ํํ๊ณ , ๋ ํ์ค์ ์ธ ๋๊ตฌ์
๋๋ค.
์ด ๊ธ์์๋ ss์ ํต์ฌ ์ต์
๋ถํฐ ์ค๋ฌด์์ ๋ฐ๋ก ์ฐ๋ ๋ฌธ์ ํด๊ฒฐ ํจํด๊น์ง
์ด๋ณด์๋ ๋ฐ๋ก ๋ฐ๋ผ ํ ์ ์๊ฒ ์ ๋ฆฌํ์ต๋๋ค.
1. ss๊ฐ netstat๋ณด๋ค ๋ ์ค์ํ ์ด์

์์ ์๋ฒ ํ๊ฒฝ์์๋ net-tools ํจํค์ง์ netstat ๋ช
๋ น์ ์ฌ์ฉํ์ต๋๋ค.
ํ์ง๋ง modern Linux ๋๋ถ๋ถ์ iproute2 ๊ธฐ๋ฐ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ
์ฌ๊ธฐ์๋ ๋ ๋น ๋ฅธ ๋คํธ์ํฌ ๋ถ์ ๋๊ตฌ ss(Socket Statistics) ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๋น๊ตํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ํญ๋ชฉ | ss | netstat |
| ์๋ | ๋งค์ฐ ๋น ๋ฆ | ๋๋ฆผ |
| ์ ํ๋ | ์ต์ ์ปค๋ ๊ธฐ๋ฐ | ์ ๋ณด ์ ํ ์์ |
| ์ง์ ์ฌ๋ถ | ์ต์ ์์คํ ํ์ค | deprecated(๊ฑฐ์ ์ฌ์ฉ X) |
| ์ค์น | ๊ธฐ๋ณธ ํฌํจ | ๋ฐ๋ก ์ค์น ํ์ |
๐ก ์ง๊ธ์ ss๋ฅผ ๊ธฐ๋ณธ, netstat๋ ๋ณด์กฐ ๋๊ตฌ๋ก ์ดํดํ๋ฉด ๋ฉ๋๋ค.
2. ss ๋ช ๋ น์ด ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ 4๊ฐ์ง

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. ๊ฐ๋ฐ์·์ด์์๊ฐ ์ค์ ๋ก ์์ฃผ ๊ฒช๋ ๋ฌธ์ ์ ๋ํ ์ค๋ฌด ์์

์ฌ๊ธฐ๋ถํฐ๋ ์ค์ ๋ก ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ์ ํด๊ฒฐ ํจํด๋ค์
๋๋ค.
์ค๋ฌด ํ๊ฒฝ์์ ๋ฐ๋ก ์ธ ์ ์๋ ๋ช
๋ น๋ง ๋ชจ์์ต๋๋ค.
์์ 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๋ ์ง๊ธ์ ์ฃผ๋ก ๋ณด์กฐ ๋๊ตฌ์ง๋ง
์ฌ์ ํ ์ผ๋ถ ๋๋ฒ๊น
์์ ๋น ๋ฅด๊ฒ ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
์) LISTEN ํฌํธ๋ง ๋ณด๊ธฐ:
netstat -tulpn
์) ์ ์ฒด ์ฐ๊ฒฐ ๋ณด๊ธฐ
netstat -an
ํ์ง๋ง ๋๋ถ๋ถ์ ์ ๋ณด๋ ss๊ฐ ๋ ์์ธํ ๋ณด์ฌ์ค๋๋ค.
5. 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๋ ๋คํธ์ํฌ์ ํ์ฌ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ง๋จ ๋๊ตฌ์ด๋ฉฐ,
์๋ฒ·์๋ฒ ๋๋·๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ชจ๋๊ฐ ๋ฐ๋์ ์ตํ์ผ ํ ๋ช ๋ น์ด์ ๋๋ค.