gyumin.log

포트와 소켓

🌿 자라는 중

목차

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 주소 = 어느 컴퓨터로 갈지
  • 포트 = 그 컴퓨터 안의 어느 프로그램에게 줄지

건물 주소와 호수

포트는 서버 건물의 호수 하나의 IP를 가진 서버 안에 포트 번호별로 다른 프로그램이 살고 있고, 내 컴퓨터가 임시 포트에서 443번 포트로 연결하는 그림 서버 건물 - IP 223.130.200.107 :80호 - 웹 (HTTP) :443호 - 웹 보안 (HTTPS) :25호 - 메일 (SMTP) :53호 - 이름 안내 (DNS) 내 컴퓨터 임시 포트 51234로 나감 IP는 건물 주소, 포트는 호수 - 둘을 합친 IP:포트가 완전한 주소(소켓)다

번호가 정해지는 규칙은 딱 두 가지다.

1. 서버(가게)는 번호가 정해져 있다. 손님이 찾아와야 하니까 - 가게가 매일 이사 다니면 아무도 못 찾는다. 그래서 전 세계가 약속해 뒀다:

포트누가 사는가
80웹 (HTTP)
443보안 웹 (HTTPS)
53DNS
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/21FTP (데이터/제어)80HTTP
22SSH110POP3
23Telnet143IMAP
25SMTP443HTTPS
53DNS161SNMP
67/68DHCP3389RDP
  • 함정 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:포트)이 완전한 주소다. 서버는 약속된 호수에서 기다리고, 손님은 임시 호수를 빌려 나간다.