나만의 작은 도서관

[TIL] 240704 캠프 81일차: TCP과제 패킷 구조 파악 본문

Today I Learn

[TIL] 240704 캠프 81일차: TCP과제 패킷 구조 파악

pledge24 2024. 7. 4. 22:52

오늘 배운 내용                                     

TCP과제 패킷 구조 파악

TCP서버 구축에서 패킷의 구조를 파악하는 것이 중요하다 그래서 과제에서 나오는 패킷의 구조들을 하나씩 파악하며 어디에 쓰이는 지 확인해보았다.

 

최상단 패킷

 

서버와 클라이언트가 서로 통신할 때 가장 먼저 받게되는 구조이다. 각 구조는 다음과 같다.

  • TOTAL_LENGTH(헤더): 패킷의 전체 길이
  • PACKET_TYPE(헤더): 패킷의 타입
  • PROTOBUF: protoBuf로 인코딩된 메세지

프로토버프

패킷에 들어있던 프로토버프의 종류이다. 종류는 요청에 사용하는 일반패킷과 응답에 사용하는 응답패킷, 총 2종류이며 각각의 패킷 필드는 다음과 같다.

 

일반패킷(CommonPacket)

  • handlerId: 핸들러 Id
  • userId: 유저Id(deviceId로 사용하고 있다.)
  • version: 클라이언트 버전
  • payload: 페이로드

응답패킷(Response)

  • handlerId: 핸들러 Id
  • responseCode: 응답 코드(응답 성공 시 0)
  • timestamp: 패킷을 전송한 시각
  • data: 데이터

페이로드

일반패킷에서 페이로드들의 종류가 여러가지 있다. 페이로드의 종류는 InitialPayload, LocationUpdatePayload, LocationUpdate로 총 3가지 종류의 페이로드가 있다. 각각의 페이로드들의 역할과 필드들의 의미는 다음과 같다.

 

InitialPayload: 클라이언트와 서버가 처음 연결될 때 딱 한 번 전송하는 페이로드

  • deviceId: 디바이스id. 클라이언트에서 입력한다. 입력이 없을 시, 임의의 uuid가 들어간다.
  • playerId: 플레이어id. 클라이언트에서 4개의 캐릭터중 하나를 랜덤으로 선택하는데, 이 때 선택된 캐릭터의 index가 들어간다(0 <= playerId < 4)
  • latencty: 지연율

LocationUpdatePayload: 클라이언트와 서버에게 이동한 위치를 전송하는 페이로드

  • x: 캐릭터 x좌표
  • y: 캐릭터 y좌표

LocationUpdate : 서버가 클라이언트에게 다른 유저들의 위치 정보를 전송하는 페이로드

  • users: 유저의 위치정보와 여러정보들을 저장하고 있는 UserLocation 리스트
  • UserLocation
    • id: 디바이스id. 클라이언트에서 입력한다. 입력이 없을 시, 임의의 uuid가 들어간다.
    • playerId: 플레이어id. 클라이언트에서 4개의 캐릭터중 하나를 랜덤으로 선택하는데, 이 때 선택된 캐릭터의 index가 들어간다(0 <= playerId < 4)
    • x: 캐릭터 x좌표
    • y: 캐릭터 y좌표

전체 구조

오늘 한 일                                       

더보기
  • 과제 필수 기능 구현 -완-
  • 과제 도전 기능 구현 30%