#2. 컴퓨터 네트워크

게임 서버 프로그래밍/게임 서버 프로그래밍 교과서

2020. 2. 17. 16:00

2.컴퓨터 네트워크

컴퓨터 네트워크


1. 네트워크를 구성하는 기기
  • 컴퓨터 네트워크 구성 방법

    • 직접 네트워크 케이블로 연결

      단말기 두 대밖에 작동하지 못함

    • 링 위상에서 통신

      세 대 이상 간에 통신 가능

    • 네트워크 기기 사용

      네트워크 기기가 단말기들과 네트워크 케이블(랜선)으로 연결

    • LAN(Local Area Network)

      네트워크 스위치 하나를 두고 별 위상(Start Topology)을 취함

      가까운 지역을 묶는 대표적인 컴퓨터 네트워크

    • OSI(Open Systems Interconnection reference) 모델

      컴퓨터 네트워크 통신에 대한 국제 표준

      LAN이 성립하려면 OSI Layer 2를 지켜야 함

  • OSI 모델

    • Layer1 : 물리 계층

    • Layer2 : 데이터 링크 계층

      • LAN에서 통신을 가능하게 함
    • Layer3 : 네트워크 계층

      • 광역 통신망(WAN)에서 통신을 가능하게 함
    • Layer4 : 전송 계층

    • 상대방에게 데이터가 반드시 도착하게 함(전달책임)

    • Layer5 : 세션계층

      • 다른 컴퓨터의 응용 프로그램이나 운영체제 모듈과 통신을

        하는 동안 논리적 연결 단위나 기능을 다룸

      • 프로그램을 만드는 행위가 일어나는 계층

  • OSI 모델의 계층 2

    • 특징

      • 각 단말기는 고유한 주소를 갖는다
      • 단말기는 데이터를 프레임이라는 단위로 주고 받는다
    • 프레임

      • 헤더

        송신 주소와 수신 주소를 포함

      • 페이로드

        보내려는 데이터

    • WAN

      • 서로 다른 LAN이 맞물려 연결된 통신망

      • 서로 다른 LAN 안에 있는 각 단말기들의 주소를 모두

        고유하게 만들긴 어렵다

      • 새로운 규약이 필요하다

  • OSI 모델의 계층 3

    • 특징

      • 계층적으로 데이터를 건네주는 방식
      • 라우터가 이러한 일을 한다
    • 라우터

      • 서로 다른 LAN 사이에 컴퓨터 통신을 할 수 있게 하는 장비
    • 인터넷 프로토콜(IP)

      • 8비트 숫자 4개로 구성된 주소
      • 데이터를 다른 단말기로 보내려면 IP 패킷 형태로 포장
2. 컴퓨터 네트워크 데이터
  • 스트림 형식

    • 정의

      • 데이터의 흐름. 두 단말기를 연결한 후 그 연결을 끊기 전까지

        한쪽에서 다른 한쪽으로 연결된 데이터 흐름 하나

    • 스트림 자체는 데이터를 중간에 구별하지 않는다

      • 스트림을 보낸 개수와 받는 개수는 다를 수 있다
      • 보낸 데이터의 시작과 받는 데이터의 시작이 다를수도 있다
      • 받은 데이터를 모두 이어 붙이면 보낸 데이터를 이어 붙인 것과 같다
    • 스트림 송수신시 데이터가 여러 부분으로 나뉘어있다면

      • 헤더를 붙이는 방식

        보낼 데이터 크기를 먼저 보내는 방식

      • 구분자를 이용한 방식

        데이터 시작이나 끝을 알리는 특정 기호를 추가하는 방식

        구분자를 제외하고 보낼 데이터는 구분자와 같은 값이 없어야한다

  • 메시지 형식

    • 특징

      • 스트림과 달리 자체적으로 데이터 시작과 끝을 구분할 수 있다

      • 보낸 개수와 받는 개수가 같으며, 보낸데이터와 받는 데이터의 시작과

        끝은 같다

    • 수신자 주소

      • 수신 측 단말기까지 전달할 때 라우터에서 필요한 정보
      • 수신측 단말기까지 도착한 후 수신자 측에서 송신자를 식별하는 용도
    • IP 패킷

      • 크기는 제한적이다. 스트림이나 메시지는 이러한 제한이 없다

      • 단편화

        • 프로그램이 매우 긴 스트림을 송신할 때 운영체제가 이를 IP 패킷의

          크기 제한에 맞추어 여러 조각을 내는 것

