전체 글

전체 글

    [바미] Socket Programming에 대해 알아보자!

    흔히 소켓이라고 하면 콘센트에 꼽는 것을 소켓이라고 합니다. 어떤 것을 연결해서 꽂아서 하는 것을 데이터를 주고 받는 것을 의미합니다. 그래서 소켓프로그래밍이라는 것도 비슷한데요. 실제로 네트워킹이라는건 NIC에서 일어납니다. 쉽게 말해서 랜카드인데요. 이것을 통해서 데이터가 들어갔다 나갔다 하게 됩니다. 네트워크 인터페이스 컨트롤러 - 위키백과, 우리 모두의 백과사전 네트워크 인터페이스 컨트롤러(network interface controller, NIC)는 컴퓨터를 네트워크에 연결하여 통신하기 위해 사용하는 하드웨어 장치이다.[1] 네트워크 카드(network card), 랜 카드(문화어: 망카드, 망 ko.wikipedia.org 컴퓨터에선 하드웨어와 OS가 있는데 OS가 하는 주된 일이 이 하드웨..

    [바미] Server Authority에 대해 알아보자!

    Server Authority는 말그대로 서버가 권한을 가지고 있는 형태 입니다. 서버가 모든것을 판단해서 중재자이고, 심판이면서, 플레이어이면서 모든걸 다 한다고 보면 됩니다. 이 방식은 상당히 고전적이면서 단순한데요. 흔히 CS방식(Client & Server)이라고 하는데 클라이언트가 있고, 서버가 있을 때 클라이언트가 서버에게 질의를 하고, 서버가 클라이언트에게 응답을 하는 방식이 됩니다. 이 방식을 가장 흔하게 볼 수 있는 방식이 웹 서버인데요. 게임 서버도 이와 비슷하다 보면 됩니다. 그런데 문제가 있는데 이 방식에서는 항상 클라이언트가 묻고, 서버가 응답하는 구조인데 클라이언트가 묻지 않으면 서버는 응답을 하지 않는다는 점인데요. 예전에 웹서버는 다이나믹한 변경을 주고 싶어서 1초마다 갱신되..

    [바미] Deterministic 과 해킹에 대해 알아보자!

    왜 Deterministic은 해킹에 취약한지에 대해 알아보도록 하죠. 어떻게 보면 당연한데 Deterministic방식 자체가 Input Set에 기반하고 있습니다. 그러니까 Input을 똑같이 공유하는 형태로 해서 게임 상태를 맞추는 방식이기 때문에 상대방이 보낸 Input에 의존할 수 밖에 없죠. 그래서 상대방이 보낸 Input을 인정하게 되면 상대방이 Input을 조작하더라도 발견하기 힘듭니다. 그래서 해킹에 취약할 수 밖에 없는데 이것을 방지하기 위해서는 이 Input이 정당한지 검사해야 합니다. 이 방식은 크게 2가지로 볼 수 있는데 서버를 이용하는 방식이 있고, 서로가 서로를 검사하는 방식, 방장이 검사하는 방식이 있는데 패킷을 서로 상대방에게 보낼 때 상대방이 이 패킷이 정당한 것인지, 지..

    [바미] 홀펀칭에 대해 알아보자!

    P2P, Relay 서버 방식에 대해 설명했을 때 IPv4가 갯수가 한정적이기 떄문에 모든 컴퓨터에 고정IP를 둘 수 없어 맨 앞에 있는 컴퓨터만 Pubic IP만 가지고 있으면 얘 한테 오는 패킷을 분배를 할 수 있었습니다. 그래서 이 맨앞에 있는 컴퓨터 이하에 있는 컴퓨터들은 가짜IP를 가지고 있어도 통신을 할 수 있었고, 이를 통해 자원고갈 문제를 해결할 수 있었습니다. 이 부분을 좀 더 자세히 보죠. 패킷이 안에서 바깥으로 나갈 때는 가능하지만 바깥에서 안으로 들어가는 것은 불가능 합니다. 안에서 바깥으로 나갈 때를 자세히 살펴보죠. 안에서 바깥으로 나갈 때의 목적지를 Naver라고 쳐보죠. Naver가 고정IP이기 때문에 Naver의 서브IP는 변하지 않습니다. 내 컴퓨터의 IP가 10.2.4...

    [바미] P2P, Relay 서버 방식에 대해 알아보자!

    P2P는 Peer To Peer방식이라 해서 클라이언트 끼리 직접적으로 연결하는 방식입니다. 보통 1:1에서는 클라이언트와 클라이언트가 연결하는 형태입니다. 5명이 연결하는 다대다 형태일 때 2가지로 나뉘는데 방장을 정해서 방장에게 커넥트하는 방식. 방장이 모든 커넥션을 가지고 있는 방식이 있고, 다른 하나는 풀리 커넥션(Fully Connection)이라 해서 모두가 모두에게 커넥션 하는 방식이 있습니다. 각각 장단점이 있는데 방장을 정해서 방장에게 커넥트하는 방식은 장점이라고 보면 커넥션이 하나밖에 없으니까 하나만 관리하면 되고, 방장이 있기 때문에 4개의 커넥션을 관리하지만 각자의 입장에서는 하나만 관리하는 측면에서 봤을 때 각 클라이언트가 걸려야되는 커넥션 수가 적다는 장점이 있고, 방장이 어떤 ..

    [바미] 중계서버와 그 외 유용한 방식들에 대해 알아봅시다.

    Deterministic을 구현하기 위해서 Delay와 Rollback을 이용한 방법이 있다고 했었는데요. 이 번에는 실제 실무에서 사용하는 방법을 알아보도록 하겠습니다. 중계서버를 사용하는 방법 서버에 클라이언트들이 접속을 하는데 어떤 클라이언트가 패킷을 보내면 서버가 하는 일은 받은 패킷을 다른 클라이언트에게 전달하는 일만 합니다. 그래서 받아서 바로 전달하기 때문에 Relay서버라고 표현하기도 하고, 하나를 받았는데 모든 클라이언트에게 전달하기 때문에 중계서버(Broadcast Server) 라고도 합니다. P1이 있고, P2가 있고 중계서버가 있다고 가정하면 P1이 어느 시점에서 버튼을 눌렀을 때 바로 적용시키는게 아니라 서버로 바로 보냅니다. 서버는 이 정보를 모든 클라이언트에게 보내줍니다. 내..

    [바미] Delay 와 Rollback에 대해 알아보자!

    Deterministic에 대한 기본적인 컨셉에 대해 알아보았습니다. 두 Input이 똑같이 적용되면 양 컴퓨터의 상태(결과)가 같다. 다르게 얘기하면 싱크가 맞다고 말할 수 있습니다. 그래서 이 레이턴시를 잘 극복하느냐가 관건였는데요. 이 Sync가 같지 않은 상태를 Desync라고 합니다. 이 desync가 일어나지 않게 하는게 Deterministic의 가장 중요한 점입니다. 그래서 이걸 막는 몇가지 방법이 있는데요. 첫 번째 방법으로 Delay를 주는 것입니다. 예를 들어 Player1과 Player2가 있다고 가정할 때 이제 이것을 P1과 P2로 나타내겠다. P1이 Time이 0ms일 때 버튼을 눌렀다고 가정하고, 이 버튼이 P2까지 적용되는데 시간이 걸립니다. P2도 시간이 50ms일 때 버튼..

    [바미] Deterministic방식에 대해 알아보자!

    TCP와 UDP를 통해 어떻게 전송을 하는지를 알아보았다면 이번에는 그 데이터를 어떻게 처리할 것인지에 대해 알아보도록 하겠습니다. 이 부분에서도 크게 두가지 방식으로 나뉘는데요. Deterministic server Authority 실제로 UDP를 쓰는 부분에는 Deterministic를, TCP를 쓰는 부분에서는 server Authority를 많이 씁니다. 왜 그렇게 됐는지는 모르겠지만 보통 보면 이런 형태를 나타내고 있습니다. Deterministic는 반응성이 좋은 게임에 많이 쓰고, server Authority는 서버 권한이 필요한 경우에 많이 써서 MMORPG에 많이 쓰죠. 하지만 엄밀히 따지면 UDP와 TCP와 저 둘의 관계는 없습니다. 우선 첫번째로 Deterministic에 대해 알..

    [바미] Protocol TCP,UDP에 대해 알아봅시다.

    시작 Protocol은 우리말로 하면 약속, 규약 이라는 의미이고, Network Protocol은 통신 규약입니다. 서로 간에 어떤 통신을 하기 위해서는 어떤 약속이 필요한데요. 프로토콜에는 여러가지가 있다. 여기서 전부 다 알아보진 않고, 게임에서 필요한 TCP, UDP만 다뤄보도록 하겠습니다. 여기에 베이스가 되는게 IP라는 프로토콜이 있어요. 이것이 하위 계층이고, TCP, UDP가 상위 계층입니다. TCP, UDP위에 HTTP, SMTP, 등등이 있습니다. 여러 레이어들이 있는데 보내는 쪽에서 데이터를 만들어서 레이어들을 거칠 때마다 거기게 해당하는 데이터들이 하나씩 추가 되서 맨 마지막에 데이터가 인터넷을 통해 전송하게 됩니다. 받는 쪽에서도 여러 레이어들이 있어서 각 레이어들에 맞는 데이터들..