게임서버 공부_네트워크

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

로컬 지역 네트워크 LAN : 네트워크 스위치 하나를 사에에 두고 별 모양으로 단말기가 연결되어있는 형태. star topology. 가운데 스워치로 데이터를 전달하고, 스위치는 목적지인 단말로 이를 전달. OSI모델의 표준만 지켜주면 제조사/통신규약이 달라도 네트워크가 가능. LAN이 성립하러면 OSI모델의 2 계층(Layer 2)를 지키면 되고, 이만 지켜준다면 회선의 종류(랜선, 무선, 전화선…)등등 상관이 없다.

2.1.1 OSI 모델

좋은 정보 + 이미지

data

osi flow

[네트워크 엑세스 계층]

물리적인 장치가 신호를 처리하고 특정 장치를 찾아가는 영역.

[인터넷 계층]

IP등을 이용해 라우팅을 하는 계층.

[전송 계층]

port를 통해 특정 프로그램까지 찾아가게하고 데이터의 신뢰성 정도(TCP/UDP)를 설정한다. 상위 계층(응용)이 전달된 데이터를 잘 가져다 쓸 수 있게 한다.

[응용 계층]

사용자가 실질적으로 application을 통해 소통하는 계층. OSI는…

게임 프로그램을 만드는건 5~7계층 중 어딘가를 정의하는 것. 소켓프로그래밍은 ???계층의 ?를 프로그래밍하는 것이다.

2.1.2 OSI 모델의 계층 2

각 단말기들은 LAN사이즈로 연결되며, 각각은 LAN내부에서 고유하다(MAC주소). 데이터를 헤더(주소)와 테일로 감싸서 프레임으로 만듦거나/이를 해석함.

2.1.3 OSI 모델의 계층 3

서로 다른 LAN이 연결된 WAN에서의 통신. 라우터(혹은 공유기)가 IP(인터넷 프로토콜)주소를 통해 적합한 경로를 탐색(라우팅)하여 LAN으로 데이터를 전달한다. LAN에서는 2L스위치나 공유기가 적합한 MAC주소를 가진 장비로 전달한다.

2.2 인터넷

이러한 스위치와 라우터가 연결된 망 전체를 인터넷이라고 한다.

2.3 컴퓨터 네트워크 데이터

네트워크나 서버 앱을 개발할때 프레임이나 패킷을 직접 다룰일은 많이 없다(물리적인 장치가 알아서 처리하므로). 대신 스트림과 메시지라는 것을 많이 다루게 된다.

2.3.1 스트림 형식

스트림 : 한쪽에서 다른 한쪽으로 연결된 데이터 흐름. 그 방향이 중요한거지, 어떤 단위로 끊을지 정해지지 않았기 때문에 스트림이라 표현하는듯하다.

데이터를 보낼때와 받을때 순서, 받은 개수 등등 중간과정은 다를수 있지만 결론적으로 이를 종합하면 같은 방식의 통신 형식.

2.3.2 메시지 형식

메시지 : 각 메세지를 정확히 구분해서 보낸때와 받을때 중간과정 결과 모두 동일한 방식의 통신 형식.

이러한 스트림/메세지 형태를 직접 다룰일은 많이 없다. OS부분에서 알아서 처리하기 때문이다.

큰 스트림이나 메세지를 전송하는 경우, 외부에서 볼때는 한번에 그 데이터가 왔다갔다 하는것처럼 보인다. 하지만 내부에서는 그 큰 데이터를 쪼개서 보낸다.

https://thebook.io/006884/ch02/04/

2.4 컴퓨터 네트워크 식별자

IPv4 vs IPv6 출처 : asmed

자세한 이론, 참조:bignet 블로그

포트

인터넷 프로토콜 스위트에서 포트(port)는 운영 체제 통신의 종단점이다. 이 용어는 하드웨어 장치에도 사용되지만, 소프트웨어에서는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다. 주로 포트를 사용하는 프로토콜은 전송 계층 프로토콜이라 하며, 예를 들어 전송 제어 프로토콜(TCP)와 사용자 데이터그램 프로토콜(UDP)가 있다. 각 포트는 번호로 구별되며 이 번호를 포트 번호라고 한다. 포트 번호는 IP 주소와 함께 쓰여 해당하는 프로토콜에 의해 사용된다. -위키피디아-

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

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

