Server

끄적이는 네트워크 공부(2)

Srff5123 2025. 4. 6. 18:27
728x90

1.RPC(Remote Procedure Call) 원격 프로시저 호출

RPC는 다른 컴퓨터에 있는 함수를 마치 로컬 함수처럼 호출하는 기술이다.

게임에서는 보통 클라이언트가 서버의 함수를 호출하거나, 반대로 서버가 클라이언트의 함수를 호출할 때 사용

즉, 네트워크를 통한 함수 호출이라고 보면된다.

 

1.작동 원리

1. 클라이언트에서 RPC 함수를 호출

2. 네트워크 패킷 생성 - 함수 이름, 인자 값 등 작렬화

3. 패킷 전송(TCP / UDP)

4. 수신 측에서 패킷 역직렬화

5. 함수 맵에서 해당 RPC 찾아 실행

 

1. RPC의 종류

1. Request-Response RPC 

요청 -> 응답까지 기다림(동기) , 로그인 요청, 데이터 요청 등이 있음

 

2. One-way RPC (Fire-and-Forget)

응답 기다리지 않음(비동기),  이펙트 재생, 사운드 알림 등이 있음

 

3. Multicast RPC 

하나의 요청 -> 여러 대상 호출,   서버가 모든 클라이언트에게 "폭발 이펙트 재생" 명령

 

예시로는 서버와 클라이언트간의 데미지 계산에 대한 함수를 호출하는 것으로 들 수 있다.

 

//헤더

UFUNCTION(Server, Reliable)

void ServerAttack();

 

//cpp

void AmyCharacter::ServerAttack()

{

    // 서버에서만 실행되는 공격 로직

}

 

클라이언트가 ServerAttack()을 호출하면, 서버에서 해당 함수가 실행된다.

 

2. RPC 사용시 주의 점 및 해결방법

 

1. 보안 위험

클라이언트가 악의적으로 서버 RPC 호출 - 서버에서 권한 검증 필수

 

2. 딜레이(Latency)

RPC가 느리게 도착하거나 손실 - 중요 동작은 예측(Prediction) 병행

 

3. 스팸 호출

RPC 남발 시 서버 과부화 - 호출 제한 및 쿨타임 설정

 

4. 데이터 손상

인코딩/디코딩 오류 - 직렬화 및 버전 관리를 철저히 한다.

 

Stub - 클라이언트 측에 있는 프록시 함수

Skeleton - 서버 측에서 호출을 받아 실제 함수로 연결

Dispatcher - 메시지를 해석하고 적절한 함수로 전달

Binder - 서버 주소와 포트를 찾고 연결 설정

 

RPC는 다른 컴퓨터의 함수를 네트워크로 호출하는 기술

게임에서는 거의 필수 요소로 (서버 - 클라이언트 간 통신의 기본)

신뢰성, 방향성, 사용 목적에 따라 다양하게 사용

보안과 네트워크 예측 시스템과 함께 고려해야 안전하고 부드러운 게임을 구현할 수 있음.

 

2. 보안

게임 보안은 크게 두 가지로 나눌 수 있다.

 

네트워크 보안과 게임 로직 보안이다.

 

1. 네트워크 보안

 

데이터를 안전하게 전송

 

1. 패킷 스니핑(Packet Sniffing) 

 

- 해커가 네트워크 통신을 가로채서 패킷을 분석

- 공격자에게 유리한 정보( HP, 위치, 아이템) 확인 가능

- 경우에 따라패킷 재정송이나 위조 가능

 

해결 방법

- 암호화(Encryption) : 데이터 내용을 숨김

- TLS/SSL : 로그인, 결제 등 민감 정보 보호에 사용

- 자체 프로토콜 암호화 : 게임 내부 채널은 가볍게 XOR 또는 AES로 암호화

 

2. 암호화(Encryption) 

대칭키 암호화(AES) : 같은 키로/ 암호화/복호화

비대칭키 함호화(RSA) : 공개키로 암호화, 개인키로 복호화

 

세션 시작 시 RSA로 AES 키 교환 -> 이후 AES로 통신

 

3. 게임로직 보안

문제

1. 클라이언트를 조작하여

    - 이동 속도 증가

    - 공격력 조작

    - 자동 사냥 매크로

    - 벽 통과, 위치 수정

2. RPC 호출을 조작하여 서버에게 잘못된 요청

 

해결 방법

- 모든 게임 로직은 서버에서 처리

- 클라이언트는 UI 표시 + 입력 전달만 담당

- 서버는 항상 위치/공격 판정/피해 계산 등을 검증

 

4. Anti-Cheat 기법

- 서버 검증 : 이동, 동격 등은 항상 서버가 관리

- 무결성 검사 : 클라이언트 파일 / 메모리 체크 (CRC, 해시값 등)

- 메모리 보호 : 코드 난독화, 안티디버깅 기술

- 행동 분석 : 이상 행동 감지 (Aimbot, 고속 반복 입력 등)

- 패킷 난수화 : 패킷 구조를 동적으로 변경해서 분석 어렵게 만들어줌

- 서버 Authority 구조 : 클라이언트는 요청만 하고, 결과는 서버가 결정

 

5. 보안 공격 사례 예시 및 방버 방법

 

- 스피드 핵  : 서버에서 이동 속도 한계 체크

- 워프 핵 : 서버에서 이동 거리 검증

- 에임 봇 : 서버에 시야 범위, 명중률 검증

- 패킷 리플레이 : 패킷마다 시퀀스 넘버 부여 & 만료시간 체크

- 자체 서버 제작 : 인증 절차 강화, 서버 도장검사 필요

 

 

6. 네트워크 + 보안 

1. 클라이언트 -> 서버 : Attack(TargetID = 23)

2. 서버에서 TargetID 23이 시야 내에 있는지 확인

3. 서버 -> 클라이언트 전체 : PlayerAttackEffect(AttackerID, TargetID)

4. 패킷은 암호화되어 전송

 

클라이언트가 공격을 임의로 조작하지 못하게 검증

위치/거리/쿨타임 체크

패킷 암호화로 해커 분석 방지

 

게임 보안에서 중요한 점은

클라이언트는 거짓을 말할 수 있으니 서버에서 판별 해야함

네트워크는 노출이 되어있으니 암호화로 숨겨야 한다.

정직한 유저는 보호해야 한다 보안은 게임의 품질이 좋아진다.

 

 

 

728x90