📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 55편
이전 글: 54. Registered Port · 다음 글: 56. Source Port
Dynamic Port는 49152~65535번 구간으로, IANA 명칭은 Dynamic Ports(또는 Private/Ephemeral Ports)입니다. IANA는 이 구간을 어떤 서비스에도 할당하지 않습니다. 누구든 필요할 때 잠깐 빌려 쓰는 번호라는 뜻입니다.
가장 대표적인 용도는 클라이언트가 연결할 때 운영체제가 자동으로 고르는 임시(Ephemeral) 포트입니다. OS별 기본 범위 표는 51. 포트 번호 체계 — Well-known·Registered·임시 포트에서 다뤘으므로, 이 글은 임시 포트가 선택·사용·반환되는 과정과 이 구간을 서비스가 LISTEN하는 경우에 집중합니다.
| 용어 | 뜻 | 비고 |
|---|---|---|
| Dynamic Port | IANA 구간 이름 (49152~65535) | 번호 구간의 정의 |
| Ephemeral Port | OS가 연결마다 자동 선택하는 출발지 포트 | 실제 범위는 OS 설정 (Linux 기본 32768~60999) |
| 동적 서비스 포트 | 서비스가 실행 중에 정해 알려 주는 포트 | MS RPC, FTP Passive, Linux RPC 서비스 등 |
즉, "Dynamic Port 구간"과 "임시 포트 범위"는 같은 말이 아닙니다. Windows(Vista 이후)는 두 범위가 일치하지만 Linux는 기본 범위가 더 넓게 앞쪽으로 걸쳐 있습니다(54. Registered Port 참고).
임시 포트 하나의 생애는 다음과 같습니다.
① 애플리케이션: connect(서버 IP, 서버 포트) — 출발지 포트는 지정하지 않음
↓
② 커널: 임시 포트 범위에서 후보 선택
(무작위성을 섞은 방식 — RFC 6056 권고, 구현은 OS·버전마다 다름)
↓
③ 같은 4-tuple(출발지 IP·포트, 목적지 IP·포트)이 이미 쓰이는가? → 쓰이면 다음 후보
ip_local_reserved_ports에 있는가? → 있으면 건너뜀
↓
④ 연결 사용 (ESTABLISHED)
↓
⑤ 종료: 먼저 닫은 쪽은 TIME_WAIT로 일정 시간 해당 4-tuple 보류
↓
⑥ 보류가 끝나면 번호 반환 → 다른 연결이 재사용 가능
Cannot assign requested address)로 나타납니다.임시 포트 외에, 서비스가 동적 포트를 LISTEN하는 경우도 있습니다. 관제에서 고번호 LISTEN을 무조건 의심하면 안 되는 이유입니다.
| 서비스 | 동작 | 방화벽·관제 영향 |
|---|---|---|
| Windows RPC (DCOM, WMI 등) | 135/TCP 엔드포인트 매퍼에 물어 실제 서비스 포트(기본 49152~65535 중 하나)를 받아 접속 | 135 다음에 고번호 포트 연결이 이어짐 (86. 내부망 주요 Port) |
| FTP Passive | 서버가 227/229 응답으로 데이터 포트를 알려 줌 | 서버에 Passive 포트 범위 허용 필요 (63. FTP Active·Passive 모드와 보안) |
| Linux RPC (NFSv3의 mountd 등) | 111/rpcbind에 등록된 포트로 접속 | 고정 포트로 설정하지 않으면 매번 바뀜 (74. NFS) |
| 미디어·게임·P2P | 협상된 고번호 UDP 포트 사용 | 업무망 정책에 따라 판단 |
임시 포트의 관찰 패턴도 정리합니다.
| 관찰 | 정상 해석 | 검토가 필요한 경우 |
|---|---|---|
| 출발지 포트가 연결마다 다른 고번호 | 일반 클라이언트 | — |
| 출발지 포트가 1씩 규칙적으로 증가 | 일부 구형 OS·장비, NAT 장비의 변환 방식 | 일반 PC인데 짧은 시간 수많은 목적지로 증가 패턴 |
| 출발지 포트가 계속 같은 번호 | 고정 출발지 포트 프로토콜(NTP 등) | TCP 연결 시도인데 같은 출발지 포트로 여러 목적지 접근 (도구 생성 패킷 가능성) |
| TIME_WAIT 수천 개 | 부하가 큰 프록시·API 서버 | 평소 없던 서버에서 급증 |
실습 예시 — 본인 소유 VM에서 임시 포트 범위와 사용 현황을 확인합니다.
# Linux (Rocky/Ubuntu 공통)
sysctl net.ipv4.ip_local_port_range
ss -tan state time-wait | wc -l # TIME_WAIT 개수
ss -tan state established | head # Local 쪽 고번호 = 임시 포트
# Windows (관리자 권한 명령 프롬프트 또는 PowerShell)
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
Get-NetTCPConnection -State TimeWait | Measure-Object
netsh 출력 형식 예시(값은 환경마다 다름):
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 49152
Number of Ports : 16384
Windows RPC가 135 이후 동적 포트로 이어지는 모습은 방화벽 로그에서 다음처럼 보일 수 있습니다(형식 예시, 값은 환경마다 다름).
10.0.20.15:50110 → 10.0.10.5:135 TCP allow (엔드포인트 매퍼 질의)
10.0.20.15:50111 → 10.0.10.5:49670 TCP allow (안내받은 동적 포트로 접속)
| 흔적 위치 | 확인할 수 있는 것 |
|---|---|
| 방화벽 로그 | 출발지 포트 분포, 135 → 동적 포트 연계, 외부 → 내부 고번호 포트 시도 |
| NAT 장비 로그 | 변환 전·후 출발지 포트 (내부 호스트 역추적에 필요) |
서버 ss/EDR | 고번호 LISTEN 프로세스, TIME_WAIT 급증 |
| 패킷 캡처 | 출발지 포트의 변화 패턴(무작위·순차·고정) |
관제자가 확인할 질문
오탐 주의: Windows 서버 간 RPC 통신은 매번 다른 고번호 포트를 쓰므로, "알 수 없는 고번호 포트 연결"로 오인하기 쉽습니다. 직전의 135 연결 여부를 함께 봅니다. NAT의 포트 변환은 01. TCP/IP 구조 이해 영역 49. 사설 IP · 공인 IP와 NAT — 로그의 IP가 서로 다른 이유에서 다룹니다.