돈이 된다.
대한민국 시장에선 안타깝지만 콘솔은 돈이 안된다.
노드, 링크, 프로토콜
노드는 컴퓨터와 같은 디바이스를 이야기하고 링크는 디바이스를 연결하는 매질?을 이야기한다(wifi, 이더넷등)
프로토콜은 주고받는 패킷을 정의한다.
망을 구성하는 방식으로 여러가지 있지만 주로 사용되는건
Star, Mesh, Tree구조를 사용하게 된다.
스위치와 허브의 가격이 저렴해 졌기 때문에 브로드캐스트시 손실에 대한 걱정과 부담을 짊어져야 하는 ring과 bus방식은 선호되지 않는다.
Star구조

Mesh구조

Tree구조

Star구조가 제일 싸고 간편하게 이용하기 가능하나 허브가 맛이가면 통신이 맛이간다
Mesh구조는 하나가 맛이간다고 통신이 맛이가지 않는 대신에 모든 복잡하고 비용이 비싸다
Tree는 허브 하나가 맛이가도 예비허브로 구성되어 통신을 동작시키는 실용적인 방법
주로 Star나 Mesh를 접하게 될것
| 참조데이터 | 용도 | |
|---|---|---|
| L2 스위치 | MAC 주소 테이블 | 스위치에 물려 있는 디바이스 간의 통신 전송 |
| L3스위치 | 라우팅 테이블 | 라우팅 테이블을 참조하여 인접 라우터를 기억하고 원거리 통신 |
| L4스위치 | 포트번호 | 포트번호를 사용해 트래픽을 분배(로드밸런싱)하는 역할 |
| L7스위치 | 데이터기반 | HTTP헤더, URL, 쿠키등의 어플리케이션 데이터를 기반으로 한 로드밸런싱, 보안적용 |
허브는 디바이스를 가지고 있는 그룹 전체와 통신하고 스위치는 정확한 주소의 장비와 통신한다.
세션은 통신이 유지되는 동안 존재하는 휘발성 메모리이다
TCP
데이터를 보내고 반드시 검증한다.
UDP
데이터를 냅다 던진다.
IP
네트워크 계층에서 작동하는 패킷의 케리어 역할을 한다.

