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))
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
웹 서버: 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이 연결될 수 있습니다.
하나의 포트(예: 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); // 서버에 연결
// 서버 측
ServerSocket serverSocket = new ServerSocket(8080); // 8080 포트 열기
Socket clientSocket = serverSocket.accept(); // 클라이언트 연결 기다림
// 클라이언트 측
Socket socket = new Socket("127.0.0.1", 8080); // 서버에 연결
요약: 핵심 차이점
| Socket | Port | |
|---|---|---|
| 목적 | 통신 채널 생성 | 서비스 식별 |
| 범위 | 전체 연결 관리 | 특정 서비스 지정 |
| 생명주기 | 연결 동안 유지 | 서비스 실행 중 계속 열림 |

'프로그래머로의 여정' 카테고리의 다른 글
| DOM에서 노드(Node), 객체(Object), 요소(Element)의 개념 (0) | 2025.06.08 |
|---|---|
| DOM(Document Object Model) 메서드 (0) | 2025.06.08 |
| SQLyog vs MySQL Workbench (0) | 2025.05.28 |
| CDN (Content Delivery Network) (0) | 2025.05.27 |
| GitHub 저장소 내비게이션 바 (0) | 2025.05.27 |