[게임 서버] 2.7 패킷 유실 시 UDP와 TCP에서 현상

게시:     수정

카테고리:

태그:

📦 2. 컴퓨터 네트워크

👉🏻 항목 8: 주로 사용하는 메시지 형식

1. 메시지 형식 종류 ✉️

1.1. 텍스트 형식

BuyItem<LF>
Sword<LF>
1<LF>
<0x00>
  • 사람이 읽을 수 있다.
  • 특정 글자를 찾을 때:
    • 글자 검색 혹은 구문 분석기(parser) 사용

1.2. 바이너리 형식

       v Sword
0x01 | 0x0023 | 0x0001
^ BuyItem       ^ 1
  • 각 바이트 혹은 비트 필드는 특정한 의미를 가진다.
    • 바이트 사이즈로 필드를 구분한다.
  • 구문 분석기가 필요없다.
    • 처리 성능 ⇡
    • 통신량 ↓
  • 디버깅이 까다롭다.

2. 메타데이터 🏷️

  • 메시지 내용에 대한 정보를 제공하는 데이터
// 메시지 형식
Action: BuyItem<LF>
Type: Sword<LF>
Amount: 1<LF>
<0x00>

// 바이너리 형식
         v BuyItem       v Sword           v 1
0x0001 | 0x01 | 0x0005 | 0x0023 | 0x0046 | 0x0001
^ Action        ^ Type            ^ Amount
  • 메타데이터로 인해, 무슨 의미인지 알 수 있어진다.

단점:

  • 메타데이터로 인해, 데이터 통신량이 많아진다.
  • 해킹에 취약해진다.

장점:

  • 하위 호환성 측면에서 유리하다.

2.1. 메타데이터 하위 호환성

문제:

  • 두 프로세스의 버전이 다른 경우:
    • 버전 1: Action, BuyItem, Type, Sword
    • 버전 2: Action, BuyItem, Type, Sword, Amount, 1
    • 서버는 버전 2, 클라이언트는 버전 1,2가 공존한다.

해결:

  • 서버에서 내용 일부가 없는 상황에 맞춰, 작동을 다르게 구현한다.
    • e.g. 개수 값이 없으면 개수를 1로 가정

PC의 경우 버전 1과 2가 서버에 동시 접속하는 일이 드물지만,
모바일은 자주 일어난다.

GameServer 카테고리 내 다른 글 보러가기

댓글남기기