개요
이번 장에서는 게임 서버 프로그래밍에 필요한 네트워크 지식을 다룬다.
네트워크 구성
네트워크는 실제 통신을 하는 기기인 단말기와 그 연결을 위해 존재하는 네트워크 기기로 구성된다.
단말기는 컴퓨터, 핸드폰 등이 있으며 네트워크 기기는 스위치, 라우터등이 존재한다.
단말기들은 스위치같은 네트워크 기기들을 통해 LAN이라는 작은 규모의 지역 네트워크를 구성하며 이러한 LAN들이 라우터들로 연결되어 WAN이라는 광역 네트워크를 구성하게 된다. 이때 지구 전체를 덮은 WAN이 바로 인터넷이다.
OSI 모델
인터넷은 다음과 같은 프로토콜 계층으로 구성된다.
- 물리 계층 : 전류, 광 등의 물리 통신 담당
- 데이터 링크 계층 : LAN안에서의 통신을 담당, MAC주소를 이용하여 트래킹
- 네트워크 계층: WAN에서 라우터들 끼리의 통신을 담당, IP주소를 이용하여 트래킹
- 트랜스 포트 계층: 패킷 전달 보장등의 여러 다목적 및 특정 프로세스로의 통신을 담당
- 애플리케이션 계층: OSI 모델에서는 3계층으로 구분되며 실제 통신을 하는 애플리케이션에 해당
컴퓨터 네트워크 식별자
네트워크에는 다음과 같은 식별자들이 존재한다.
IP : 네트워크 계층 통신에서 사용되는 주소이다. IPv4로 시작하였지만 현재 IP고갈로 IPv6로 전환중이다. 하지만 아직 두가지가 혼용되므로 둘다 호환되는 프로그래밍 기술이 필요하다. DNS 서버를 통해 도메인으로 대신 표현될 수 있다.
fort : 트랜스 포트 계층 통신에서 사용되는 주소이다. 각 프로세스를 구분하는데 사용된다.
MAC : 데이터 링크 계층 통신에 사용되는 기기 주소이다. 각 기기별로 고유하다.
어플리케이션에서 다른 단말기에 대한 통신은 해당 단말기의 IP(또는 도메인)와 통신할 프로세스의 fort를 입력하여 통신한다. MAC은 자동으로 처리된다.
단말기 간 통신
단말기 a에서 b로의 통신은 다음과 같이 이루어진다.
a에서 b의 IP로 데이터를 보냄, 이때 IP주소의 서브넷 마스크를 이용하여 각자 어떤 서브넷(LAN)에 속한지 파악할 수 있음
(1)같은 서브넷인 경우
데이터 링크 계층에서 IP - MAC주소 테이블로 b의 MAC주소 알아내고 데이터 링크 트래킹으로 바로 전달
(2)다른 서브넷인 경우
1.목적지 IP는 b의 IP로, MAC은 게이트웨이 라우터로 하여 데이터 링크 트래킹으로 보냄
2.라우터에서 IP를 보고 네트워크 트래킹으로 b의 서브넷 게이트 웨이까지 보냄
3.b의 게이트웨이에서 b의 IP주소로 MAC주소를 얻고 데이터 링크 트래킹으로 b까지 보냄
NAT
현재 인터넷의 IP주소 고갈 문제로 각 단말기 별로 전역적으로 고유한 IP가 아닌 특정 지역별로 고유한 IP를 사용한다. 이러한 방식으로 전역통신은 다음과 같은 NAT방식으로 이루어진다.
0. NAT 게이트 웨이 라우터는 전역적으로 고유한 IP를 가지며 그 영역의 단말기들은 지역적으로 고유한 IP를 가짐
1. NAT 게이트 웨이 라우터의 영역에 단말기가 연결됨
2. 해당 영역에서 고유한 IP가 해당 단말기에 주어짐
3. 해당 단말기에서 외부로 패킷 송신
4. NAT 게이트 웨이 라우터에서 해당 단말기 IP에 특정 포트를 부여하고 테이블에 기록
5. 해당 포트와 자신의 IP로 송신자를 바꾸고 패킷을 보냄
6. 해당 포트와 자신의 IP를 대상으로 답장이옴
7. 해당 포트에 해당되는 IP의 단말기에 답장을 전달해줌.
기본적으로 NAT 지역 고유 IP를 가진 단말기는 클라이언트 역할을 수행하며 서버 역할을 하기위해서는 추가적인 기법이 필요하다.
네트워크 품질
네트워크 통신 품질은 다음 요소들로 결정된다.
1. 대역폭
2. 전달 속도
3. 패킷 유실율
컴퓨터 네트워크 데이터
어플리케이션 관점에서 통신으로 주고 받는 데이터는 다음 두가지로 분류 할 수 있다.
- 스트림 형식
한 쪽에서 보낸 데이터가 랜덤하게 잘려서 전달된다. 즉 aaa, bbb, ccc로 보내도 aa, ab, bbc, cc이런식으로 올 수 있다. 하지만 데이터 순서는 보장된다.
2. 메세지 형식
한 쪽에서 보낸 데이터가 잘리지 않고 전달된다. 하지만 순서는 보장되지 않는다. 즉 aaa, bbb, ccc로 보내면 aaa, ccc, bbb등으로 온다.
보통 tcp는 스트림 형식, udp는 메세지 형식으로 제공된다.
TCP UDP
데이터 통신 방법은 트랜스 포트 계층을 TCP로 쓰느냐, UDP로 쓰느냐에 따라 달라진다. 이는 두가지의 차이점이다.
UDP
연결 없이 바로 통신이 가능하다.
수신자에서 특정 포트로 UDP 포트를 열면 송신자는 해당 포트에 메세지를 보낸다. 그러면 해당 메시지가 바로 전달된다. 이때 메세지 패킷이 유실되면 그냥 송신이 유실된다.
TCP
연결 후 통신이 가능하다.
수신자가 특정 포트로 TCP 연결 포트를 열면 송신자는 해당 포트로 연결 요청을 보낸다. 수신자가 연결 요쳥을 받으면 특정 포트를 하나열고 해당 포트를 송신자의 포트와 연결하고 수락한다. 이후 송신자와 수신자는 해당 포트로 스트림 송수신이 가능하다. 여기서 데이터 유실시 재전송을 통해 유실을 막는다. 즉 데이터 유실대신 속도 저하로 이어진다.
UDP는 기본 오버헤드가 적고 패킷 유실시 재전송도 없으므로 전체적인 속도가 좋지만 손실이 발생한다. 따라서 손실 방지보다 속도가 중요한 캐릭터 이동 정보 전달등에 사용되며 TCP는 전체적인 속도가 느린대신 손실이 방지되기에 손실 방지가 중요한 중요 데이터 전달등에 사용된다. 보통 게임 서버 프로그래밍에서는 대부분 TCP가 사용된다.
참고서적
게임 서버 프로그래밍 교과서
'네트워크 > 게임 서버 프로그래밍' 카테고리의 다른 글
[게임 서버][6장]프라우드넷 (0) | 2023.03.21 |
---|---|
[게임 서버][5장]게임 네트워킹 (1) | 2023.03.21 |
[게임 서버][4장]게임 서버와 클라이언트 (0) | 2023.03.21 |
[게임 서버][3장]소켓 프로그래밍 (0) | 2023.03.21 |
[게임 서버][1장]멀티 스레딩 (0) | 2023.03.21 |