본문 바로가기
프로그래머로의 여정

Socket과 Port

by nunaaa 2025. 5. 28.

 

Socket과 Port의 차이점: 완벽 가이드

Socket (소켓)

네트워크 통신의 종착점(Endpoint)으로, 두 프로그램이 네트워크를 통해 데이터를 교환하기 위한 연결 채널입니다.

주요 특징

  • IP 주소 + Port 번호의 조합
  • 통신을 위한 양방향 연결 지점
  • 프로토콜(TCP/UDP)에 따라 유형이 결정됨
  • 애플리케이션 계층과 전송 계층 사이의 인터페이스

소켓 유형

  • 스트림 소켓: TCP 사용, 연결 지향적
  • 데이터그램 소켓: UDP 사용, 비연결 지향적
  • RAW 소켓: 저수준 패킷 직접 접근
// Python TCP 소켓 생성 예제
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8080))

Port (포트)

네트워크 서비스의 진입점으로, 0~65535의 숫자로 식별되는 논리적 단위입니다.

주요 특징

  • 16비트 숫자 (0~65535)
  • 하나의 IP 주소에서 여러 서비스를 구분
  • 특정 서비스에 표준 포트 번호가 할당됨 (Well-known ports)
  • 트랜스포트 계층(전송 계층)에서 사용

포트 범위

  • 0-1023: 잘 알려진 포트 (HTTP: 80, HTTPS: 443)
  • 1024-49151: 등록된 포트
  • 49152-65535: 동적/사설 포트
# 일반적인 포트 사용 예시
웹 서버: 80/tcp, 443/tcp
SSH: 22/tcp
DNS: 53/udp
MySQL: 3306/tcp

🏠 아파트 비유로 이해하기

IP 주소 = 아파트 단지 주소 (예: "서울시 강남구 테헤란로 123")

Port = 아파트 동호수 (예: "101동 202호")

Socket = 특정 집의 문 (출입구) + 내부 통신 시스템

→ 포트는 '위치'를 지정하고, 소켓은 실제 '통신 채널'을 의미

비교 항목 Socket Port
정의 네트워크 통신 종착점 서비스 진입점
구성 IP 주소 + Port + 프로토콜 숫자 (0-65535)
범위 고유한 통신 채널 특정 서비스 식별자
계층 애플리케이션 ↔ 전송 계층 인터페이스 전송 계층에서 사용
예시 192.168.1.1:8080 (TCP) 80 (HTTP), 22 (SSH)

Socket과 Port의 관계

Socket은 Port를 포함하는 더 넓은 개념입니다. 하나의 Port에 여러 Socket이 연결될 수 있습니다.

Socket과 Port 관계 다이어그램

하나의 포트(예: 80)에 여러 소켓 연결이 가능한 경우

Q: 웹 서버는 어떻게 하나의 포트(80)로 여러 클라이언트를 처리하나요?

A: 각 클라이언트 연결에 대해 고유한 소켓을 생성합니다. 클라이언트 IP+포트 조합이 다르기 때문에 구분 가능합니다.

Q: TCP와 UDP 소켓이 같은 포트를 공유할 수 있나요?

A: 예, 프로토콜이 다르면 같은 포트 번호를 사용할 수 있습니다 (예: 53/tcp와 53/udp).

기술적 구현 예시

// Java 소켓 프로그래밍 예제
// 서버 측
ServerSocket serverSocket = new ServerSocket(8080); // 8080 포트 열기
Socket clientSocket = serverSocket.accept(); // 클라이언트 연결 기다림

// 클라이언트 측
Socket socket = new Socket("127.0.0.1", 8080); // 서버에 연결

요약: 핵심 차이점

  Socket Port
목적 통신 채널 생성 서비스 식별
범위 전체 연결 관리 특정 서비스 지정
생명주기 연결 동안 유지 서비스 실행 중 계속 열림