Post

네트워크 - 기본 개념과 키워드3

Network

네트워크 - 기본 개념과 키워드3

세션

클라이언트와 서버가 연결된 상태를 “세션”이라고 하며, 클라이언트가 서버와 지속적인 상호작용을 할 수 있도록 한다. 세션은 서버 측에 저장되고, 세션 ID를 통해 클라이언트를 구별한다.

세션의 역할

  • 인증 및 접속 관리: 게임 접속 시, 세션에 인증 정보를 저장하여 클라이언트와 서버 간의 통신을 가능하게 만든다.
  • 게임 상태 저장: 플레이어의 위치, 게임 진행 상황, 보유 아이템 등을 저장하여, 재접속 시 상태를 복원할 수 있다.
  • 통신 및 데이터 교환: 플레이어의 입력과 동작을 서버로 전달한다.
  • 인증 및 권한 부여: 플레이어가 허용된 작업만 수행하도록 관리한다.

OSI 7 계층

OSI 7 계층 모델은 네트워크 통신을 7단계로 나누어 설명하며, 각 계층의 문제를 독립적으로 해결할 수 있게 한다.

예를 들어, PC방에서 게임을 하는데 연결이 끊겼을 때:

  • 모든 PC에 문제가 생겼다면: 3계층 네트워크 계층 또는 1계층 물리 계층의 문제일 가능성이 높다.
  • 한 PC만 문제가 있고 해당 게임에 문제가 있다면: 7계층 응용 계층의 문제일 가능성이 크다.

이처럼 계층을 분리하면 문제 해결을 보다 효율적으로 할 수 있다.

7 계층 - 응용 계층 (Application Layer)

사용자가 네트워크 서비스를 이용할 수 있도록 하는 계층. 주로 애플리케이션 간 통신을 담당한다.

  • 사용자와 애플리케이션 간의 통신을 담당한다.
  • API나 라이브러리 형태로 인터페이스를 제공한다.
  • 애플리케이션이 응용 계층을 통해 네트워크에 접근하고, 사용자 입력을 서버로 전송하며, 서버에서 데이터를 받아 사용자에게 보여준다.

6 계층 - 표현 계층 (Presentation Layer)

송신측에서 수신자에게 데이터를 전달하기 전에 데이터 형식을 변환, 압축, 암호화하는 계층.

  • 데이터 형식 변환: 송신 측에서 수신 측으로 데이터를 공통 표준 형식으로 변환. (예: IBM 문자 인코딩을 ASCII로 변환)
  • 암호화 및 복호화: 데이터를 암호화하여 보안을 유지하고, 수신 측에서 복호화하여 원래 데이터를 해석한다.
  • 데이터 압축: 대역폭을 줄이기 위해 데이터를 압축하고, 수신 측에서 이를 해제한다. (예: 이미지는 JPEG, 비디오는 MPEG 형식으로 압축)

5 계층 - 세션 계층 (Session Layer)

두 시스템 간의 연결을 설정하고, 세션을 관리하며 통신을 제어하는 계층.

  • 세션 설정, 유지, 종료: 세션을 설정하고, 통신이 끝날 때 종료한다.
  • 전송모드 결정: 반이중, 전이중, 단방향 통신 모드를 결정한다.
  • 통신 동기화 및 오류 복구: 통신 중 오류를 감지하고 복구한다.

4 계층 - 전송 계층 (Transport Layer)

두 장치 간 데이터 전송을 담당하는 계층으로, 신뢰성효율성을 보장하는 역할을 한다.

  • 전송할 데이터가 어떤 애플리케이션에 전달될지 결정하기 위해 출발지목적지 포트 번호를 헤더에 추가한다.
  • 데이터의 오류 검사를 위한 체크섬이 헤더에 추가된다.
  • 데이터를 수신할 때는 데이터를 하나로 합쳐서 5계층에 전달한다.

주로 사용하는 프로토콜은 TCP와 UDP이다.


TCP

  • 연결 지향적: 통신을 시작하기 전에 3-way handshake를 통해 연결을 설정하고, 데이터 전송 후 연결을 종료하는 과정이 필요하다.
  • 신뢰성 보장: 전송된 데이터가 손실되지 않도록 보장하며, 패킷의 순서가 맞지 않거나 손실된 경우 이를 재전송한다.
  • 오류 검사 및 흐름 제어: 오류 검사, 흐름 제어, 혼잡 제어와 같은 기능을 제공하여 데이터의 정확성과 신뢰성을 보장한다.
  • 데이터 세그먼트화: 데이터를 세그먼트 단위로 나누어 전송하며, 각 세그먼트에 시퀀스 번호를 포함시킨다.
  • 헤더 크기: 헤더는 20바이트로 UDP보다 더 복잡하고 크기가 큰 편이다.
  • 중요한 데이터:
    • 시퀀스 번호: 데이터의 순서를 보장하는 정보.
    • 확인 응답 번호: 수신 측에서 확인한 데이터의 마지막 순서 번호를 포함.
    • 흐름 제어 정보: 수신자가 데이터를 처리할 수 있는 속도를 조절하기 위한 정보.

