C++ Network Programming

열수철·2025년 2월 8일

C++ 네트워크 프로그래밍 1일차

네트워크 프로그래밍은 여러 컴퓨터 간의 통신을 통해 데이터를 주고받는 기술입니다. C++로 네트워크 프로그래밍을 시작하려면 기본 개념들을 탄탄히 다지는 것이 중요합니다. 이번 포스팅에서는 서버-클라이언트 구조, 소켓(Socket), 그리고 통신 프로토콜(TCP/UDP/IP) 등의 기초 내용을 정리해보겠습니다.


1. 네트워크 프로그래밍의 개요

네트워크 프로그래밍은 다양한 시스템 간의 데이터 통신을 구현하는 기술입니다. 이를 통해 웹 서비스, 파일 전송, 실시간 채팅, 온라인 게임 등 여러 분야에 응용할 수 있습니다.


2. 서버와 클라이언트 구조

네트워크 애플리케이션은 보통 서버-클라이언트 모델을 따릅니다.

  • 서버(Server)
    • 역할: 클라이언트의 요청을 받아들이고 처리하는 중앙 집중식 시스템.
    • 특징: 특정 포트에서 대기하며, 동시에 여러 클라이언트를 처리하기 위해 멀티스레드나 비동기 I/O를 사용.
  • 클라이언트(Client)
    • 역할: 서버에 접속하여 데이터를 요청하거나 전송하는 역할.
    • 특징: 서버의 응답을 받아 후속 작업을 수행.

서버-클라이언트 구조는 중앙에서 관리하는 방식으로 확장성과 유지보수가 용이합니다.


3. 소켓(Socket): 네트워크 통신의 핵심

소켓(Socket) 은 네트워크 상의 통신 끝점(endpoint) 으로, 데이터를 주고받기 위한 기본 단위입니다.

주요 소켓 함수 (BSD 소켓 API 기준)

  • socket(): 새로운 소켓을 생성합니다.
  • bind(): 소켓에 IP 주소와 포트 번호를 할당합니다.
  • listen(): 서버 소켓을 연결 요청 대기 상태로 전환합니다.
  • accept(): 클라이언트의 연결 요청을 받아 새로운 소켓을 반환합니다.
  • connect(): 클라이언트가 서버에 연결 요청을 보냅니다.
  • send() / recv(): 데이터 송수신에 사용됩니다.

소켓의 종류

  • 스트림 소켓 (Stream Socket)
    • TCP 기반, 연결 지향적이며 신뢰성 있는 데이터 전송을 지원합니다.
  • 데이터그램 소켓 (Datagram Socket)
    • UDP 기반, 비연결형으로 빠른 전송이 가능하지만 신뢰성은 낮을 수 있습니다.

4. 통신 프로토콜: IP, TCP, UDP

네트워크 통신은 여러 프로토콜을 기반으로 이루어집니다. 여기서 중요한 역할을 하는 것이 IP, TCP, UDP 입니다.

IP (Internet Protocol)

  • 역할: 네트워크 상의 패킷 전달을 담당.
  • 특징: 각 장치에 할당된 IP 주소를 통해 데이터그램을 목적지까지 전달하며, 신뢰성보다는 최선의 노력(best effort) 방식을 사용합니다.

TCP (Transmission Control Protocol)

  • 특징: 연결 지향적 프로토콜로, 3-way 핸드셰이크를 통해 연결을 수립하고 데이터 전송의 신뢰성(재전송, 순서 보장 등)을 보장합니다.
  • 사용 예: HTTP, FTP, SMTP 등 신뢰성이 중요한 애플리케이션.

UDP (User Datagram Protocol)

  • 특징: 비연결형 프로토콜로, 빠른 데이터 전송이 가능하지만 전송 순서나 신뢰성은 보장되지 않습니다.
  • 사용 예: 온라인 게임, 스트리밍, 실시간 통신 등 빠른 전송이 필요한 경우.

5. C++에서 네트워크 프로그래밍 시작하기

C++로 네트워크 프로그래밍을 진행할 때는 운영체제에 따라 제공되는 소켓 라이브러리나, 크로스 플랫폼 라이브러리를 사용할 수 있습니다.

운영체제 별 API

  • Windows: WinSock API
  • Unix/Linux/Mac: Berkeley Sockets API

크로스 플랫폼 라이브러리

  • Boost.Asio
    • 비동기 I/O를 지원하며 TCP, UDP 소켓뿐만 아니라 타이머, 직렬 포트 등 다양한 기능 제공.
  • POCO
    • 네트워킹, 파일 I/O 등 여러 기능을 아우르는 라이브러리.

profile
그래픽스, 수학, 물리, 게임 만세

0개의 댓글