포트와 소켓
🌿 자라는 중
IP 주소로 컴퓨터까지는 찾아왔다. 그런데 그 컴퓨터 안에는 프로그램이 여러 개 돌고 있다 - 도착한 데이터를 누구에게 줄 것인가? 그걸 정하는 번호가 포트다.
- 포트 (Port): 한 컴퓨터 안에서 어느 프로그램에게 줄 데이터인지 구분하는 번호(0~65535). IP가 컴퓨터를 찾는 주소라면, 포트는 그 안의 프로그램을 찾는 번호
- 웰노운 포트 (Well-known Port): 서버 프로그램들이 쓰기로 전 세계가 약속한 번호(0~1023). 웹 80, 보안 웹 443, DNS 53, 메일 25, 원격 접속 22
- 임시 포트 (Ephemeral Port): 클라이언트가 답장 받을 용도로 OS에게 잠깐 빌리는 번호. 통신이 끝나면 반납한다
- 소켓 (Socket): IP와 포트를 붙여 쓴 완전한 주소 표기 -
223.130.200.107:443. 프로그램 입장에서 통신의 실제 끝점(endpoint)
유튜브와 카톡이 안 섞이는 이유
한 컴퓨터에서 유튜브를 보면서 카톡을 한다. 영상 데이터도, 메시지도 같은 컴퓨터(같은 IP)로 오는데 절대 섞이지 않는다. 도착하는 데이터마다 “이건 크롬 거(5678번)”, “이건 카톡 거(1234번)” 하는 번호표가 붙어 있기 때문이다. 그 번호표가 포트다.
- IP 주소 = 어느 컴퓨터로 갈지
- 포트 = 그 컴퓨터 안의 어느 프로그램에게 줄지
건물 주소와 호수
번호가 정해지는 규칙은 딱 두 가지다.
1. 서버(가게)는 번호가 정해져 있다. 손님이 찾아와야 하니까 - 가게가 매일 이사 다니면 아무도 못 찾는다. 그래서 전 세계가 약속해 뒀다:
| 포트 | 누가 사는가 |
|---|---|
| 80 | 웹 (HTTP) |
| 443 | 보안 웹 (HTTPS) |
| 53 | DNS |
| 25 | 메일 (SMTP) |
| 22 | 원격 접속 (SSH) |
2. 손님(내 컴퓨터)은 아무 빈 번호나 임시로 쓴다. 답장만 받으면 되니 번호가 뭐든 상관없다. 연결할 때 OS가 빈 번호를 빌려주고, 끝나면 반납한다.
브라우저에 https://naver.com을 칠 때 포트를 안 적어도 되는 이유 - HTTPS니까 443호라는 걸 브라우저가 이미 아는 것이다.
한 걸음 더: 연결의 지문
연결 하나는 소켓 쌍, 즉 (내 IP:내 포트) ↔ (상대 IP:상대 포트) 네 가지 조합으로 식별된다. 브라우저 탭 3개로 같은 네이버(같은 IP, 같은 443호)에 동시 접속해도 데이터가 안 섞이는 이유 - 각 탭이 서로 다른 임시 포트를 쓰므로 조합이 전부 달라서, TCP가 정확히 구분해 배달할 수 있다.
실무에서 포트가 등장하는 곳:
- 방화벽은 호수 단위로 문을 잠근다. “443호만 열고 나머지는 잠가” - 서버 보안의 기본이 “안 쓰는 포트 닫기”인 이유
- 포트 스캔: 공격자가 모든 호수를 두드려 보며 열린 방을 찾는 정찰. 보안 시리즈에서 다시 만날 용어
ss -tlnp(구버전은netstat): 지금 어떤 포트가 열려서 대기 중(LISTEN)이고 누구와 연결돼 있는지 보는 명령. 요즘 리눅스는 netstat이 구식이라ss를 쓴다 - 서버 하드닝에서 “열린 문”을 세는 도구가 바로 이것이다
정처기 포인트
정처기에서 포트는 전송 계층(L4) 개념으로 나온다. “TCP·UDP가 포트 번호로 프로그램(프로세스)을 구분한다”, 그리고 well-known 포트 번호 암기가 거의 매 회차 등장한다.
포트 3구간 - 범위를 묻는 문제가 나온다.
| 구간 | 범위 | 쓰임 |
|---|---|---|
| well-known (잘 알려진) | 0 ~ 1023 | 표준 서버 서비스 |
| registered (등록) | 1024 ~ 49151 | 특정 애플리케이션 |
| dynamic (동적·사설) | 49152 ~ 65535 | 임시 포트(클라이언트) |
외워둘 well-known 포트 - 짝을 바꿔치기하는 함정이 자주 나온다.
| 포트 | 서비스 | 포트 | 서비스 |
|---|---|---|---|
| 20/21 | FTP (데이터/제어) | 80 | HTTP |
| 22 | SSH | 110 | POP3 |
| 23 | Telnet | 143 | IMAP |
| 25 | SMTP | 443 | HTTPS |
| 53 | DNS | 161 | SNMP |
| 67/68 | DHCP | 3389 | RDP |
- 함정 1: SSH(22) ↔ Telnet(23)을 바꿔 낸다. 둘 다 원격 접속인데 SSH는 암호화, Telnet은 평문.
- 함정 2: HTTP(80) ↔ HTTPS(443).
- 함정 3: “포트는 몇 비트?” → 16비트라 0~65535.
한 줄: 포트는 L4 식별자, well-known 01023 · 등록 102449151 · 동적 49152~65535.
연결되는 것들
- 포트 번호는 TCP/UDP가 실어 나른다. L4 전송 계층이 하는 일이 정확히 이것 → TCP와 UDP 차이
- 웹이 80/443호를 쓰는 이유 → HTTP Request와 Response
- “DNS는 UDP 53번 포트를 쓴다” = “DNS 프로그램은 53번 창구에서 쪽지(UDP)로 질문을 받는다” - DNS 노트는 다음 차례
한 줄 요약: IP가 건물 주소라면 포트는 호수고, 소켓(IP:포트)이 완전한 주소다. 서버는 약속된 호수에서 기다리고, 손님은 임시 호수를 빌려 나간다.