728x90
반응형
네트워크 프로그래밍과 통신에서 소켓(Socket), 포트(Port), 커넥션(Connection)이라는 용어를 자주 접하게 됩니다. 이들은 네트워크에서 데이터를 주고받는 핵심 개념이지만 종종 혼용되거나 잘못 이해되곤 합니다. 이번 글에서는 각 용어의 정확한 정의와 개념, 그리고 이들이 네트워크 통신에서 어떻게 작동하는지 자세히 설명하겠습니다.
1. 소켓(Socket)
소켓은 네트워크에서 데이터를 송수신하기 위한 통신의 끝점(End Point)입니다. 소켓은 두 프로세스(클라이언트와 서버)가 네트워크를 통해 서로 통신하기 위해 사용됩니다.
소켓의 특징
- 통신의 끝점: 데이터를 송수신하기 위해 클라이언트와 서버가 각각 소켓을 생성합니다.
- IP 주소와 포트 번호: 소켓은 IP 주소와 포트 번호로 식별됩니다.
- 양방향 통신: 데이터를 보내고 받는 양방향 통신을 지원합니다.
소켓의 종류
- 스트림 소켓 (TCP 소켓): TCP 기반의 신뢰성 있는 연결형 소켓. (예: HTTP 통신)
- 데이터그램 소켓 (UDP 소켓): 비연결형 소켓으로 빠른 데이터 전송 지원. (예: 실시간 스트리밍)
- 로컬 소켓 (UNIX 소켓): 같은 시스템 내 프로세스 간 통신.
소켓의 기본 구조
소켓은 IP 주소와 포트 번호를 결합한 구조입니다.
소켓 = (IP 주소, 포트 번호)
예시: 127.0.0.1:8080
2. 포트(Port)
포트는 네트워크를 통해 통신하는 프로그램이나 프로세스를 식별하기 위한 논리적인 번호입니다.
포트의 특징
- 16비트 숫자: 0부터 65535까지의 숫자로 구성됩니다.
- 호스트 내 서비스 구분: 여러 애플리케이션이 동시에 실행될 수 있도록 각 애플리케이션에 고유 포트를 할당합니다.
- 송신 및 수신 구분: 클라이언트 포트는 임시 포트로 할당됩니다.
포트 번호의 범위
- 0 ~ 1023: Well-Known Ports (HTTP - 80, HTTPS - 443).
- 1024 ~ 49151: Registered Ports (예: MySQL - 3306).
- 49152 ~ 65535: Dynamic/Private Ports.
포트의 예시
- 웹 서버 (HTTP): IP: 192.168.0.1, 포트: 80
- 데이터베이스 서버 (MySQL): IP: 192.168.0.1, 포트: 3306
3. 커넥션(Connection)
커넥션은 네트워크 상에서 두 개의 소켓 간에 이루어지는 논리적인 연결입니다.
커넥션의 특징
- 양방향 통신: 데이터를 송신하고 수신할 수 있습니다.
- 연결형 프로토콜: TCP를 사용해 연결을 설정합니다.
- 상태 유지: 연결이 유지되는 동안 데이터를 안정적으로 송수신합니다.
커넥션의 예시 (TCP)
커넥션은 다음과 같은 단계로 동작합니다:
- 연결 설정: 3-Way Handshake (SYN → SYN-ACK → ACK)
- 데이터 송수신: 양쪽 소켓 간 데이터 교환.
- 연결 종료: 4-Way Handshake (FIN → ACK → FIN → ACK)
커넥션의 예시
웹 브라우저가 서버와 통신할 때:
- 클라이언트 소켓 (192.168.0.2:50001)이 서버 소켓 (192.168.0.1:80)에 연결 요청.
- 서버는 요청을 수락하고 커넥션이 설정됨.
- 데이터 송수신 후 연결 종료.
4. 소켓, 포트, 커넥션의 관계
이 세 가지 개념은 네트워크 통신에서 밀접하게 연결되어 있습니다.
- 소켓: IP 주소와 포트 번호로 이루어진 통신의 끝점.
- 포트: 호스트 내의 특정 애플리케이션을 식별하는 번호.
- 커넥션: 두 소켓 간의 논리적 연결.
예시:
클라이언트 소켓: 192.168.0.2:50001
서버 소켓: 192.168.0.1:80
→ 커넥션이 설정되고 데이터가 송수신됨.
5. 결론
소켓, 포트, 커넥션은 네트워크 통신의 핵심 요소입니다. 소켓은 통신의 끝점을 나타내며, 포트는 애플리케이션을 구분하는 번호이고, 커넥션은 두 소켓 간의 연결을 의미합니다. 이 개념을 정확히 이해하면 네트워크 프로그래밍과 서버-클라이언트 애플리케이션 개발에 큰 도움이 될 것입니다.
728x90
반응형
'Programming' 카테고리의 다른 글
쿠버네티스와 HPA(수평 포드 자동 확장)에 대한 이해 (1) | 2024.12.20 |
---|---|
Keycloak: 통합 인증과 접근 관리를 위한 강력한 솔루션 (0) | 2024.12.19 |
Emotion: 스타일링을 위한 강력한 CSS-in-JS 라이브러리 (1) | 2024.12.17 |
Turborepo: 모노레포 관리를 위한 강력한 도구 (1) | 2024.12.14 |
REST API와 GraphQL: 개념, 차이점, 선택 기준 (1) | 2024.12.12 |