브루트포스란 모든 경우의 수를 전부 시도하는 것을 말한다.
보통 자료의 크기가 작거나, 최적화된 알고리즘을 떠올리기 어려울 때 사용함
비트 기반으로 Masking하는 작업을 bitmasking이라고 한다.
비트 연산자를 활용해 {1, 2, 3}의 모든 집합을 출력하라
해답
vector<int> arr = { 1,2,3 };
int n = arr.size();
for (int i = 0; i < (1 << n); i++)
{
for (int j = 0; j < n; j++)
{
if (i & (1 << j))
cout << arr[j] << " ";
}
cout << endl;
}
P2P
단 2대를 연결하는 경우 사용한다.
1:1 통신이다.
Bus
1개의 BNC 케이블(케이블 TV 동축케이블)에 여러 대의 컴퓨터를 연결하는 구성
전체에 브로드캐스팅하면 수신 측이 자지 것만 채택하고 나머지는 무시함
Bus는 양방향 통신이 불가능함
링(Ring)
1개의 BNC 케이블을 원형으로 만든 뒤에 여러 대의 컴퓨터를 연결하는 구성
버스에 비해 양방향 통신이 가능하지만 버스 같이 초기 네트워크에서 구성되던 형태라 요즘은 쓰지 않는다.
스타(Star)
중앙 허브(Hub) 또는 스위치(Switch)에 연결된 구조
대부분의 가정과 사무실, IDC 센터 등에서 많이 채택하는 구조
중간 허브/스위치가 문제가 생기면 다 같이 문제가 생김
요즘은
메쉬(Mesh)
1:n 구성으로 신뢰성이 높지만, 복잡하고, 비용이 비싸서 군사 영역, 무선 네트워크에 주로 사용함
트리
스타 토폴로지를 확장한 널리 사용되는 형태
회사, IDC 센터, ISP 사업자 등
현재 제일 많이 사용되는 형태
물리 계층(L1)
물리적인 매체로 케이블, 전기신호, 광신호를 직접 관리
이더넷, USB, 블루트스 디바이스 등
데이터링크 계층(L2)
물리 계층에서 전달된 비트를 프레임으로 변환하고, 에러검사, 흐름제어, 링크관리
MAC Adress, MAC 프로토콜, PPP(Point-to-Point protocol) 등
네트워크 계층(L3)
데이터를 목적가지 옮기는 역할로 패킷의 경로를 결정하고 패킷 주소를 관리
IP, IPX, 라우터 등
전송 계층(L4)
데이터 전송을 관리하며, 프름제어, 오류제어, 세그먼트화, 연결 설정/해제를 담당하며 논리적 포트를 사용
TCP(Transmission Control Protocol), UDP(User Datagram Protocol)
세션 계층(L5)
통신의 세션을 설정, 관리하며, 데이터 교환 동기화(Sync)와 체크 포인트 관리를 담당함
RPC(Remote Procedure Call), NetBIOS
프리젠테이션 계층(L6)
데이터 형식을 변환하고 암호화 및 압축 처리를 함
SSL/TLS, JPEG, MPEG 등
어플리케이션 계층(L7)
네트워크 서비스에 접근하고 UI 제공 및 담당
HTTP, FTP, SMTP, DNS 등
소프트웨어 개발자들은 5 ~ 7번까지의 계층을 컨틀롤할 수 있다.
OSI 모델에 적용되는 계층에 따라 스위치의 종류가 달라진다.
| 참조데이터 | 용도 | |
|---|---|---|
| L2 스위치 | MAC 주소 테이블 | 스위치에 물려 있는 디바이스 간의 통신 전송 |
| L3 스위치 | 라우팅 테이블 | 라우팅 테이블을 참조하여 인접 라우터를 기억하고 원거리 통신 |
| L4 스위치 | 포트번호 | 포트번호를 사용해 트래픽을 분배(로드밸런싱)하는 역할 |
| L7 스위치 | 데이터기반 | HTTP헤더, URL, 쿠키등의 어플리케이션 데이터를 기반으로 한 로드밸런싱, 보안적용 |
딱 봐도 보안에서 차이가 나는데 요즘은 SWITCH가 저렴해서 많이 쓴다는거 같음
세션은 클라이언트(예: 플레이어)와 서버 간의 통신이 시작되고 유지되는 동안의 논리적 연결이다.
게임 세션을 예로 들면, 세션이 연결되어 있는 동안 플레이어의 상태(State)는 유지되고, 세션이 끊기면 플레이어의 상태는 사라진다.
PAN(Personal Area Network)
개인용 네트워크
짧은 거리를 통신함
블루투스, Zigbee, NFC 등
LAN(Local Area Network)
근거리 통신망으로 수백m ~ 몇km까지 통신
사무실, 집, 학교 등의 네트워크에서 사용
MAN(Metropolitan Area Network)
도시 단위 통신망으로 몇km ~ 수십km
도시내 공공기관 등이 사용
WAN(Wide Area Network)
광역 통신망으로 도시, 국가, 대륙 간 수백km ~ 수천km
ISP 네트워크, 다국적 기업의 지사 연결 등에 사용
Internet
지구 전체를 커버하는 통신
TCP
전송 계층에서 작동하며, 데이터를 보낸 후 수신을 확인함 (연결 유지)
UDP
전송 계층에서 작동하며, 데이터를 보내기만 함 (비연결)
IP
네트워크 계층에서 작동하며, IP 주소를 사용해서 패킷을 옮기는 역할로 모든 인터넷의 기반 기술
전송 계층에서 IP 주소와 함께 사용하는 특정 프로세스나 서비스를 연결하기 위한 주소체계이다.
0~65535의 값을 가진다.
0~1023
기본 서비스 대역
1024 ~ 49151
응용 프로그램 또는 서비스를 등록된 대역이다.
49152~65535
동적 또는 사설 포트이다.
분산 시스템의 '동기화 조건 3개를 모두 만족하는 시스템은 없다'는 이론이다.
아래의 3개를 모두 만족하는 시스템은 없다는 이론이라는 소리이다.
Consistency (일관성)
전체 시스템은 동일한 상태 값을 갖고 있어야 한다.
Availability (가용성)
언제든지 시스템에 접근하여 값을 읽고 쓸 수 있어야 한다.
Partition Tolerance (분할 용인)
시스템을 분할하여 병렬 처리 등이 가능해야 한다.
가용성을 포기하고 일관성을 우선으로 하는 CP (또는 PC) (일관성, 분할 용인을 말하는 거임) 설계의 대표적인 게임이 스타크래프트이다.
전체가 동시에 업데이트 되기 때문에 그렇다.
조종하는 유저조차 RPC로 데이터를 서버로 보내고 서버에서 모든 유저의 컴퓨터에 명령을 보내 그 명령에 해당하는 행동을 하게 만든다.
예를들어 유닛을 눌러 이동 명령을 내리면 바로 사운드 같은 리액션이 출력되지만 서버에서 명령이 도착하기 전까지는 움직이지 않는다.
사운드나 이펙트 같은 리액션을 줘서 마치 바로바로 작동하듯이 플레이어를 속이는 식으로 제작되었다.
특징
ex)
하스스톤, 체스, 장기, 고스톱 같은 보드게임
일관성을 포기하고 가용성을 우선으로 하는 AP(PA) 설계의 대표적인 게임은 최근에 등장하는 대부분의 게임들이다.
게임 클라이언트가 우선 업데이트하고, 후에 일관성을 보정하는 방식을 사용한다.
예를들어 유닛 하나를 움직이면 일단 그 쪽으로 움직이는데 만약 서버에서 명령이 왔는데 그 위치가 다르다면 해당 위치로 Rollback 해버리고 아니면 그대로 냅둔다.
이 방식을 클라이언트 예측과 서버 조정을 사용한다고 한다.
요즘 대부분의 게임들은 이런 방식을 사용한다.
특징
ex)
포트나이트
네트워크 세션을 유지하기 어려운 모바일 환경 등에서 사용하는 방법
"보장된 데이터를 사용"해서 게임 환경을 구축하는 경우이다.
특징
제일 채팅 서버와 비슷함
ex)
클래시 오브 클랜