3. 컴퓨터 네트워크 식별자

  • IPv4

  • 1바이트 숫자 4개의 조합

  • IPv6

    • IPv4 주소 한계를 극복하기 위해 등장한 표준

      2^128개의 주소형식

    • 위 두 프로토콜은 서로 호환되지 않는다

  • 포트

    • 한 IP 주소 안에서도 누가 주고받는 것인지 식별하는 역할을 하는 것
    • 2바이트 정수이다 (65535 이하의 값)
  • 끝점(End Point)

    • IP 주소와 포트를 같이 표현하는 방법
  • 호스트 네임

    • 영어 단어 형식의 기기 주소
  • DNS(Domain Name Server)

    • 호스트 이름을 IP 주소로 변환 해 주는 서버
4. 컴퓨터 네트워크의 품질과 특성
  • 네트워크 품질을 저해하는 것들

    • 처리할 수 있는 한계를 넘는 데이터가 수신

      • 자기가 처리할 수 있는 것 이상을 그냥 버린다(패킷 드롭)

      • 아직 처리하지 못한 것들을 메모리에 누적한다

        가정용 라우터는 처리할 수 있는 양 이상의 패킷이 도착하면

        메모리를 누적시키는 경우가 있다

    • 외부에서 잡음

    • 신호가 약해짐

    • 오류는 계층 2나 계층 3의 체크섬 검사로 확인 가능

    • 수정하기 어려운 패킷 혹은 프레임은 그냥 버린다

  • 패킷 유실률

    • 네트워크 기기가 처리할 수 있는 한계를 넘어가면 패킷 유실 발생
    • 회선 신호가 약하거나 잡음이 섞이면 패킷 유실 발생
  • 전송속도와 전송지연시간

    • 전송속도

      두 기기 간에 초당 전송될 수 있는 최대 데이터양

    • 전송속도에 영향을 주는 것

      • 선로의 종류와 품질
      • 두 기기의 소프트웨어와 하드웨어 종류
    • 레이턴시

      두 기기 간에 데이터를 최소량 전송할 때 걸리는 시간

    • 레이턴시에 영향을 주는 것

      • 매체의 종류와 품질
      • 송신자-수신자 사이의 라우터 처리속도
      • 매체 품질이 낮으면 재전송에 의한 레이턴시로 이어진다
    • 두 단말기 사이의 레이턴시

      두 단말기 사이에 있는 네트워크 기기의 레이턴시 총합

    • 두 단말기 사이의 스루풋

      두 단말기 사이의 네트워크 기기 중 최소 스루풋

  • 네트워크 품질 기준 세가지

    • 전송 속도(스루풋)
    • 패킷 유실률
    • 레이턴시
5. 컴퓨터 네트워크에서 데이터 보내기와 받기
  • UDP 네트워킹

    • User Data Protocol. 사용자가 정의한 데이터그램을 상대방에게

      보낼 수 있게 하는 통신 규약

    • 스트림이 아닌 메시지 성질을 가짐

      • 데이터 일부가 뭉치거나 쪼개지지 않는다
      • 중간에 데이터그램 유실이 생길 수 있다
    • 다대다 통신이 가능하다(멀티캐스팅)

    • 사용법이 간단한 반면, 데이터 유실 또는 순서 뒤바뀜 문제가 생긴다

  • 소켓

    • 단말기 사이에 통신할 수 있게 운영체제에서 제공하는 자원
  • TCP 네트워킹

    • 보내는 쪽 데이터가 받는 쪽에서 완전히 동일함을 보장해 주는 프로토콜

    • '연결' 과정이 필요하다. 연결 지향형

    • 연결은 일대일만 가능하다

    • 메시지 형태가 아니라 스트림 형태이다

    • 흐름제어기능을 통해 데이터가 상대방에게 정확히 전송됨

    • 세그먼트

      IP 패킷에 넣을 수 있는 크기의 단위

    • IP 패킷안에 세그먼트를 넣어서 송신한다

    • ACK(Acknowledge)

      • 세그먼트를 꺼내 받은 세그먼트 응답을 송신자에게 반송

      • 일정 시간안에 ack가 회수되지 않으면 상대방이 받았다는 응답이

        올 때까지 다시 세그먼트를 보낸다.

