Skip to content

데이터 정의

Taegyeong Kim edited this page Nov 1, 2016 · 1 revision

데이터 정의

Haste 는 각 레이어마다 데이터의 정의가 다르다.

정의는 크게 MTU(Transport), Command(Transport), Message(Framework+Application) 로 구분한다.

MTU(Maximum Transmission Unit)

Transport 레이어에서 받는 최초의 데이터를 의미한다.

Transport에선 소켓을 통해 바이트 배열을 받게 되지만, 실제론 UDP의 데이터그램 하나를 받게 된다. (Haste 에선 기본 MTU 크기를 이더넷의 표준 MTU인 1500 이하로 정의하고 있다)

MTU는 헤더를 제외하면 Command의 집합으로 볼 수 있다.

MTU는 왜 여러 Command를 가지고 있나요?

MTU는 19바이트의 헤더가 존재한다. 하나의 Command에 MTU 헤더를 붙여서 바로 송수신하는 건 공간적으로 효율적이지 못하다. 특히 Haste 는 데이터를 곧바로 송신하지 않고, 일부를 큐에 쌓아놨다가 일정 시간마다 한 번씩 송신한다. 왜냐하면 Command의 묶음을 한 번에 보내는 게 더 효율적이기 때문이다.

MTU 헤더 구조

  • Command type : 1 byte
  • Peer Id : 4 bytes
  • Current Sending time : 8 bytes
  • Command Count : 2 bytes
  • CRC : 4 bytes
  • Commands

Command

실제 Transport에서 데이터를 처리하는 최소 단위이다.

다음과 같은 타입들이 존재합니다.

  • CONNECT : 연결에 필요한 Command(Client).
  • CONNECT_RESPONSE : CONNECT Command에 대한 응답 Command(Server).
  • DISCONNECT : 연결 해제에 필요한 Command.
  • ACKNOWLEDGE : 데이터를 수신에 대한 응답 Command.
  • PING : 연결 유지를 위한 Command.
  • RELIABLE : 신뢰성 있는 데이터 송수신을 위한 Command.
  • UNRELIABLE : 신뢰성 없는 데이터 송수신을 위한 Command.
  • FRAGMENTED : 신뢰성 있는 데이터 송수신을 위한 Command. 정의된 MTU 크기보다 큰 데이터를 송수신 할 때, 재조합을 위한 정보가 포함됨.
  • SNTP : 시간 동기화를 위한 Command.

Message

수신한 Command의 페이로드이며, Framework 레이어에서 보다 의미 있는 데이터로 정의한다.

그리고 Application을 개발하는 개발자는 이 Message를 이용해서 개발하게 된다. (Application 개발자는 MTU, Command에 대해선 몰라도 된다)

Haste에서는 Message를 아래 다섯 가지로 정의해서 사용하고 있다.

  • InitialRequest : 최초 연결시 필요한 정보가 담겨진 메시지.
  • InitialResponse : InitialRequest 에 대한 응답 메시지.
  • RequestMessage : 클라이언트로부터 받은 요청 메시지.
  • ResponseMessage : RequestMessage 에 대한 응답 메시지.
  • EventMessage : 특정 클라이언트가 발생시킨 이벤트에 대한 메시지.

그리고 모든 메시지가 공통으로 사용하는 데이터 형식을 아래와 같이 정의한다.

  • DataObject : Key(byte), Value(primitive type(string 포함), primitive type의 배열) 로 구성된 자료구조.