해당 내용은 게임 서버 프로그래밍교과서의 내용을 참고했습니다.

컴퓨터 네트워크를 구성하는 기기

컴퓨터 네트워크는 단말기와 네트워크 기기로 구성된다.
단말기 : 통신을 하는 주체, 클라이언트와 서버로 구분됨.
클라이언트 : 사람이 만지는 컴퓨터
서버 : 많은 사람이 만지는 단말기에 서비스를 제공하는 무인 컴퓨터

가장 기본적인 네트워크 구성은 두 단말기를 직접 네트워크 케이블로 연결하는 것
이를 링 모양으로 만들어 여러 컴퓨터들을 모을 수 있다.

하지만 요즘은 대부분 네트워크 기기를 이용하여 각 컴퓨터에서 네트워크 기기와 연결하는 방식으로 연결한다.

LAN(Local Area Network)

네트워크 스위치 하나를 두고 단말기들이 연결되어 있는 것
단말기 끼리 통신을 할때 스위치로 내용을 전송하면 스위치가 대상 단말기로 정보를 보내준다.

OSI 모델

계층1~계층7

계층 1: 물리 계층

하드웨어를 다룸.보낼 데이터를 어떤 파형으로 보낼지 등으루정의하는 계층

계층 2: 데이터 링크 계층

로컬 지역 네트워크에서 통신을 가능하게 한다.

계층 3: 네트워크 계층

광역 통신망(WAN)에서 통신을 가능하게 함.

계층 4: 전송 계층

상대방에게 데이터가 반드시 도착하게 하는 계층.

계층 5: 세션 계층

계층 6: 표현 계층

계층 7: 응용 계층

이 계층들은 응용 프로그램이나 운영체제 안 모듈이 다른 컴퓨터의 응용 프로그램이나 운영체제 모듈과 통신을 하는 동안의 논리적 연결 단위나 기능
동영상 스트리밍의 통신 규약(MPEG), 통신 암호화 규약(SSL), 웹 브라우저와 웹 서버 간 통신규약(HTTP)등이 있음.

계층 2

각 단말기는 고유한 주소를 가짐.
각 단말기는 데이터를 프레임이라는 단위로 주고받음.
프레임에는 데이터와 송신자가 적혀 있는 헤더가 있으며, 스위치를 통해 송신자에게 전달된다.
하지만

  • 스위치 하나가 연결할 수 있는 단말기 수가 제한되어 있고
  • 단말기들 각각의 주소를 고유하게 만들기 어렵다.

따라서 서로 다른 네트워크 기기 간에 연결을 통해 문제를 해결하며, 이를 광역 통신망(WAN)이라 한다.

계층 3

연결하는 단말기가 많아지면 단말기마다 번호를 매기는 방법으로는 한계가 생긴다. 따라서 서로 다른 이름의 구역으로 나누게 되며, 이를 가능하게 하는 규약이 OSI 모델의 계층 3이다.

WAN에서는 직접 데이터를 건네는 것이 아니라 계층적으로 데이터를 건네는 방식으로 작동한다.
어떤 데이터가 단말기에서 스위치로 갔는데 해당 데이터의 목적지가 그 스위치가 건네줄 수 없는 곳에 있으면 이를 취급할 수 있는 곳으로 데이터를 보내야 한다. 이를 라우터라 한다.

라우터

라우터는 LAN사이에 컴퓨터 통신을 가능하게 하는 장비이다.
데이터를 수신 할 단말기가 LAN안에 없으면 스위치는 데이터를 라우터에 보내고, 라우터는 이를 단말기가 있는 LAN으로 전달해 처리하게 한다.

인터넷

OSI모델 계층 3의 인터넷 프로토콜, 즉 IP 규약을 지키면 기기 종류와 상관 없이 서로 통신할 수 있다.
이렇게 수많은 종류의 많은 스위치와 라우터가 연결되어 지구를 뒤덮고 있는데, 이를 인터넷이라 한다.

컴퓨터 네트워크 데이터

스트림 형식

스트림은 데이터의 흐름이다. 두 단말기를 연결한 후 그 연결을 끊기 전까지 한쪽에서 다른 한쪽으로 연결된 데이터 흐름 하나를 일컫는다.
스트림의 개념은 조금 독특한데,
A컴퓨터에서 aaa,bbb,ccc를 보내면
B컴퓨터에서 aa,abbb,cc,c를 수신할 수 있다.
개별 수신한 데이터는 다르지만, 합치면 같은 데이터이다.

