HotFoxy
불여우의 전직 이야기
게임 서버 개발자가 되어 보죠!
전체 방문자
오늘
어제
  • 분류 전체보기 (135)
    • 연구한 이야기 (26)
      • 깊게 공부해보기 (7)
      • 문제 해결 이야기 (12)
      • 맡은 업무 이야기 (6)
    • 전직 이야기 (0)
      • 1년이라는 시간 (5)
      • 프로카데미 이야기 (5)
    • 공부한 이야기 (87)
      • 알고리즘 (7)
      • 리눅스 (11)
      • 클라우드 (24)
      • 윈도우 OS (17)
      • 윈도우 소켓 프로그래밍 (11)
      • 네트워크 (16)
      • Docker & K8S (0)
      • 기타 (1)
    • 자격증 이야기 (12)
  • MSB : Mad Square's Brawl
  • GITHUB

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HotFoxy

불여우의 전직 이야기

공부한 이야기/윈도우 소켓 프로그래밍

V : 데이터 전송하기

2023. 4. 29. 22:01

V : 데이터 전송하기

TCP/IP 윈도우 소켓 프로그래밍 을 읽고 정리한 문서입니다 ;)

응용 프로그램 프로토콜과 데이터 전송

응용 프로그램의 고유 기능을 결정하는 부분은 데이터 처리 부분이다. 어떤 데이터를 어떤 형식으로 주고받고 어떻게 처리할지를 결정하는 것이 개발자가 할 가장 중요한 작업이다.

응용 프로그램 프로토콜은 응용 프로그램 수준에서 주고받는 데이터의 형식과 의미 그리고 처리 방식을 정의한 프로토콜이다.

또한, 이렇게 데이터를 보낼 때 클라이언트와 호스트 간 바이트 정렬을 통일시켜야 올바르게 데이터를 보내고 받을 수 있게 된다. 일반적으로 빅 엔디안 방식으로 통일시킨다.

구조체 멤버 맞춤은 구조체의 패딩을 없앰으로서 읽기 성능을 희생하여 공간 이득을 보는 방법으로서, #pragma pack(1) 을 명시하여 1바이트 경계에 맞추게끔 한다.

통신 양단이 주고받을 데이터를 구조체로 정의하는 것만으로는 충분하지 않다. TCP처럼 데이터의 경계를 구분하지 않는 프로토콜을 사용하는 경우, 이 메시지 경계를 구분하기 위한 추가 작업을 해야 한다.

데이터 경계 구분 방법

  • 송신자가 항상 고정 길이 데이터를 보내는 방법
    • 구현이 쉽지만 낭비가 심하다.
  • 가변 길이 데이터를 보내되 끝에 EOR을 넣어 표시하는 방법
    • 데이터 내부에 EOR 과 동일한 패턴이 있으면 안되며 성능이 저하된다.
  • 보낼 데이터 크기를 고정 길이로 보낸 뒤 그만큼 가변 길이로 보내는 방법
    • 구현이 어렵지 않으며 처리 효율도 높다.
  • 송신자가 가변 길이 데이터를 보낸 뒤 연결을 바로 종료하는 방법
    • 한 쪽에서 다른 쪽으로 일방적으로 보낼 때 적합하지만 효율성이 낮다.

요약

  • 응용 프로그램 프로토콜
    • 응용 프로그램 수준에서 주고받는 데이터의 형식과 처리 방식을 정의한 프로토콜
  • 데이터 전송 시 고려 사항
    • 항상 고정 길이 데이터를 보내는 방식
    • 가변 길이 데이터를 보내고 끝에 EOR 을 추가하는 방식
    • 고정 길이로 크기를 보내고 그만큼 가변 길이 데이터를 보내는 방식
    • 가변 길이 데이터를 보내고 연결을 종료하는 방식
  • 바이트 정렬
    • 다른 바이트 정렬을 사용하는 시스템 사이에서 데이터를 교환할 때는 이를 통일시켜야 한다.
  • 구조체 멤버 맞춤
    • #pragma pack 지시자를 사용하면 구조체의 멤버 맞춤 방식을 바꿀 수 있다.
저작자표시 (새창열림)

'공부한 이야기 > 윈도우 소켓 프로그래밍' 카테고리의 다른 글

VII : UDP 서버-클라이언트  (0) 2023.04.29
VI : 멀티스레드  (0) 2023.04.29
IV : TCP 서버-클라이언트  (0) 2023.04.29
III : 소켓 주소 구조체 다루기  (0) 2023.04.29
II : 윈도우 소켓 시작하기  (0) 2023.04.29
    '공부한 이야기/윈도우 소켓 프로그래밍' 카테고리의 다른 글
    • VII : UDP 서버-클라이언트
    • VI : 멀티스레드
    • IV : TCP 서버-클라이언트
    • III : 소켓 주소 구조체 다루기
    HotFoxy
    HotFoxy
    1년 동안의 고군분투 전직 이야기! ..가 완료되어, 게임개발자로 살아남는 이야기!

    티스토리툴바