네트워크 공부, 브루트포스, 비트 연산

김영웅·2025년 3월 10일

브루트포스란 모든 경우의 수를 전부 시도하는 것을 말한다.

보통 자료의 크기가 작거나, 최적화된 알고리즘을 떠올리기 어려울 때 사용함

비트 기반으로 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;
}

네트워크

노드

  • 네트워크의 기본 단위이다
  • 엔드 노드와 중간 노드 두 종류가 있다

링크

  • 노드 간 데이터를 전송하는 연결 (인터넷, Wifi, 블루트스 등등)

프로토콜

  • 데이터 전송 규칙 (TCP, UDP, HTTP, FTP 등)

네트워크의 배치 형태(Topology)

  • P2P
    단 2대를 연결하는 경우 사용한다.
    1:1 통신이다.

  • Bus
    1개의 BNC 케이블(케이블 TV 동축케이블)에 여러 대의 컴퓨터를 연결하는 구성
    전체에 브로드캐스팅하면 수신 측이 자지 것만 채택하고 나머지는 무시함
    Bus는 양방향 통신이 불가능함

  • 링(Ring)
    1개의 BNC 케이블을 원형으로 만든 뒤에 여러 대의 컴퓨터를 연결하는 구성
    버스에 비해 양방향 통신이 가능하지만 버스 같이 초기 네트워크에서 구성되던 형태라 요즘은 쓰지 않는다.


아래의 기술들이 나오며 위의 기술들은 더이상 사용되지 않음
  • 스타(Star)
    중앙 허브(Hub) 또는 스위치(Switch)에 연결된 구조
    대부분의 가정과 사무실, IDC 센터 등에서 많이 채택하는 구조
    중간 허브/스위치가 문제가 생기면 다 같이 문제가 생김
    요즘은

  • 메쉬(Mesh)
    1:n 구성으로 신뢰성이 높지만, 복잡하고, 비용이 비싸서 군사 영역, 무선 네트워크에 주로 사용함

  • 트리
    스타 토폴로지를 확장한 널리 사용되는 형태
    회사, IDC 센터, ISP 사업자 등
    현재 제일 많이 사용되는 형태

네트워크 레이어 모델(OSI 모델)

  1. 물리 계층(L1)
    물리적인 매체로 케이블, 전기신호, 광신호를 직접 관리
    이더넷, USB, 블루트스 디바이스 등

  2. 데이터링크 계층(L2)
    물리 계층에서 전달된 비트를 프레임으로 변환하고, 에러검사, 흐름제어, 링크관리
    MAC Adress, MAC 프로토콜, PPP(Point-to-Point protocol) 등

  3. 네트워크 계층(L3)
    데이터를 목적가지 옮기는 역할로 패킷의 경로를 결정하고 패킷 주소를 관리
    IP, IPX, 라우터 등

  4. 전송 계층(L4)
    데이터 전송을 관리하며, 프름제어, 오류제어, 세그먼트화, 연결 설정/해제를 담당하며 논리적 포트를 사용
    TCP(Transmission Control Protocol), UDP(User Datagram Protocol)

  5. 세션 계층(L5)
    통신의 세션을 설정, 관리하며, 데이터 교환 동기화(Sync)와 체크 포인트 관리를 담당함
    RPC(Remote Procedure Call), NetBIOS

  6. 프리젠테이션 계층(L6)
    데이터 형식을 변환하고 암호화 및 압축 처리를 함
    SSL/TLS, JPEG, MPEG 등

  7. 어플리케이션 계층(L7)
    네트워크 서비스에 접근하고 UI 제공 및 담당
    HTTP, FTP, SMTP, DNS 등


소프트웨어 개발자들은 5 ~ 7번까지의 계층을 컨틀롤할 수 있다.

OSI 모델에 적용되는 계층에 따라 스위치의 종류가 달라진다.