UDP

  • 비연결 지향적: 연결을 설정하지 않고 데이터를 전송하며, 통신 중에 연결 상태를 관리하지 않는다.
  • 신뢰성 부족: 데이터가 손실되거나 순서가 틀어져도 복구하지 않기에 신뢰성이 떨어지며, 필요한 경우 응용 프로그램에서 오류 검출 및 처리 등을 직접 구현해야 한다.
  • 빠른 전송: 불필요한 제어 작업이 없어서 전송 속도가 빠르다.
  • 오류 처리 및 흐름 제어 없음: 오류 복구나 재전송 등의 기능이 없으며, 이를 응용 프로그램이 처리해야 한다.
  • 세그먼트화 하지 않음: TCP처럼 세그먼트화 작업을 하지 않으며, 만약 데이터가 MTU(Maximum Transmission Unit)를 초과하면 다음 계층에서 자동으로 분할된다.

3 계층 - 네트워크 계층 (Network Layer)

데이터를 목적지까지 전달하는 역할을 하며, 패킷을 다룬다.

  • 패킷화: 전송 계층에서 받은 데이터를 패킷으로 감싼다. (출발지, 목적지의 IP 주소가 헤더에 포함된다.)
  • 라우팅: 데이터를 목적지까지 가는 최적의 경로를 선택하여 전달한다.
  • DNS: URL을 통해 IP 주소를 찾는 작업을 담당한다.

네트워크 장비 간 신호를 주고받는 규칙을 정의하는 계층으로, LAN에서 데이터를 정상적으로 전송하기 위해 필요하다.

  • 프레임화: 네트워크 계층에서 받은 데이터를 프레임으로 감싸 송신하고, 수신한 프레임을 네트워크 계층으로 전달한다.
  • 오류 검출 및 복구: 체크섬, CRC 등을 이용해 오류를 감지하고 복구한다.
  • 전송 속도 관리: 송신자와 수신자 간 데이터 전송 속도를 조절하여 오버플로우를 방지한다.
  • 충돌 방지: 네트워크에서 여러 장치가 데이터를 전송할 때 충돌을 방지하는 메커니즘을 제공한다.
  • MAC 주소: 데이터에 컴퓨터의 물리적인 주소인 MAC 주소를 부여하여 출처를 알 수 있게 한다.

1 계층 - 물리 계층 (Physical Layer)

전기적, 기계적 특성을 이용해 데이터를 전송하는 계층.

  • 비트 전송: 2 계층에서 받은 프레임을 비트 단위로 변환하여 전송한다.
  • 전송 및 수신: 데이터는 전기적 신호나 광 신호로 변환되어 물리 매체를 통해 전송된다.
  • 데이터 확인 없음: 전송된 데이터가 무엇인지, 문제가 있는지 확인하지 않는다.

네트워크 인터페이스

컴퓨터나 네트워크 장비가 네트워크에 연결되어 통신하기 위한 물리적 또는 가상의 연결 포인트를 의미한다.

물리적 네트워크 인터페이스

  • 실제 하드웨어 장치로 존재하며, 데이터를 물리적으로 송수신하는 역할을 수행.
  • 데이터를 전기적(유선) 또는 전자기파(무선) 신호로 변환하여 네트워크로 전송.
  • 예시:
    • 컴퓨터의 유선 LAN 포트
    • 무선 Wi-Fi 모듈
    • 서버의 광케이블 네트워크 인터페이스 (Fiber NIC)

      가상 네트워크 인터페이스

  • 소프트웨어적으로 구현된 네트워크 인터페이스로, 실제 하드웨어 없이 네트워크를 구성할 수 있음.
  • 주로 가상 머신(VM), 컨테이너(Docker), VPN 등에서 사용됨.
  • 예시:
    • 가상 머신(VM) 네트워크 어댑터 → VM이 물리적 네트워크 인터페이스 없이도 네트워크에 연결될 수 있도록 함.
    • Docker의 가상 브릿지 네트워크 → 여러 컨테이너가 서로 통신할 수 있도록 가상의 네트워크 인터페이스를 제공.
    • VPN 터널 인터페이스 → 원격 네트워크와 연결될 때 가상의 네트워크 인터페이스를 생성하여 트래픽을 전달.

MAC 주소

LAN 내에서 장치를 식별하는 고유 주소.

  • 각 네트워크 장비(네트워크 카드)에 고유하게 할당된 48비트 주소.
    • 예: 00:1A:2B:3C:4D:5E
  • 같은 네트워크(LAN) 내에서만 유효하며, 인터넷을 통해 직접 사용되지 않음.
  • ARP(Address Resolution Protocol)을 통해 IP 주소를 MAC 주소로 변환하여 로컬 네트워크에서 데이터 전송이 이루어짐.
  • 게임 서버는 클라이언트의 MAC 주소를 직접 다루지 않으며, 보안 문제로 인해 MAC 주소를 직접 식별하는 경우가 드뭄.

