728x90
반응형

네트워크 39

소켓 프로그래밍, Socket Programming

소켓.. 전구 소켓이 아니라 다른 소켓이다. 의미는 같지만 가리키는 것이 다르다. socket은 콘센트와 같은 것을 말하는데 연결되면 전기가 공급되듯이 네트워크에서는 수많은 bit가 흘러들어온다. 알아보자 소켓은 크게 2종류가 있다. 종류를 정하는 것은 Protocol인데 여기선 L4이다. TCP와 UDP이다. TCP는 TCP/IP 라고도 부르는데 하나로 묶여서 쓰이기 때문이다. 즉, 소켓을 구성하는데는 수많은 규약들이 정해져있다. OS의 이해도 필요하고 Protocol의 이해도 필요하고 데이터를 주고 받는 방식, 바이트를 읽는 방식 등 모든 규약을 정해야 정상적인 통신이 가능해진다. 또한 네트워크인만큼 예외상황도 많이 발생한다. 정말 힘들다. 우선 네트워크는 서버와 클라이언트로 나누어진다. 소켓도 클라..

멀티 플레이 환경에서의 클라이언트와 서버 - 1, 구조

서버와 통신하는 이유는 여러 가지가 있겠지만 멀티 플레이 환경에서 가장 첫 번째 이유는 공정성이다. 싱글 플레이에서 유저가 어떤 행동을 하든 조작을 하든 다른 유저에게 피해를 끼치지 않는다. 저러면 게임이 하고 싶을까? 각 방마다 저러면 내가 게임을 할 수 있을까? 클라이언트를 직접 조작하는 것은 막지 못한다. 하지만 서버와의 연결을 거친다면 클라이언트의 변조를 막을 수 있다. 이것이 멀티 플레이 게임의 가장 중요한 요소인 공정성이다. 모두 다 같은 환경에서 플레이해야만 멀티플레이의 의미가 생기는 것이다. 쉽게 생각하면 모든 게임의 연산을 서버에서 하면 되는거 아냐? 라고 생각한다. 이것을 Authoritative Server라고 하는데 이는 서버에서 연산을 처리하여 클라이언트가 받아서 쓰는 방식이다. ..

Client - side Prection, 클라이언트 단 예측

[Game Developer, 게임개발자/게임네트워크] - 멀티플레이 게임과 네트워크 지연 이 글의 연장이 되는 글이다. 알아보자 우선 가장 중요한 플레이어의 입력에 대해서 알아보려고 한다. 일반적으로 움직임은 클라이언트가 직접 계산하지만 여러 멀티플레이어의 게임은 의도치 않은 상황을 막기 위해 입력조차도 서버권한으로 관리하는 경우가 많다. 하지만 이 때 걸리는 Latency가 높아서 우리는 예측을 하는 것이다. 즉, 우리가 가장 먼저 해야하는 것은 움직임 자체를 클라이언트에서 연산하여 작동하는 것을 비활성화 시켜야 한다. 다시 말하자면 클라이언트는 서버 응답에 관해서 작동을 해야하지 그냥 실제로 클라이언트의 값대로 동작하면 안된다는 말이다. 우선 플레이어를 움직이는 로직을 보자. public class..

멀티플레이 게임과 네트워크 지연

네트워크 지연은 게임에 있어서 가장 중요한 요소 중 하나다. 소위 우리는 말하길 핑이라고 하는데 핑이 낮다는것이 지연율이 낮다는 것이다. 즉, 우리가 서버에 보낸 요청이 응답이 바로 되어 게임에 적용되는 그 사이 시간이 짧다는 것이다. 더 자세히 알아보자 네트워크 지연이란? 싱글 플레이 게임이나 Local Area Network를 사용하는 게임들은 지연에 대해 걱정할 필요가 없다. 1. 지터(파형에 변형이 일어남) 2. RTT(시작 지점에서 대상 지점으로 이동하고 시작 지점으로 다시 이동하는 데 걸리는 시간) 3. Packet Loss(패킷이 전달되지 못해서 유실됨) 어떠한 이유로든 서버와 클라이언트 사이에 정보를 보내거나 받는 작업이 생긴다면 위와 같은 문제에 대해 다시 생각해봐야한다. 그냥 정보를 보..

네트워크 - CS 면접 총정리

업데이트 (22.06.01) OSI 더보기 [컴퓨터(Computer Science)/네트워크, Network] - OSI Model, 7 Layers, OSI 모델 [컴퓨터(Computer Science)/네트워크, Network] - TCP/IP Model, OSI 모델과 차이는? 라우팅 더보기 Routing 경로 제어 프로토콜 IGP EGP BGP 네트워크 계층 더보기 패킷 Mac Address, IP address Circuit Switching, Packet Switching IPv4, IPv6 전송 계층 더보기 TCP, UDP [컴퓨터(Computer Science)/네트워크, Network] - TCP vs UDP 비교 트래픽 제어 흐름 제어 Stop-and Wait Sliding Window..

CS Interview 2021.11.23

Socket으로 통신 라이브러리 만들기

