소켓(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) 형태로 유통됩니다.
'프로그래밍 > 소켓 프로그래밍 입문' 카테고리의 다른 글
TCP 서버 소켓 프로그래밍에서 SOCKET 설정 (0) | 2025.01.08 |
---|---|
TCP 에코 서비스: 흐름과 동작 원리 (0) | 2025.01.08 |
TCP 상태 다이어그램과 상태전이 (0) | 2025.01.07 |
작업자 스레드 동기화 (0) | 2025.01.07 |
Win32 Thread에 관하여 (0) | 2025.01.07 |