같은 서버 IP 하나로 웹도 열고 SSH도 접속합니다. 어떻게 한 주소에서 여러 서비스가 섞이지 않을까요? 답은 포트 번호입니다. IP가 건물 주소라면 포트는 호실 번호로, 들어온 패킷을 어느 서비스에 넘길지 가립니다.
포트는 세 구간으로 나뉜다
포트는 0~65535까지 있고, 용도에 따라 세 구간으로 나뉩니다. 서비스가 듣는(listen) 포트는 보통 정해진 well-known 영역을 씁니다.
| 범위 | 이름 | 용도 |
|---|---|---|
| 0~1023 | well-known | 표준 서비스(HTTP·SSH 등), root 권한 필요 |
| 1024~49151 | registered | 등록된 앱(MySQL 3306 등) |
| 49152~65535 | dynamic | 클라이언트 임시 포트 |
클라이언트가 웹서버 443에 접속할 때, 자기 쪽은 dynamic 영역에서 임시 포트를 하나 빌려 씁니다. 그래서 "어디로 보낼지"는 well-known, "어디서 왔는지"는 dynamic인 경우가 많습니다.
외워둘 대표 포트
자주 만나는 well-known 포트는 외워두면 트러블슈팅이 빨라집니다.
| 포트 | 서비스 | 프로토콜 |
|---|---|---|
| 22 | SSH | TCP |
| 53 | DNS | UDP/TCP |
| 80 | HTTP | TCP |
| 443 | HTTPS | TCP |
| 3306 | MySQL | TCP |
| 6379 | Redis | TCP |
443이 안 열렸는데 사이트가 안 뜬다면 방화벽이나 웹서버를 의심하고, 22가 막혔으면 SSH 접속이 안 되는 식으로 포트만 봐도 원인이 좁혀집니다.
직접 확인하기
지금 서버가 어떤 포트를 듣고 있는지 ss로 봅니다.
로컬 터미널
ss -tlnp # TCP 리슨 포트 + 프로세스
OUTPUT
State Local Address:Port Process
LISTEN 0.0.0.0:22 sshd
LISTEN 0.0.0.0:443 nginx
LISTEN 127.0.0.1:3306 mysqld
22는 sshd, 443은 nginx가 듣고 있습니다. 3306이 127.0.0.1에만 묶인 점도 중요합니다. 외부가 아니라 같은 서버 안에서만 접근 가능하다는 뜻입니다. 특정 포트만 보려면 ss -tlnp | grep 443처럼 거르면 됩니다.
요점 정리
- 포트는 한 IP에서 여러 서비스를 가르는 호실 번호다.
- 0
1023 well-known, 102449151 registered, 그 위는 dynamic(임시). - 22(SSH)·80(HTTP)·443(HTTPS)·53(DNS)은 외워둘 것.
ss -tlnp로 어떤 프로세스가 어느 포트를 듣는지 확인한다.
포트·소켓·방화벽을 직접 열고 막아보며 익히는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.