참조데이터용도
L2 스위치MAC 주소 테이블스위치에 물려 있는 디바이스 간의 통신 전송
L3 스위치라우팅 테이블라우팅 테이블을 참조하여 인접 라우터를 기억하고 원거리 통신
L4 스위치포트번호포트번호를 사용해 트래픽을 분배(로드밸런싱)하는 역할
L7 스위치데이터기반HTTP헤더, URL, 쿠키등의 어플리케이션 데이터를 기반으로 한 로드밸런싱, 보안적용

HUB와 SWITCH의 차이

  • Hub는 데이터 전송 시 연결된 모든 디바이스에 이게 니꺼냐고 물어보고 그렇다는 디바이스에 전달
  • SWITCH는 MAC Address를 사용해 1번에 전달

딱 봐도 보안에서 차이가 나는데 요즘은 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
    기본 서비스 대역

    • HTTP : 80
    • HTTPS : 443
    • FTP : 21
    • SSH : 22
    • SMTP : 25
    • IMAP : 143, 993
  • 1024 ~ 49151
    응용 프로그램 또는 서비스를 등록된 대역이다.

  • 49152~65535
    동적 또는 사설 포트이다.


CAP 이론

분산 시스템의 '동기화 조건 3개를 모두 만족하는 시스템은 없다'는 이론이다.
아래의 3개를 모두 만족하는 시스템은 없다는 이론이라는 소리이다.

  1. Consistency (일관성)
    전체 시스템은 동일한 상태 값을 갖고 있어야 한다.

  2. Availability (가용성)
    언제든지 시스템에 접근하여 값을 읽고 쓸 수 있어야 한다.

  3. Partition Tolerance (분할 용인)
    시스템을 분할하여 병렬 처리 등이 가능해야 한다.

가용성 보정

가용성을 포기하고 일관성을 우선으로 하는 CP (또는 PC) (일관성, 분할 용인을 말하는 거임) 설계의 대표적인 게임이 스타크래프트이다.
전체가 동시에 업데이트 되기 때문에 그렇다.

조종하는 유저조차 RPC로 데이터를 서버로 보내고 서버에서 모든 유저의 컴퓨터에 명령을 보내 그 명령에 해당하는 행동을 하게 만든다.

예를들어 유닛을 눌러 이동 명령을 내리면 바로 사운드 같은 리액션이 출력되지만 서버에서 명령이 도착하기 전까지는 움직이지 않는다.
사운드나 이펙트 같은 리액션을 줘서 마치 바로바로 작동하듯이 플레이어를 속이는 식으로 제작되었다.

특징

  • 가용성이 떨어지는 경우 세션을 폭파시키고 남은 플레이어가 승리함

ex)
하스스톤, 체스, 장기, 고스톱 같은 보드게임

일관성 보정

일관성을 포기하고 가용성을 우선으로 하는 AP(PA) 설계의 대표적인 게임은 최근에 등장하는 대부분의 게임들이다.
게임 클라이언트가 우선 업데이트하고, 후에 일관성을 보정하는 방식을 사용한다.

예를들어 유닛 하나를 움직이면 일단 그 쪽으로 움직이는데 만약 서버에서 명령이 왔는데 그 위치가 다르다면 해당 위치로 Rollback 해버리고 아니면 그대로 냅둔다.

이 방식을 클라이언트 예측서버 조정을 사용한다고 한다.
요즘 대부분의 게임들은 이런 방식을 사용한다.

특징

  • 특정 플레이어가 Latency 가 떨어지더라도 세션을 그대로 유지됩니다.

ex)
포트나이트

비동기 (Async)

네트워크 세션을 유지하기 어려운 모바일 환경 등에서 사용하는 방법
"보장된 데이터를 사용"해서 게임 환경을 구축하는 경우이다.

특징

  • 느리지만 손실 허용이 안되는 TCP 프로토콜을 사용한다.
  • 이벤트만 서버로 전송하고, 서버는 이벤트를 검증하고 그 결과를 DB에 저장함
  • 게임 플레이어 외에는 다른 플레이어의 접속 여부와 관계없이 게임 진행이 가능함

제일 채팅 서버와 비슷함

ex)
클래시 오브 클랜

profile
게임 프로그래머

0개의 댓글