시작
네트워킹?
간단하게 데이터를 주고 받는 것으로 정의 내릴 수 있습니다.
데이터를 주고받는다고 말하면 상당히 범위가 넓은데 컴퓨터 내부를 살펴보면
데이터가 이동하는것이라고 보면 HDD(SSD) -> RAM -> CPU 로 데이터가 이동하고, 처리된 다음에 CPU -> RAM 으로 이동하고 파일을 저장할 것이 있으면 HDD(SSD)로 들어가는데
엄밀히 따지면 컴퓨터 내부에서 일어나는 데이터의 교환도 네트워킹이라고 볼 순 있지만 흔히 얘기하는 네트워킹은 이것과는 거리가 멀고, 멀리 떨어져있는 컴퓨터간의 데이터가 옮겨가는 것을 의미합니다.
예를 들면 한국에 있는 개인 PC에서 Amazon.com을 쳤을 때 미국에 있는 서버에서 데이터를 받아오게 되는데
한국에 있는 서버에서 Request를 보내면 미국에서 데이터가 오는 것을 보통 네트워킹이라 합니다.
컴퓨터 내부에서 일어나는 네트워킹도 네트워킹이고, 외부의 컴퓨터간에 일어나는 네트워킹도 네트워킹인데 이 둘 사이에는 근본적인 차이점이 있습니다.
그 차이점을 이해해야 네트워킹에 대해 이해 할 수 있습니다다.
첫번째 차이점은 지연시간(latency)이 발생 한다는 점입니다.
말 그대로 시간이 지연된다는 의미인데요.
어떤 컴퓨터에서 다른 컴퓨터에 데이터를 전송 할 때 시간이 오래걸린다는 의미입니다.
예를 들어 컴퓨터 내부에서 일어나는 네트워크라면 CPU와 RAM과의 데이터를 교환한다 보았을 때 이 둘은 거리가 매우 짧아 굉장히 빠른 속도로 통신이 일어납니다.
전자가 왔다 갔다 하는 것이므로 빛의 속도로 움직이며, 인간이 알아차릴 수가 없을 정도로 지연시간이 굉장히 짧습니다.
그런데 멀리 떨어져 있는 두 컴퓨터 간에는 물리적인 거리가 굉장히 먼데, 예를 들어 지구 반대편에 있는 한국과 지구 반대편에 있는 미국으로 데이터를 보낸다 했을 때
이 거리는 지구 반바퀴를 도는 거리와 맞먹게 됩니다.
빛이 광 케이블로 연결 되어있다 하더라도 빛이 왔다갔다 하는 데는 물리적인 시간이 드는데
지구가 한바퀴를 도는데 보통 133ms가 걸리는데 0.13초입니다.
우리가 봤을 때는 상당히 빠른 속도이지만 컴퓨터 환경에서 따지고 보면 굉장히 느린 속도입니다.
실 예로 지연속도(Ping)가 있는데 어떤 게임을 플레이 할 때 100을 넘어가도 굉장히 느리다고 느끼기 때문입니다.
그러니까 Ping이 100ms가 걸린다는 것은 내가 어떤 응답을 보냈을 때 반응이 오는 데 까지 걸리는 시간이 100ms가 걸린다는 의미입니다.
가는데 50ms가 걸리고, 오는데 50ms가 걸려야 100ms가 걸립니다.
50ms도 굉장히 느리다고 체감되는데 133ms는 빠른 속도는 아닙니다.
격투게임만 놓고 보더라도 지구 반대편에 서버가 있고 두 플레이어가 서버에 접속해서 격투게임을 한다고 가정해봅시다.
지구 반바퀴를 가는데 가는 속도가 133/2만큼 걸릴 것이고, 이것을 왔다 갔다 하니까 라운드 트립 타임에서는 133ms가 걸립니다.
round-trip time, RTT라는 것인데 왕복속도를 의미합니다.
그런데 격투 게임은 보통 초당 프레임이 30 또는 60 프레임이 나오는데 그래서 주먹버튼을 눌렀을 때 주먹이 나가는 반응이 빠를 수록 좋은데, 주먹 버튼을 눌러서 서버에서 응답이 와서 실제로 주먹이 나가는 지연시간이 133ms이 되는 것이고, 프레임으로 나눠보면 8프레임 정도가 걸리게 됩니다.
8프레임 이후로 주먹이 나가니까 굉장히 느린 속도입니다.
그래서 게임을 만들 때는 이 지연시간(latency)를 얼마나 효과적으로 눈속임 할 수 있는 가가 가장 중요한 이슈가 됩니다.
그런데 이 지연시간(latency)은 물리적인 한계이기 때문에 이것을 줄일 수 가 없습니다.
아무리 빨라도 133ms라는 한계는 극복하기 힘듭니다.
두번째 차이점은 연결 안정성이 문제가 됩니다.
두 컴퓨터가 다이렉트로 광케이블로 연결되어 있다고 하면 두 컴퓨터 중 하나가 다운되지 않는 이상 두 컴퓨터 연결이 끊어질 일이 없습니다.
하지만 실제 상황인 웹에서는(World Wide Web이라고 얘기하는데) 어떤 지점에서 한 지점으로 가는 경로가 다이렉트로 가는 것이 아니라 여러 컴퓨터를 거쳐서 가는데
그 거점중에 하나의 장비가 문제가 생기면 내 장비에서 문제가 생기지 않더라도 연결이 끊어지게 됩니다.
예를 들어 한국에서 아마존을 클릭했다 가정하면 집에서 ISP로 연결을 하는데요. (LG or KT or SKT) 그 다음 백본으로 가게 되고, 일본 백본으로 가게 됩니다.
일본에서 태평양 해상 케이블을 타고 미국으로 가게 되는데 미국 백본으로 가게됩니다. 그 다음에 미국 ISP로 연결이 되고, 그 다음에 아마존 서버로 연결이 대략적으로 여러 거점을 거쳐서 갈텐데
이 도중에 어떤 곳이라도 문제가 생기면 연결이 끊어질 수 있습니다.
실제로 동인도 지진이 일어 났을 때 일본과 미국을 연결하는 지하 해상 케이블이 끊어져서 한 동안 미국 쪽 네트워크가 느려진 것이 그 예입니다.
가는 거점이 많다 보니까 이 연결이 취약하고, 언제든지 연결이 끊어질 수 있습니다.
특히 요즘에는 모바일 환경이 되다보니 무선 네트워크 환경이 되어 예전보다 훨씬 빨리, 많이 연결이 끊어지는 일들이 일어나고 있지요.
순간 연결이 끊어지는 상태, 그러니까 게임을 하는데 지하철이 와이파이가 잡히지 않는 곳에서 들어갔다가 다시 나오는 경우 그 사이 동안 순간 순간 끊어지는 상황들이 많이 발생 되는데 이 끊김을 얼마나 잘 커버하는지가 모바일 게임에서의 이슈 중에 하나 입니다.
세번째 차이점은 순서 비보장 입니다.
순서가 보장되지 않습니다.
예를 들어 내부네트워크에서 CPU와 RAM에서 데이터를 주고 받을 때 전선으로 연결 되어 있는데 전선으로 연결되어 있다는 것은
일종의 큐(queue)라고 보면 되는데
관을 통해서 빛(광자)이 가는데 이게 순서대로 가게 됩니다. 123을 보내면 받은 쪽도 123으로 받습니다.
그런데 인터넷 환경에서는 123으로 보냈다고 해서 123으로 받는다는 보장이 없습니다. 321로 받을수도 있고, 213으로 받을 수도 있어요.
그 이유는 인터넷이 World Wide Web이다 보니 가는 거점이 굉장히 많기 때문인데요. 그래서 어떤 두 지점을 가는데 꼭 하나의 경로로만 갈 필요가 없죠. 갈 수 있는 경로가 굉장히 다양합니다.
그래서 패킷을 보내면 갈 수 있는 모든 곳에 살포를 하는데 가장 빨리 도착하는 경로를 기억(캐싱)하고 있다가 다음번엔 그것을 이용해서 보내면 좀 더 효율적으로 보낼 수 있게 됩니다.
그래서 살포해서 먼저 도착하는 쪽으로 가기 때문에 같이 살포했다고 해서 그 모든 패킷이 도착시간이 모두 똑같다고 보장 할 수 없어요. 어떤 패킷은 빨리오고 어떤 패킷을 늦게 올 수 있기 때문인데요.
그래서 123을 보냈는데 213이 올 수 있고, 321이 올 수도 있는데 이건 아무도 모릅니다.
그래서 이 패킷의 순서를 어떻게 보장하느냐가 관건이 되는데요
정리해보면
- 지연 시간이 걸린다
- 연결이 불안정하다.
- 순서 비보장이다.
거리가 먼 곳에서 네트워킹 할 때 이 3가지 문제점이 발생합니다.
그래서 컴퓨터에서 네트워킹을 할 때 요 3가지를 어떻게 핸들링 하는가가 가장 중요한 이슈가 됩니다.
컴퓨터 내부의 네트워킹 | 외부의 컴퓨터 간에 네트워킹 | |
---|---|---|
차이점 | 1. 지연시간(latency)이 발생 안함. 2. 연결안정성이 문제 없음. 3. 순서 보장. |
1. 지연시간(latency)이 발생함. 2. 연결안정성이 문제 발생. 3. 순서 비보장. |
'Networking' 카테고리의 다른 글
[바미] P2P, Relay 서버 방식에 대해 알아보자! (2) | 2020.12.18 |
---|---|
[바미] 중계서버와 그 외 유용한 방식들에 대해 알아봅시다. (0) | 2020.12.18 |
[바미] Delay 와 Rollback에 대해 알아보자! (0) | 2020.12.18 |
[바미] Deterministic방식에 대해 알아보자! (0) | 2020.12.18 |
[바미] Protocol TCP,UDP에 대해 알아봅시다. (0) | 2020.12.18 |