Networking

    [바미] HTTP status code

    HTTP에서 클라이언트 요청에 대한 서버의 응답 코드에 관한 포스팅 입니다. HTTP 상태 코드란? 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드로, 상태 코드에 따라 요청의 성공/실패 여부를 판단합니다. HTTP 상태 코드 분류 상태 코드의 첫 번째 숫자에 따라 크게 5가지로 분류 됩니다. 1xx (Informational) : 조건부 응답 2xx (Successful) : 성공 3xx (Redirection) : 리다이렉션 완료 4xx (Client Error) : 요청 오류 5xx (Server Error) : 서버 오류 HTTP 상태 코드 상세 자주 사용되는 HTTP 상태 코드 위주로 정리하였습니다. 모든 HTTP 상태 코드를 알고 싶다면, MDN이나 위키백과를 참고해 주세요. 1xx ..

    [바미] 3 - Way Handshake 와 4 - Way Handshake를 알아봅시다.

    안녕하세요. TCP의 3-Way Handshake 와 4-Way Handshake에 대해 알아보기 전에, 우선 아래의 내용에 대해 알아보도록 하겠습니다. Transport Layer OSI 7 레이어에서 Transport Layer에는 양 끝단(End to end)의 사용자들이 신뢰성있는 데이터를 주고 받을 수 있도록 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해줍니다. 전송 계층은 인터넷의 기반인 TCP/IP 참조 모델과 일반적인 네트워크 모델인 개방형 시스템 간 상호 접속 (Open Systems Interconnection, OSI) 모두 포함하고 있죠. 전송 프로토콜 중 잘 알려진 것이 바로 TCP와 UDP입니다. Transport Layer VS Network L..

    [바미] MMORPG 서버 구조에 대해 알아보자.(完)

    지난번에 싱글프로세스 vs 멀티프로세스를 했었는데 이번에는 싱글 쓰레드 vs 멀티 쓰레드 를 다뤄보겠습니다. 싱글 쓰레드는 하나의 프로세스에 Work Thread가 하나인 경우를 말하고, 멀티 쓰레드는 하나의 프로세스에 Work Thread가 여러개인 경우를 말합니다. 싱글 프로세스이면서 멀티 쓰레드를 쓸 수 있고, 멀티 프로세스이면서 싱글 쓰레드를 쓸 수 있고, 멀티 프로세스이면서 멀티 쓰레드를 쓸 수 있습니다. 싱글 프로세스이면서 싱글 쓰레드를 쓸 수 있지만 현재 시점에선 공짜점심이 끝난 상황에서 싱글 프로세스로 가려면 서버 머신이 좋아야 하는데 이미 서버 클럭수는 한계에 부딫혔기 떄문에 클럭 수가 더 늘어나기에는 기대하기 힘들고, 코어 수만 늘어나고 있고, 16개 코어까지도 가능한데 이 코어들의 성..

    [바미] MMORPG 서버 구조에 대해 알아보자.(2)(싱글프로세스 vs 멀티프로세스)

    저번에 이어서 싱글프로세스 구조와 멀티 프로세스 구조의 차이에 대해 좀 더 알아보도록 하겠습니다. 싱글 프로세스 구조를 알아봅시다. 싱글프로세스 구조는 프로세스가 하나 즉 프로그램 하나가 돌아가는 걸 의미하는데 이게 개념적으로 이렇다는 얘기지 꼭 싱글 프로세스 구조라고 해서 프로그램이 무조건 하나다. 라고 볼 수는 없습니다. 단순히 봐서 싱글 프로세스 구조면 게임서버 하나다. 라고 보면 됩니다. 하나의 게임 서버로 어떤 서비스가 게임이 서비스 된다라고 봤을 때 이걸 싱글 프로세스라고 보면 됩니다. 예를 들어 봅시다. WOW라는 게임이 있는데 WOW의 월드가 여러가지가 있는데 각 월드가 하나의 프로세서로 돌아간다면 싱글 프로세스로 볼 수 있고, 여러 게임 프로세스들이 하나의 월드를 구성한다면 멀티 프로세스..

    [바미] MMORPG 서버 구조에 대해 알아보자! (1)

    MMORPG서버 구조에 대해 알아보기 전에 MMOPRG에서는 어떤 요구사항이 있기 때문에 이런 서버 구조가 필요한지 부터 알아보도록 하겠습니다. MMORPG의 서버쪽에서 가장 큰 문제점은 유저가 많다는 점입니다. 이 말은 동시 접속자 수가 많다는 이야기고, 서버가 감당해야 될 작업량이 많다는 것이죠. 그래서 작업량의 기준을 보면 게임에서는 Actor라고 보면 되는데요. 예를 들면 Player, NPC(몬스터 포함) 그리고 컨트롤 존(Control Zone)이라고 해서 조종되는 영역을 의미하는건데 예를 들면 이런 것이죠. 필드에 독이 깔려있을 때 Player나 NPC가 그 영역에 들어가면 도트 데미지를 받는 것인데 도트 데미지를 어떻게 주는지, 독 우물이라는 Actor가 있고, 그 독 우물이 매번 다른 A..

    [바미] 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...