일정
- 강의 1주차 수강(네트워크의 개념 / 온라인게임과 네트워크 구성)
- 게임 수학 1강 2강 듣기
TCP와 UDP
TCP(Transmission Control Protocol) -> 전송 제어 프로토콜
- 연결형
- 신뢰성 우선(속도 낮음)
- 데이터를 보내기 전 3-way Handshake(3단계 연결)로 연결 설정
3-way Handshake 과정
클라이언트->서버:SYN(연결 요청)
서버->클라이언트:SYN-ACK(요청 승인)
클라이언트->서버:ACK(연결 확정)
- 데이터가 손실되거나 순서가 바뀔 시 자동 복구(순서 보장, 오류 제어)
- 웹 브라우징(HTTP, HTTPS), 이메일, 파일 전송 등에 사용
- 전략 게임, 체스, 바둑과 같이 속도보다는 정확한 데이터 전송이 중요한 게임은 TCP를 사용
UDP(User Datagram Protocol) -> 사용자 데이터그램 프로토콜
- 비연결형
- 속도 우선(신뢰성 낮음)
- 바로 데이터를 전송
- 순서가 바뀌거나 손실되어도 복구 X
- 실시간 스트리밍, 온라인 게임, 화상 통화, DNS 등에 사용
대부분의 온라인 게임에서는 두가지 방식을 모두 사용
- 채팅, 매칭같은 부분은 TCP를 사용하고 게임은 UDP를 사용
- 디스코드도 TCP(텍스트 채팅), UDP(음성 채팅)을 함께 사용
TCP/UDP를 필요한만큼 적절한 비율로 사용
궁금한 점
- 방치형 게임 같은 경우에는 어떻게 내 데이터를 쌓아서 저장해 두는지 궁금해져서 찾아봄.
게임진행은 UDP로, 저장은 TCP로
서버에서 시간 기반으로 계산(서버 동기화 방식)
- 사용자가 로그아웃을 하면 마지막 접속 시간을 서버에 저장한 후 다시 로그인하면
(현재 시간 - 마지막 접속 시간)을 계산하는 방식
- 서버가 클라이언트 상태를 실시간 유지할 필요가 없음 -> UDP기반에서도 사용 가능
- 오프라인 동안 발생한 데이터를 한번에 계산 가능
클라이언트에서 계산 후 서버에 동기화(클라이언트 기반 방식)
- 클라이언트가 게임을 종료할 때 현재 상태를 저장 후 다시 로그인할때 클라이언트에서 시간 경과를 계산 후 서버에 업데이트를 해서 클라이언트의 요청을 받아 데이터를 업데이트하는 방식
- 서버부담이 저고 클라이언트에서 빠르게 연산 가능하지만 데이터를 조작해서 해킹 가능성 있음(시간 조작 등)
서버에서 주기적으로 데이터 저장 (실시간 서버 동기화 방식)
- 클라이언트가 접속하지 않아도 서버가 일정 주기롤 데이터를 저장해서 다시 로그인하면 서버에 누적된 데이터를 가져오는 방식
- 클라이언트 조작이 불가능 하지만 서버 부화가 큼
보편적으로는 서버 동기화 방식을 사용한다고 함