따라서 데이터가 여러 부분으로 나뉘어 있다면 보낼 데이터 크기를 먼저 보낸다던지, 데이터 시작이나 끝을 알리는 기호를 추가하여 이를 정의해 주어야 한다.
전자는 헤더를 붙이는 방식, 후자는 구분자를 이용하는 방식이다.

메시지 형식

스트림과 달리 메시지는 자체적으로 데이터 시작과 끝을 구별할 수 있다.
메시지 형식은 시작과 끝을 구별할 필요가 없다. 메시지를 여러 부분으로 나누어 사용하는 것으로 충분하다.

컴퓨터 네트워크 식별자

컴퓨터 네트워크 식별자는 주소이다. 주소는 인터넷에서 모두 고유하다.
컴퓨터 기기는 IP주소를 2개 이상 가질 수 있다.

IP주소는 크게 버전4 주소 형식(IPv4)과 버전6 주소 형식(IPv6)이 있다.

IPv4

수십년 동안 사용되어서 지금은 한계에 이르러 40억개 이상은 배정할 수 없다.
IPv4주소는 특정 범위 안에서 여러 기관에 분배한 후 다시 그 안에서 여러 단계에 걸쳐 분배되는 방식이고, 실제 주소로 사용할 수 없는 예약 범위도 있다.

IPv6

IPv4의 한계를 극복하기 위한 표준. 16바이트 크기의 주소 형식을 사용한다.
IPv4와 IPv6는 서로 호환되지 않는다.

포트

단말기 마다 IP가 있지만, 단말기 안에서 작동하는 프로세스는 여러 개인데, 이 중 누가 보낸 것인지 모르기 때문에 포트가 필요하다.
한 IP주소 안에서도 누가 주고받는 것인지 식별하는 역할을 하는 것이 포트다.

호스트 이름

모든 기기에 IP주소만 있으면 불편하다.
페이스북을 11.22.33.44로 접속한다면 매우 번거롭기 때문에, 영어 문장 형식으로 입력하면 이를 IP주소로 변환하는 것이 보편화되어 있다.
이때, 영어 단어 형식의 기기 주소를 호스트 이름이라 한다.

우리가 호스트 이름을 입력하면 도메인 이름 서버(DNS server)에서 이를 IP주소로 변환한다.

컴퓨터 네트워크의 품질과 특성

네트워크 품질을 저해하는 것

패킷 유실

만약 스위치나 라우터에 자신이 처리할 수 있는 한계를 넘는 데이터가 수신되면 어떻게 될까?

  1. 자기가 처리할 수 있는 것 이상을 버린다.
  2. 아직 처리하지 못한 것들을 메모리에 누적한다.

1번 경우에는 패킷 드롭이라 하며, 패킷을 버리는 패킷 유실이 일어남.
2번 경우에는 라우터가 느리게 작동하거나 작동하지 못한다.
사실상 이런 경우에는 초과분을 버리는 것이 낫다.

패킷 유실은 외부의 잡음, 신호가 약해질 수 있어 데이터 내용이 달라질 수 있다.
이 오류는 계층 2나 계층 3의 체크섬 검사로 확인할 수 있으며, 발견되면 데이터 수정을 시도한다.

전송 속도와 전송 지연 시간

전송 속도

두 기기 간에 초당 전송될 수 있는 최대 데이터양을 의미한다.
두 기기 간의 매체인 선로의 종류와 품질, 두 기기의 소프트웨어와 하드웨어 종류가 영향을 준다.

전송 지연 시간

두 기기 간에 테이터를 최소량 전송할 때 걸리는 시간을 의미한다.
영향을 주는 것으로는 매체의 종류화 품질, 송신자-수신자 사이의 라우터 처리 속도가 있음.

네트워크 품질 기준

  • 전송 속도
  • 패킷 유실률
  • 레이턴시

전송 속도는 전송될 수 있는 데이터의 단위 시간당 총량을 의미한다.
회선의 종류가 좋을수록, 네트워크 장비 처리 속도가 빠를수록 향상된다.

패킷 유실률은 전송되는 데이터가 중간에 버려지는 비율이며, 회선 품질이 좋을수록, 경로에 있는 라우터 개수가 적을수록, 라우터의 처리 성능이 좋을수록 낮아진다.

레이턴시는 전송되는 데이터가 목적지에 도착하는데 걸리는 시간이다. 회선 길이가 길수록 높고, 경로에 라우터 개수가 많을수록 높다.

무선 네트워크의 품질