물리계층에서 시작되어 어플리케이션 단계로 갈수록 각 단계에서 패킷이 처리되어 헤더가 줄어든다.
반대는 늘어나는것을 확인 할 수 있다.
장비의 고유주소값이다. 총 48bit로 구성되고 24bit는 국제표준기구에서 할당하고 다른 24bit는 제조사에서 할당한다.
IPv6가 있음에도 IPv4를 사용한다.
이미 사용되고 있어 바꾸기 어렵고 IPv4가 더 쉽기 때문이다.
서버는 고정ip를 주로 사용하며 클라에서는 b,c를 사용하게 된다.
B클래스는 주로 사설 인터넷으로 고정된 IP를 사용할 수 없다.
ARP는 IP->MacAddress로 변환하는 기술을 말한다.
통신해야 하는 주소가 내부망이라면 ARP프로토콜로 해당 IP를 가진 장비로 브로드캐스팅 후 응답이 오는 디바이스에 데이터를 전송한다.
통신해야 하는 주소가 외부망이라면 게이트 웨이를 찾기 위해 ARP프로토콜을 브로드캐스팅 한다
내부망 외부망을 구별하는 조건은 서브넷 마스크다.
같은 서브넷 마스크를 가지고 있다면 내부망이고 그렇지 않다면 외부망으로 판별한다.
서브넷 마스크는 내외부망을 판별하는 기준이되기도 하지만 같은 공인IP를 쉐어하는 용도로도 사용이 된다.
| 클래스 | 사설IP갯수 | 주소 | 서브넷 마스크 |
|---|---|---|---|
| A | 약 1600만개 | 10.0.0.0~10.255.255.255 | /8 |
| B | 약 100만개 | 172.16.0.0~172.31.255.255 | /16 |
| C | 약 6만개 | 192.168.0.0~ | /24 |
ARP 변환
전송계층에서 IP와 함께 특정 프로세스나 서비스를 연결하기 위한 주소체계다. 0~65535값을 가지며 80번 포트는 웹서비스를 뜻한다.
1. 서버의 기본 서비스 대역 : 0~1023
공인 IP와 사설 IP의 포트를 변환 할 때는 IP와 비슷하게 PAT를 사용한다.
사람이 사용할 사이트마다 공인IP주소를 외우는 것은 어려운 일이다.
그래서 일반인도 이해하기 쉽게 사람이 읽고 쓰고 기억하기 쉽도록 DomainName을 통해서 IP를 DomainName으로 변환한다.
- HUB
싼맛에 사용되지만, 성능과 효율이 떨어져 지금은 사장됨.
- 스위치
Lan내부에서 데이터를 전송하는 역할로 MacAddr로 직접 전달.
- 라우터
네트워크간 IP주소를 기반으로 데이터 전송을 담당
- 모뎀
디지털 신호와 아날로그 신호를 변환해주는 장비
- 방화벽
특정 IP주소 또는 도메인의 트래픽을 차단하거나 허용한다.
- VPN(Virtual Private Network)
내부망의 IP와 외부망의 IP를 스왑해줌으로서 추적에 안전하게 해주는 장비다.
Cache서버
웹, Restful, API서버로 요청을 하면 미들웨어를 거쳐 최종적으로DB에서 데이터를 획득하는데 , 동일한 요청과 결과라면 이를 임시로 저장했다가, 서버대신 결과를 반환한다.
트래픽부하를 줄이는 역할을 함
IT 업계에서 상식적으로 알고 있어야하는 용어들 입니다.
Reliable UDP
QUIC
IP
IP Port
MAC Address
IP4/6 Address
도메인 이름
DNS
DHCP
서버
DB 서버
웹 서버
Restful API 서버
API 서버
방화벽 서버
클라이언트
온라인 게임은 크게보면 Sync, Async 방식으로 나뉘며
실시간은 Sync방식은 온라인서버, Lan 파티 환경으로 나뉜다.
Consistency(일관성)
전체 시스템은 동일한 상태값을 갖고 있어야 한다.
Availability 가용성
언제든지 시스템에 접근하여 값을 읽고 쓸 수 있어야 한다.
Partition Tolerance 분할용인
시스템을 분할하여 병렬처리 등이 가능해야 한다.
게임에서는 보통 일관성을 유지하고 가용성을 포기한다.
예전 시스템의 경우
서버에서 한틱동안의 모든 이벤트를 저장했다가 브로드캐스팅을 통해 클라이언트를 업데이트 시키는 방식
반응속도가 빠를 필요가 없다면 선호되지만 게임에서는 선호될 수 없다.(턴제라면 예외)
현재 시스템의 경우
클라이언트의 동작을 즉시 서버에서 반영하고 결과를 클라이언트에 반환하면 다시 서버에 브로드캐스팅 요청을한다.클라이언트는 Update를 App에 요청하고 서버에서 받은 값으로 보정을한다.
맞으면 사용하고 아니면 rollback한다.나머지 클라이언트는 update한다.
가용성을 무시하고 일관성을 우선하는 CP설계의 대표적인 게임은 스타크래프트다.
플레이어가 입력하면 서버에서 처리한 후 클라이언트를 업데이트 하는 방식이다.
해당 방식은 지연시간이 분명히 존재하는데 이를 감추기 위해 사운드나 이펙트 효과등을 활용했다.
게임 클라이언트를 우선 업데이트하고, 후에 일관성을 보정하는 방법을 사용한다.
응답속도가 낮을 경우 뒤늦게 죽는 경우나, 케릭터가 뒤로가능 경우가 발생한다.
해당 설계에 특징은 클라이언트에서는 입력값을 예측을하고 서버의 수신값과 비교하여 결과를 반환한다는 것이다.
(응답시간)Latency가 떨어져도 세션을 그대로 유지한다는 특징이 있다.
네트워크는 강하게 결합되어 있지 않으며, 불안정하다 따라서 브로드 캐스팅되는 데이터가 클라이언트에서 일정 시간마다 반드시 도달한다고 가정하면 예기치 않은 문제가 발생하기 때문에 클라이언트 에서는 보간을 한다.
- 서버데이터 수신
일정 간격으로 케릭터의 위치를 클라이언트에 전송.- 클라이언트 버퍼링
수신된 위치값을 버퍼에 저장하고 보간에 활용- 보간계산
두 위치값 사이를 비율에 따라 계산
t=0.025초일때, x=5, y=5를 보간하면 중간위치는 x=2.5, y=2.5- 렌더링
매프레임마다 보간 된 위치를 화면에 반영하여 부드러운 이동을 묘사
위의 사례와 방법들은 모두 동기화된 사례들이고, 네트워크에서 세션을 유지하기 어려운 모바일 환경등에서 사용하는 방법으로는 보장된 데이터를 사용하여 환경을 구축하는 것이다
COC같은 게임의 경우 AP설계에 해당한다.이벤트를 서버에 전송하고, 서버는 이벤트를 검증 후 결과를 DB에 저장한다. 플레이어는 다른 플레이어의 접속여부와 관계없이 게임 진행이 가능해진다.
채팅보다 처리할 정보가 많은 게임서버는 데이터 처리가 채팅보다 복잡하지만
다양한 채널과 동기화를 고려해야하는 채팅서버는 게임서버보다 복잡하다.
가장 작은규모의 서버
처리할 데이터가 많지 않고 트래픽이 적으면 저런 구성이 가능하다.병목현상 처리
트래픽이 증가하면 균등한 서버의 부하를 주지 않으면 전체 시스템 성능이 떨어지는 현상이 발생한다. 이를 병목현상 이라고 하고 주로 역할별로 서버를 구별하여 해결한다.
유저들의 채팅량이 증가하면 그에 대응 하는 서버도 필요
패치가 빈번해지면 패치서버도 필요하다.
서버의 증설이 필요한 경우
해킹 방어
진화 ING
필요에 따라서 서버를 증축하는 과정을 도식화 한 것이다.
트래픽을 줄이고 외부의 해킹에 취약점을 보완해나가는 모습을 보인다. 훨씬 더 다양한 문제들을 해결해야 겠지만 당장은 그렇다.
서버가 막연히 어렵게 다가왔는데 강의영상을 보고 용어들이 많이 정리된 느낌을 받았다.
병목현상을 막고 성능을 유지시키기 위해서 복잡해지는 과정이
객체지향프로그래밍과 유사한 느낌이라서 복잡한 개념이지만
미묘하게 친숙하게 느껴졌다.