소켓, 포트, 커넥션: 네트워크 통신의 핵심 개념 정리

2024. 12. 18. 21:32·Programming
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)

커넥션은 다음과 같은 단계로 동작합니다:

  1. 연결 설정: 3-Way Handshake (SYN → SYN-ACK → ACK)
  2. 데이터 송수신: 양쪽 소켓 간 데이터 교환.
  3. 연결 종료: 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(수평 포드 자동 확장)에 대한 이해  (3) 2024.12.20
Keycloak: 통합 인증과 접근 관리를 위한 강력한 솔루션  (0) 2024.12.19
Emotion: 스타일링을 위한 강력한 CSS-in-JS 라이브러리  (1) 2024.12.17
Turborepo: 모노레포 관리를 위한 강력한 도구  (2) 2024.12.14
REST API와 GraphQL: 개념, 차이점, 선택 기준  (1) 2024.12.12
'Programming' 카테고리의 다른 글
  • 쿠버네티스와 HPA(수평 포드 자동 확장)에 대한 이해
  • Keycloak: 통합 인증과 접근 관리를 위한 강력한 솔루션
  • Emotion: 스타일링을 위한 강력한 CSS-in-JS 라이브러리
  • Turborepo: 모노레포 관리를 위한 강력한 도구
이프로그
이프로그
리뷰, 개발, 일상을 기록하는 블로그
    반응형
  • 이프로그
    이프로그의 IT이야기
    이프로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • Programming (111)
        • C# WPF (11)
        • Java Spring (16)
        • JavaScript & TypeScript (5)
        • Git (9)
        • Database (5)
        • Etc (42)
      • 생활상식 (24)
      • 리뷰 (8)
      • 주식 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      투자전략
      DevOps
      자바스크립트 트릭
      Java
      docker
      주식투자
      C# WPF
      rest api
      마이크로서비스
      javascript
      이슈 트래킹
      Apache Kafka
      투자
      분산 메시징 시스템
      클라우드 네이티브
      WPF
      웹 개발
      XAML
      데이터 바인딩
      java8
      dynamicresource
      클라우드 컴퓨팅
      소프트웨어 개발
      데이터 파이프라인
      Kubernetes
      ES6
      서버 관리
      재테크
      데이터베이스 성능
      협업 도구
    • 최근 댓글

    • 최근 글

    • 250x250
    이프로그
    소켓, 포트, 커넥션: 네트워크 통신의 핵심 개념 정리
    상단으로

    티스토리툴바