멀티플레이 게임 개발에선?

같은 네트워크에서 통신할 때 사용되지만, 인터넷에서는 의미 없음.
네트워크 카드마다 다르므로, 이를 기반으로 사용자를 식별하는 것은 적절하지 않다.
일부 P2P 네트워크에선 MAX 주소를 활용할 수 있지만, 보통 IP 주소를 사용한다.

IP 주소

네트워크에서 장치를 식별하고, 데이터를 주고받을 때 사용하는 주소.

서버와 클라이언트 간 통신의 기본 단위.

  • IPv4(32비트) 예시: 192.168.1.10
  • IPv6(128비트) 예시: 2001:db8::ff00:42:8329
  • 동적 IP(Dynamic IP)와 고정 IP(Static IP)
    • 동적 IP: 인터넷 서비스 제공업체(ISP)가 할당하며, 시간이 지나면 변경됨.
    • 고정 IP: 변하지 않는 IP로, 게임 서버를 운영할 때 필수적임.
  • 공인 IP(Public IP)와 사설 IP(Private IP)
    • 공인 IP: 인터넷에서 접근 가능한 IP(예: 게임 서버 IP).
    • 사설 IP: 내부 네트워크에서만 사용되는 IP(예: 192.168.0.1, 10.0.0.1 등).
    • NAT(Network Address Translation)을 통해 사설 IP를 공인 IP로 변환하여 인터넷과 통신.

멀티플레이 게임 개발에선?

  • 서버와 클라이언트 간 통신에는 IP 주소가 필수 → 클라이언트는 서버의 IP 주소를 알아야 접속 가능.
  • NAT(Network Address Translation) 문제 해결 필요 → P2P 게임의 경우 NAT 우회 기법(STUN, TURN 등) 고려.
  • 고정 IP vs 동적 IP → 게임 서버 운영 시 고정 IP 또는 도메인 네임 사용(DNS 활용).
  • IP 보안 관리 → DDOS 공격 방지, IP 차단 기능 구현 가능.

NAT

사설 네트워크에서 사용하는 IP 주소를 공인 IP 주소로 변환하여 인터넷과 통신할 수 있도록 해주는 기술이다.

LAN 내부의 장치(PC, 스마트폰 등)가 사설 IP를 사용할 때, 인터넷과 통신하는 과정에서 NAT 장치(공유기, 라우터 등)가 사설 IP를 공인 IP(NAT 장치가 가진 공인 IP)로 변환하여 송신하는 방식이다.

예시

  1. 집에 있는 PC로 게임 서버에 접속
  2. 공유기가 NAT를 사용해 공인 IP로 변환
  3. 게임 서버는 공인 IP에서 요청을 받았다고 인식
  4. 게임 서버가 응답을 보내면 공유기가 다시 사설 IP로 변환하여 PC에 전달

공유기는 사설 IP에게 어떻게 정보를 전해주나?

  1. 서버에 패킷을 보내는 사설 IP의 주소와 목적지 주소 (최신 NAT 모듈은 포트 번호도 추가해준다.) 를 테이블로 저장한다.
  2. 외부에서 패킷이 들어오면 테이블을 보고 해댱하는 IP 주소로 응답을 보내준다.

사용 이유

IPv4 주소 부족 문제

  • 인터넷 대중화로 IP주소 요구가 폭증하게 되었다.
  • IPv4 주소의 고갈 문제가 발생했는데, 이것을 해결하기 위한 솔루션 중 하나다.
  • 외부에 공개해야 하는 서비스는 공인 IP, 공개할 필요가 없는 서비스는 사설 IP를 사용하기로 했기에 NAT 기술을 사용하게 되었다.
    보안
  • NAT를 사용하면 외부에서 내부 네트워크의 사설 IP 주소를 직접 알 수 없다.
  • 때문에 내부 네트워크의 특정 IP에 대한 공격을 방지 가능하다. (물론 사설 네트워크 자체를 공격하면 어쩔 수 없다.)

NAT과 멀티플레이 게임

NAT은 보안과 IP 주소 절약에 에 장점이 있지만, 멀티플레이 게임에선 문제가 될 수 있다.

P2P 게임과 NAT

P2P 게임은 클라이언트끼리 서버를 중간에 끼지 않고 통신을 하는 구조다.
이 때 NAT을 사용하는 클라이언트끼리 통신을하게 된다면?
호스트 A에서 서버를 만들면 호스트 B가 NAT에 의해 호스트 A가 만든 서버에 접속할 방법이 없다.
인터넷과 NAT을 이용한 네트워크에선 인터넷이 공인 IP를 가졌기에 호스트가 패킷을 전달할 수 있었지만, 지금은 양측 모두 NAT에 가려져 매핑 테이블을 만들 수 없다.

여기에 대한 해결방법이 몇 개 존재하는데, 이 내용은 내일 공부할 예정이다.

This post is licensed under CC BY 4.0 by the author.