와이파이에서는 데이터를 전송할 때 다음과 같이 작동한다.

  1. 데이터를 전파로 변환하여 보내기 직전에 안테나를 통해 다른 전파가 감지되는지 확인한다.
  2. 전파가 감지되는 것이 없으면 전파를 보낸다.
  3. 전파가 감지되면 잠시 기다렸다가 1~2과정을 반복한다.
  4. 신호를 보낸 후 상대방에게서 '신호를 받았음'응답이 오는지 체크한다.
  5. 응답이 일정 시간 없으면 보냈던 신호를 다시 보낸다.

이렇게 작동되는 과정을 CSMA(Carrier Sense Multiple Access)라고 한다.

컴퓨터 네트워크에서 데이터 보내기와 받기(계층 4)

UDP 네트워킹

User Datagram Protocol의 약어, 사용자가 정의한 데이터그램을 상대방에게 보낼 수 있게 하는 통신 규약이다.
UDP는 패킷 유실 현상이 발생할 수 있다.메시지 중 하나 이상을 못 받거나 같은 데이터그램을 두번 이상 받을 가능성이 있으며, 보낸 순서와 다르게 데이터그램을 받을 수도 있다.

따라서 받는 쪽에서 데이터그램 유실이나 순서 뒤바뀜 혹은 중복 수신 현상이 발생해도 괜찮을 때 UDP를 사용하는 것이 좋다. 예를 들어 동영상이나 음성 데이터를 보낼 때는 중간에 조금 잃어버려도 괜찮다.

UDP로 데이터를 주고받으려면 소켓을 생성해야 한다. 소켓은 단말기 사이에 통신할 수 있게 운영체제에서 제공하는 자원이다.

UDP의 특징은 다대다 관계가 가능하다는 점이다. 상대방의 호스트 이름 혹은 IP주소와 포트값만 알면 우편을 보내듯이 보낼 수 있다.

하지만 데이터 유실 혹은 순서 뒤바뀜이 가능하다. 따라서 종확한 데이터를 받으려면 데이터를 검사하고 잘못되었으면 다시 보내는 대책이 필요하다.

TCP 네트워킹

Transmission Control Protocol의 약어로, 보내는 쪽 데이터가 받는 쪽 데이터와 완전히 동일함을 보장해 주는 프로토콜.

하지만 TCP는 데이터를 주고받기 전에 연결이라는 과정을 해야 한다. 따라서 이를 보고 연결 지향형이라고 한다.
연결은 일대일만 가능하다.

TCP는 특이하게 스트림 형식이다.

패킷 유실 시 UDP와 TCP에서의 현상

UDP

패킷 유실 시 데이터그램 자체가 유실된다. 게다가 데이터그램의 크기가 클 수록 유실될 확률도 높다.

TCP

패킷 유실이 발생하면 유실된 패킷에 대한 ack가 도착하지 않는다. 송신 측에서는 ack가 올 때까지 기다리지만 ack가 오지 않으면 다시 패킷을 보낸다.
수신 측에서는 도착하지 않은 패킷이 있으므로 다른 패킷이 다 도착하더라도 데이터 스트림을 조립하지 못한다.

따라서 UDP에서는 데이터그램이 유실되지만 TCP에서는 지연 시간이 발생한다.
때문에 TCP에서는 평균 레이턴시가 더 높으며, 더 불쾌감을 준다.

주로 사용하는 메시지 형식

게임의 메시지는 텍스트나 바이너리 형식으로 정의한다.

텍스트 형식

과거에는 각 게임 개발자가 자체 정의하는 경우가 많았지만 요즘은 HTTP나 JSON같은 표준화된 형식을 사용하는 것이 일반적이다.
이를 분석하기 위해 구문 분석기(parser)가 필요하다.

바이너리 형식

사람이 읽기 어려우며, 각 바이트, 혹은 비트 필드는 특정한 의미를 가진다.
구문 분석기가 필요 없으며, 처리 성능이 낫고, 통신량도 적다. 해커의 접근도 어렵다. 하지만 디버깅이 까다롭다는 단점이 있다.

메타 데이터

메시지 안에 내용을 담는 것 뿐만 아니라 그 메시지 내용이 어떤 것을 담고 있는지의 정보를 같이 포함시키는 형식.
통신량이 많아지고, 해커에게도 더 쉽게 노출된다는 단점이 있지만 하위 호환성 측면에서는 유리하다.

네크워크 주소 변환(NAT)

다른 단말기로 전송되던 패킷의 송신자 주소나 수신자 주소가 다른 것으로 변환되는 과정을 의미함.
이는 인터넷 공유기처럼 주소 1개로 여러 기기가 공유하는 용도로 활용한다.

profile
코린이

0개의 댓글