6.패킷 유실 시 UDP와 TCP에서의 현상
  • UDP에서는 데이터그램 자체가 유실

  • TCP에서는 패킷 유실이 발생하면 유실된 패킷에 대한 ACK가 도착하지 않는다

    재전송 -> 재전송 시간만큼 지연 시간이 발생

  • UDP는 주로 레이턴시가 민감하거나 패킷 유실이 있어도 괜찮은 곳에서 사용

  • 대부분 경우 TCP 사용

7.주로 사용하는 메시지 형식
  • HTTP JSON 같은 표준화된 형식을 쓰는 것이 일반적

  • 바이너리 형식 장단점

    • 사람이 읽기 어렵다
    • 디버깅이 까다롭다
    • 처리 성능이 낫다
    • 통신량도 적다
  • 메타데이터

    메시지가 자신이 어떤 내용을 담고 있는지에 대한 정보

    • 버전이 달라도 메시지를 받는 쪽에서 일부 필드를 이용하여

      정확한 정보를 얻을 수 있다

    • 서버에서 메시지 안에 원하는 내용 일부가 있는지 없는지에 따라

      작동을 다르게 만들어 준다면 버전1과 버전2의 클라이언트를

      동시에 처리할 수 있음

8. 네트워크 주소 변환
  • 네트워크 주소 변환(NAT)

    다른 단말기로 전송되던 패킷의 송신자 주소나 수신자 주소가

    다른 것으로 변환되는 과정을 의미한다

    EX) 인터넷 공유기

  • NAT 라우터가 하는 일

    IP 주소 1개를 여러 기기가 공용하도록 만들어 줌

  • 포트 매핑 엔트리

    송신자 끝점과 수신자 끝점을 이어 주는 매핑 정보를 생성

  • 홀펀칭

    포트 매핑 엔트리가 만들어지는 과정

  • 홀펀칭을 왜 하는가?

    • 공유기로 인해 가려진 호스트와 통신을 하기 위해서

    • NAT을 사용하는 경우 Packet을 내보내는건 가능하지만 Packet을 받아오는건 문제가 된다.

      왜냐하면 상대방 쪽에서는 NAT에 의해 가려진 client의 private endPoint를 모르기 떄문이다.

    • 상대방에게 먼저 NAT을 거쳐 통신을 하게된다면 NAT은 port를 바인딩하고 출발/목적지 IP Port를 매핑하여 들고 있다가 상대방이 내게 패킷을 보내면 NAT이 매핑 정보를 보고 private endPoint에 패킷을 전달하게 된다.

    • P2P 환경에서는 패킷을 서로 보낼 수는있는데 받을 방법이 없다.

    • 따라서 고정 IP를 가지는 서버 하나를 두고 두 클라이언트가 서버에 패킷을 보내면 서버는 보내려는 목적지 EndPoint를 상대방에게 알려주는 식으로 연결을 하게 된다.

    • 즉, 특정 서버에 연결을 하는게 아니라 서버를 통해 EndPoint를 받고 그 지점에다가 P2P 연결을(UDP 프로토콜 방식) 거는 것

    • 이러한 서버를 STUN Server라 하고 이 방식을 홀펀칭이라고 한다.

    • NAT에 따라 홀펀칭이 먹힐수도 안먹힐 수도 있다.

    • 홀펀칭이 먹히지 않을 때 Relay Server를 하나 두고 통신을 할 수 밖에 없다. Relay Server를 두는 네트워크 방식은 사실 P2P가 아니기에 의미가 없다.

    • 홀펀칭은 UDP관련 기술이다.