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

2024. 12. 18. 21:32·Programming
반응형

 

네트워크 프로그래밍과 통신에서 소켓(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이야기
    이프로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (161) N
      • Programming (111)
        • C# WPF (11)
        • Java Spring (16)
        • JavaScript & TypeScript (5)
        • Git (9)
        • Database (5)
        • Etc (42)
      • 생활상식 (24)
      • 리뷰 (8)
      • 주식 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

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

    티스토리툴바