2.5.2 전송 속도와 전송 지연 시간

레이턴시 : 두 기기간 데이터를 최소량 전달할때 걸리는 시간(ms).

성능 지표

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

2.5.4 무선 네트워크의 품질

CSMA참고.

2.6 컴퓨터 네트워크에서 데이터 보내기와 받기

2.6.1 UDP 네트워킹

User Datagram Protocol. 사용자가 정의한 테이타그램을 보내는 통신 프로토콜.

UDP통신을 하기 위해서는 송신측과 수신측이 각각 소켓을 생성하고, 포트를 하나씩 점유해야한다.

메세지 형태로 데이터가 전송된다. 테스트 해보려고 했는데 도저히 안됬음…

2.6.2 TCP 네트워킹

TCP 헤더의 내용. 이외에도 굉장히 좋은 내용들.

TCP는 통신을 시작하기 전에 연결을 먼저 해야하는 연결 지향형인 통신이다. 처음 연결이 추가되지만 데이터 유실이 없음을 보장한다.

코드 참고 : https://pony11.tistory.com/10, 변수명이 이상한 것들이 있음. 수정하고 사용.

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

위와 같은 이유때문에 중요한 정보나 채팅 등 유실되면 안되지만 느려도 되는 데이터, UDP는 탄막이나 음성 등 잠깐의 정보 유실은 괜찮지만 느리면 안되는 데이터에 사용.

2.8 주로 사용하는 메시지 형식

TCP , UDP를 통해 전달되는 데이터의 형태는 주로 HTTP나 JSON같은 표준화된 형식일수 있고, 혹은 바이너리 형태의 데이터일수 있다.

메타데이터가 있는 데이터로 통신하는 경우, 서버측 업데이트로 인해 데이터의 순서나 내용이 추가되어도 클라이언트 측에서 정상작동 된다.

하지만 메타데이터가 데이터의 경우 서버측에서 보내는 데이터가 변경되면 클라이언트도 업데이트를 통해 반영시켜야 한다.

2.9 네트워크 주소 변환

NAT 라우터 = 공유기

통신사에 인터넷 신청을 하면 하나의 IP를 부여받는다(자주 바뀌는 IP긴함). 그리고 일반적으로 이 하나의 IP에 공유기를 연결하여 여러대의 유선장비와 무선장비를 연결한다. 이때 공유기와 연결된 장비들은 공유기에 의해 내부IP를 부여받는다.

포트매핑

내부아이피로 외부의 서버에 접속하는 방법. 포트매핑을 통해 사설IP를 가진 장비로도 외부의 서버와 통신할수 있다.

  1. 내부IP가 192.168.100.3인 기기의 3855번 포트에서 외부의 서버(209.131.36.158:80)에게 패킷을 보낸다(192.168.100.3:3855 -> 209.131.36.158:80).
  2. 공유기를 통과하면서 출발지가 공유기IP(142.12.131.7)의 6282번포트로 매핑된다((142.12.131.7:6282 -> 209.131.36.158:80).
  3. 서버는 패킷을 받고 처리하여 응답을 142.12.131.7:6282로 보낸다.
  4. 공유기는 6282포트로 받은 입력을 테이블에 매핑되어 있는 192.168.100.3:3855로 되돌려준다.

-> 외부의 서버는 요청을 한 기기의 사설 IP를 알 필요가 없다.

포트포워딩

공유기IP를 가지고 외부에서 내부IP에 접속하는 방법.

  1. 공유기등 NAT 라우터각 포트마다 서버의 포트들이 테이블에 매핑된다
    • 공유기 1024포트에 10.1.1.1:1024
    • 공유기 1025포트에 10.1.1.2:1024
    • 공유기 1026포트에 10.1.1.3:1033
    • 공유기 1027포트에 10.1.1.3:1034(이미지엔 없지만 가능함)
  2. 외부에서 라우터(대표IP)의 특정포트에 신호를 보내면, 이를 테이블에 매핑된 곳으로 보낸다.

https://mommoo.tistory.com/107

https://www.stevenjlee.net/2020/02/09/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-osi-7%EA%B3%84%EC%B8%B5-%EA%B7%B8%EB%A6%AC%EA%B3%A0-tcp-ip-4%EA%B3%84%EC%B8%B5/