**읽고 외운다기보다 그냥 이런 식으로 진행되며 각 라인을 의미를 파악하는 것이 중요 라이브러리를 만드는 이유는 간단하다. 지속적으로 통신을 유지하기 위함이다. 통신의 기본은 접속, 송신, 수신, 접속 종료로 나눌 수 있다. 이를 실행하려면 Socket 클래스의 인스턴스를 참조해야 하므로 송수신이 이루어지는 곳마다 Socket 클래스의 인스턴스를 참조하는 코드를 작성해야 한다. 하지만 게임 프로그램 전체로 보면 Socket 클래스의 인스턴스는 게임 처리와 별도로 관리하고 싶다는 생각이 든다. 게임 프로그램에는 다른 단말과 통신만 하면 되는 것이지 굳이 Socket 클래스의 인스턴스를 다뤄야 하는가? 라는 의문이 생긴다. 그래서 모든 통신 방식이 비슷하다면 게임마다 따로 작성할 필요 없이 라이브러리에서 가..

네트워크 바이트 오더 [네트워크]

뭐 순서와 관련되었다고 생각하면 쉽다. 알아보자 2바이트 이상의 데이터를 송수신할 때는 바이트 오더에 주의해야 한다. 바이트 오더란 2 바이트 이상의 데이터를 메모리에 배치하는 방식을 말하는데 배치 방식에는 빅 엔디안, Big Endian, 리틀 엔디안, Little Endian이 있다. 기본적으로 우리는 빅 엔디안에 익숙해져있다. 우리가 12345를 만 이천 삼백 사십 오라고 읽는 것과 같은 이치다. 이러한 기준 엔디안은 프로세서에 따라 달라진다. 같은 엔디안 끼리 통신할 때는 문제가 당연히 없지만 다를 때 문제가 생긴다. 즉, 송신했을 때 어떻게 수신하느냐에 따라 데이터가 달라질 수도 있다는 것이다. 이처럼 다른 프로세서 간의 데이터를 송수신할 때는 바이트오더를 약속해야 한다. C#에서는 IPAddr..

TCP,UDP 소켓프로그래밍, C# - 소켓 생성부터 종료까지

게임 네트워크를 알아보는데 직접 해보는 것만큼 도움되는 것이 없다. 소켓 프로그래밍을 해보자. 우선 소켓이란 TCP와 UDP를 간단하게 다루기 위한 통신 API이다. IP 주소와 포트 번호를 같이 묶어서 상대를 지정하고 통신하는 것이다. 통신 상대로는 네트워크로 연결된 단말이나 같은 단말 내의 어플리케이션이 가능하다. **같은 네트워크 안에 있는 다른 컴퓨터나 컴퓨터 안에서의 프로세스라고 하면 되겠다. 네트워크로 연결된 단말을 지정하여 통신하려면 어느 단말의 어플리케이션과 통신할 것인지 정해야 한다. 실제로 통신할 때는 물리적으로 케이블을 포트에 연결하여 단말끼리 접속한다. 소켓은 말 그대로 어플리케이션에 가상으로 존재하는 이더넷 포트를 말한다. 소켓으로 통신할 때는 소켓이 지정한 포트에 전용 이더넷 포..

온라인 게임에서 TCP 보다 UDP를 사용하는 이유

[컴퓨터(Computer Science)/네트워크, Network] - TCP vs UDP 비교 우선 TCP와 UDP는 위와 같다. 생각해보면 UDP는 속도만 빠르지 제대로 데이터가 전달되는지도 몰라서 온라인 게임에선 정확한게 중요하지 않을까? 생각하면서 TCP가 적용된다고 생각하는 사람이 많다. 그러나 현업에선 오히려 UDP가 더 많이 쓰인다고 한다. 왜 정확한 것보다 빠른 것을 쓰는 것일까? TCP의 특징 중 하나인 데이터를 주고 받을 때 순서와 전송을 보장하는 특성이 오히려 온라인 게임에서 방해가 된다는 이유 때문이다. 전달을 보증하는 TCP는 송신한 세그먼트가 유실되었다고 판단하면 재전송을 한다. 도대체 이것이 무엇을 방해하는 것일까? 일반적으로 TCP는 세그먼트 송신후 재전송 타임아웃(RTO) ..

게임네트워크를 따로 생각해야하는 이유

우리는 네트워크를 배워봤다. 또한 네트워크 지식을 알고 있다. 하지만 우리는 그 지식이 도움은 되겠지만 직접적으로 게임에서 일어나는 통신에 대해서 40% 정도 밖에 도움이 되지 않는다. 그것은 뭐 때문일까? 온라인 게임을 만들 때 고도의 기술력이 필요하다고 생각할 수 있다. 하지만 이미 우리가 배웠던 것으로도 충분히 구현할 수 있다고 한다. 하지만 앞서 말했듯이 왜 우리가 배웠던 것은 40% 정도밖에 도움되지 않는 것일까? 기본적인 통신은 정보를 보내고, 받고, 그 정보를 반영하면 된다. 즉, 게임에서 일어나는 통신은 간단하다. 다만 중요한 것은 언제 보내며, 어느 빈도로 보낼 것이며, 뭘 어떻게 보낼 것인가.. 라는 구체적인 문제가 생긴다. 떄문에 우리가 아무리 네트워크 지식이 뛰어나더라도 게임에 대한..

728x90
반응형