프로그래밍/소켓 프로그래밍 입문

소켓의 본질: 소켓은 파일이다.

데일리 백수 2025. 1. 7. 22:37

소켓(Socket)은 네트워크 프로그래밍에서 중요한 개념이지만, 본질적으로 소켓은 파일입니다. 이 관점에서 소켓의 작동 원리와 프로그래밍 방식을 이해하면 소켓을 더 직관적으로 다룰 수 있습니다. 아래에서 소켓의 본질과 그 작동 방식을 정리합니다.

 

1. 소켓과 파일의 관계

  • 소켓은 파일이다.
    • 파일은 운영체제의 커널 영역에 존재하는 요소로, 추상화된 인터페이스를 제공합니다.
    • 소켓은 파일 중에서도 프로토콜 스택의 추상화된 인터페이스를 의미합니다.
      • 예: TCP, UDP 같은 프로토콜에 대한 파일.
  • 파일과 소켓의 공통점:
    • 프로세스는 파일과 소켓 모두에 대해 다음과 같은 작업을 수행할 수 있습니다:
      • 열기(Open)
      • 쓰기(Write)
      • 읽기(Read)
      • 닫기(Close)
    • 파일에 데이터를 쓰면 디스크에 저장되듯, 소켓에 데이터를 쓰면 네트워크를 통해 전송됩니다.

2. 파일 관점에서 본 소켓의 작동 원리

일반 파일의 동작

  • C 언어의 fopen:
    • 파일을 열면 파일 포인터가 반환됩니다. 이는 파일 구조체에 대한 포인터입니다.
    • 이 파일 포인터를 통해 데이터를 읽기(Read) 또는 쓰기(Write)할 수 있습니다.
    • 예: 장치 파일을 열고 쓰기 작업을 수행하면 콘솔 출력 장치로 출력이 나감.

소켓의 동작

  • 소켓도 파일과 동일한 방식으로 작동합니다.
    • 소켓에 쓰기(Write)를 하면 데이터가 send를 통해 네트워크로 전송.
    • 소켓에 읽기(Read)**를 하면 데이터가 receive를 통해 네트워크에서 읽힘.
    • 소켓은 TCP/UDP 프로토콜의 특성을 추상화한 파일입니다.

3. 유저 모드와 커널 모드의 데이터 흐름

  • 유저 모드:
    • 소켓은 스트림(Stream) 기반의 데이터 전송을 제공합니다.
    • 스트림은 연속된 데이터의 흐름으로, 파일의 쓰기(Write) 작업은 네트워크 상에서 스트림 전송을 의미합니다.
  • 커널 모드:
    • 데이터가 네트워크로 전송되기 위해 세분화됩니다.
      • L4 (전송 계층): 데이터를 일정 단위로 나눠 세그먼트(Segment) 생성.
      • L3 (네트워크 계층): 세그먼트를 네트워크에 유통 가능한 패킷(Packet) 형태로 변환.

. 소켓 프로그래밍의 본질

  • 소켓 프로그래밍은 소켓을 통해 TCP/UDP와 같은 프로토콜 스택에 데이터를 입출력하는 방법론을 배우는 것입니다.
  • 소켓이 파일이기 때문에 프로세스는 소켓에 대해 파일과 동일한 작업을 수행할 수 있습니다:
    • 열기(Create/Open)
    • 닫기(Close)
    • 쓰기(Send)
    • 읽기(Receive)

소켓과 스트림

  • 스트림은 연속된 데이터의 조각입니다.
    • 커널 모드에서 스트림은 세그먼트(Segment)로 나뉘며, 이는 다시 네트워크에서 패킷(Packet) 형태로 유통됩니다.