SeokguKim's Garage

A little space for SeokguKim


네트워크 프로그래밍 정리

Tags: development, computer-science

네트워크 프로그래밍

네트워크 프로그래밍은 컴퓨터 네트워크를 통해 데이터를 전송하고 수신하는 프로그램을 작성하는 것을 의미합니다. 이 과정에서 다양한 프로토콜과 기술을 사용하여 클라이언트와 서버 간의 통신을 구현합니다.

주요 개념

주요 프로토콜

소켓 프로그래밍 단계 (TCP 기준)

  1. 소켓 생성 (socket()): 통신을 위한 소켓을 생성합니다.
  2. 주소 바인딩 (bind()): 서버 소켓에 IP 주소와 포트 번호를 할당합니다. (서버 측)
  3. 연결 대기 (listen()): 클라이언트의 연결 요청을 기다립니다. (서버 측)
  4. 연결 수락 (accept()): 클라이언트의 연결 요청을 수락하고, 통신을 위한 새로운 소켓을 생성합니다. (서버 측)
  5. 연결 요청 (connect()): 서버에 연결을 요청합니다. (클라이언트 측)
  6. 데이터 송수신 (send()/recv() 또는 write()/read()): 데이터를 주고받습니다.
  7. 연결 종료 (close()): 소켓 연결을 닫습니다.

socket

TCP/IP와 OSI 모델 비교

OSI 계층 TCP/IP 모델 계층 설명
물리 계층 네트워크 인터페이스 계층 실제 데이터 전송을 위한 하드웨어 및 전송 매체
데이터 링크 계층 네트워크 인터페이스 계층 데이터 프레임의 전송 및 오류 검출
네트워크 계층 인터넷 계층 패킷의 라우팅 및 주소 지정
전송 계층 전송 계층 데이터의 신뢰성 있는 전송 및 흐름 제어
세션 계층 응용 계층 세션 관리 및 연결 유지
표현 계층 응용 계층 데이터 형식 변환 및 암호화
응용 계층 응용 계층 사용자 인터페이스 및 애플리케이션 프로토콜

동기 vs 비동기, 블로킹 vs 논블로킹

RPC (Remote Procedure Call)

RPC는 네트워크를 통해 원격 서버의 함수를 호출하는 기술입니다. 클라이언트는 로컬 함수처럼 원격 함수를 호출할 수 있으며, 서버는 해당 함수를 실행하고 결과를 클라이언트에 반환합니다. RPC는 주로 분산 시스템에서 사용됩니다.

rpc

RESTful API

RESTful API는 HTTP 프로토콜을 기반으로 하는 웹 서비스 아키텍처입니다. REST(Representational State Transfer) 원칙을 따르며, 클라이언트와 서버 간의 상태 전이를 표현합니다. 주요 특징은 다음과 같습니다:

restful

WebSocket

WebSocket은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 프로토콜입니다. HTTP를 통해 초기 연결을 설정한 후, 지속적인 연결을 유지하여 실시간 데이터 전송이 가능합니다. 주요 특징은 다음과 같습니다:

websocket

Server-Sent Events (SSE)

Server-Sent Events(SSE)는 서버가 클라이언트에게 실시간으로 데이터를 푸시할 수 있는 기술입니다. HTTP 프로토콜을 사용하여 클라이언트가 서버에 연결을 유지하고, 서버는 클라이언트에게 이벤트를 전송합니다. 주요 특징은 다음과 같습니다:

serversideevent

STOMP (Simple Text Oriented Messaging Protocol)

STOMP는 메시징 프로토콜로, 클라이언트와 서버 간의 메시지를 전송하는 데 사용됩니다. 주로 메시지 브로커와의 통신에 사용되며, 텍스트 기반의 간단한 프로토콜입니다. 주요 특징은 다음과 같습니다:

stomp

MQTT (Message Queuing Telemetry Transport)

MQTT는 경량 메시징 프로토콜로, IoT(Internet of Things) 환경에서 주로 사용됩니다. 저전력, 저대역폭 환경에서도 효율적으로 동작하도록 설계되었습니다. 주요 특징은 다음과 같습니다:

mqtt