이번시간은 통신 모델에 대해서 알아 볼 것인데
이게 컴공에서 네트워크 시간에 배우는
OSI, 7Layer 등에 대한 내용이다.
일단,
예제를 통해 이게 뭐하는건지 잠깐 알아보도록 하자.
택배가 어떻게 보내졌었는지 다시 생각을 해보면
이런식으로 경로만 있다고해서 없던 택배가 막 보내지지는 않을 것이다.
그래서 중고나라 같은데서 거래를 한다고 하고 처음부터 생각을 해보면
그래서 상품을 마련을 해서 포장을 하기 시작할 것이다.
그다음 단계는 배송정책을 결정을 해야된다.
예를들어 등기 우편같은것을 보낼때는 어떻게 할것인지
중요한 물건이라고 했을 때는 보내고나서 꼭 수취인이 있고 사인을 해줘야지만 완료가 되고 없다면은 부재중을 남기고 다시 들고가서
다음에 다시 온다던지 하는 정책들을 말한다.
그리고 그다음은 이렇게 최종 주소를 기입을 하는데
이 최종 주소는 바뀌지 않는다.
그다음은 이제 단지경로인데
이것은
택배 운송 단계와 이어지는 것이다.
이 단지경로(+택배 운송)은 지금 노란색 선인데
단지경로는 계속 바뀌게 되는 것이다.
그냥 택배 아저씨한테 현대아파트 101호로 가주세요!라고하면
알 수가 없기 때문에
택배 아저씨한테 일단
1) 삼성 아파트 201호에서 -> 삼성아파트 경비실로 가주세요!
2) 경비실에서 -> 택배 배송센터로 가주세요!
3) 택배 배송센터에서 -> 현대아파트 경비실로 가주세요!
4) 현대아파트 경비실에서 -> 현대아파트 101호 가주세요!
이런식으로 단지경로 (+택배운송)은 바뀌게 된다.
이렇게 바뀜
그리고 최종주소는 한번 기입을 한게 영구적으로 남아 있고, 이렇게 바뀌지 않은 상태로 단지 경로 (+택배운송)만 계속 바뀌는 상태로 갈 것이다.
그래서 이렇게 얘기를 했으니까
이제 다시 네트워크 쪽으로 넘어 가보자.
우리가 이렇게 상품을 준비하는 단계가
"어플리케이션" 단계라고 하는데
즉, "유져 인터페이스"를 정의 하는것이다.
예를들어 웹통신을 할꺼면 HTTP라는 프로토콜을 사용을 할 것이고
파일을 다운로드 받을 꺼면 FTP라는 프로토콜을 사용을 할 것이다.
이런게 유져 인터페이스이고
우리가 만약에 MMO서버를 만들거면은
별도의 서버 프로토콜을 정의를 해서 사용을 하면 된다.
그래서 이부분이 "제품을 준비하는 단계"라고 생각하면된다.
그래서 이제 다음 단계로 내려오면은
트랜스포트 == 배송정책 결정 단계인데
여기서 대표적으로 TCP와 UDP라는 프로토콜이 있다.
이거는 사실 굉장히 굉장히 중요하기 때문에
나중에 다시 자세히 알아 볼 것이고
간략하게 설명을 하자면
UDP같은 경우에는 퀵으로 택배를 엄청 빠르게 보내는 대신
이녀석에 대한 사후처리는 안해 줄 것이다.
분실이 일어났거나 배송하다가 사고가 났다거나 그런부분을 처리도 안해주고 보장도 안해 줄 것이다.
TCP같은 경우에는 굉장히 꼼꼼히 처리를 해줄 것이다.
수취인을 입력을 하면은 패킷을 보낼때
수취인이 패킷을 받았는지 안 받았는지 왔다 갔다 거리면서 계속 체크를 해가지고
못 받았다면 처음부터 재차 전송을 할 것이고
추가적으로 전송하는 과정에서 패킷이 조금 변하지는 않았나..?? 에러 검출이 되지 않았나? 이런것들을 체크를 해가지고
여러가지 보안 장치를 마련 하는게 TCP가 될 것이다.
그래서 TCP는 굉장히 중요한데
보통 MMO에서는 TCP를 많이 활용을 한다.
"순서"가 보장이 되고 "안정성"이 확보가 된다는 게 중요하기 때문에 사용이되고
그게 아니라 무조건
속도가 최고다!
ex) FPS게임에서 이동 동기화를 해야되는데 FPS같은 경우는 핑이 굉장히 굉장히 중요하다.
이런경우에 UDP를 사용을 한다.
그래서 케바케라 어떤걸 사용해도 크게 문제는 되지 않고
장단점이 있다.
이녀석은 말 그대로 네트워크 간에 "경로"를 설정 하는 것이다.
대표적으로
로 주소를 정의하는 방법이 있고,
특이하게도 관련 장치는 라우터가 있다.
그래서 라우터는 사실 네트워크 단계에서 개입을 하는 장치라고 보면된다.
이 단계는 네트워크 내의 경로를 설정을 하는 단계이다.
즉, 같은 아파트 단지 내에 있는 장치들끼리 통신을 하는 상황에서 개입
대표적으로 프로토콜은
라는게 있고
관련장치로는 스위치가 있다.
이것은 말그대로 "물리적인" 신호 처리로 변환을 해주는 단계이다.
케이블 / 허브 이런 장치들이
피지컬 레이어와 관련이 있다.
이것을 이제 다시 요약을 해보면
( 어 트 네 데 피 )
그래서 1~5단계 까지 알아 본것이 "TCP / IP 모델" 이라는 것이다.
이 TCP / IP 모델 이 나오기전에 오래전에 유래가 된것은
"OSI 7 계층 모델"이라는 것이다.
거의 비슷한데 어플리케이션 단계가 3개로 쪼개져 있다.
이게 역사가 깊다 보니까 계속 남아있기는 하다.
그래서 요즘에도 그냥
"2계층 주소" or "2계층 장치"라고 하면은 그냥, "데이터 링크" 레이어 (단계)라고 생각하면 되고
"3계층 주소", "3계층 장치"라고 하면은 "네트워크" 단계를 말하는 것이다.
"2계층 주소" or "2계층 장치" == "데이터 링크" 레이어 (단계)
"3계층 주소", "3계층 장치" == "네트워크" 단계
7계층 == 어플리 케이션 단계
보면은 생각은 나야한다 == 외워라
그리고 여기서 보면은
주소가 여러가지가 있는데
우리가 사용할 주소는 "크게" 세가지가 될 것이다.
7계층 주소는 사실상 "도메인"에 해당을 하는 건데
"주소"를 숫자로 표현하면 너무 어려우니까
예를들면 naver에 접속을 할 때, "www.naver.com"이라는 주소로 접근을 한다.
이게 바로 "도메인 주소"를 얘기를 하는 것이다.
언젠가는 이 도메인주소를 네트워크 주소 (실제 주소)로 변경을 해서 사용을 해야되는데
(이부분은 나중에 알아 볼 것이고)
3계층 주소는 말그대로 네트워크 주소인 "IP"를 말하는 것이고
3계층 장치 == 라우터
2계층 주소는 "MAC" address (주소)를 얘기하는데
기기가 처음 생산이 될 때,
네트워크 카드에 그냥 박혀있는
그런 주소이다.
사실 이녀석은 기기가 변동이 되지 않는 이상 평생 보존이 되어있을 것이다.
2계층 장치 == 스위치
그래서 사실은 이것들을 왜 분리를 해서 사용을 하는지 곰곰히 생각을 해보면
이런식으로 하면 "표준"을 만든다고 보면된다.
2계층 장치 == 스위치, 3계층 장치 == 라우터 라고 했는데
모든 스위치랑 모든 라우터를 하나의 회사에서만 만드는 것은 아니다.
그렇다는 것은
이렇게 "표준"을 정해 놓으면은
2계층 장치인 스위치는 어떤 특정 회사의 제품을 사용을 하고,
3계층 장치인 "라우터"는 다른 회사 제품을 사용을 하고,
이런식으로 장치들을 이러저리 조립을 해가지고
최종적으로 우리가 만들 네트워크를 구성할 수 있다는 얘기이다.
예를들어 갑자기 인터넷이 안된다고 가정을 해보도록 하자.
수리 기사를 부르는데
수리기사가 무작정 기도를 해서 수리는 안한다
컴퓨터에 문제가 있는지 아니면 회선에 문제가 있는지 테스트를 해볼 것인데
책임을 명확하게
어플리케이션, 트랜스포트, 네트워크, 데이터 링크, 피지컬 이렇게
구분을 하면은
하나하나씩 테스트를 해보면 범인을 찾을 수 있다는 얘기이다.
그래서 라우터를 교체를 해보고 테스트를 해보았는데
잘되면 사실 "네트워크"문제였다는 것이고
( 라우터 3계층 장치 => 3계층 주소 )
그게 아니라 선만 바꿔 꼇는데 갑자기 잘 작동한다는 것은
"피지컬 단계"에서 뭔가 문제가 일어났다는 것이 될 것이다.
이렇게 해서 다양한 모델들을 사용한다는 것까지 알아보았다.
그래서 정확하게 이것을 어떻게 구현을 하는것이 중요하다기 보다는
이제 여기서 우리가 하나씩 골라서 쓰게 될 것이다.
예를들어 "트랜스포트" 단계에서 TCP를 골라서 사용하게 될 것이고
"네트워크"에서는 IP를 사용하게 될것이고
이런식으로 하나씩 조합을 해서 사용을 할 것이다.
그리고 또하나의 특징이 뭐냐하면은
이게 개념적으로만 상상속으로만 존재를 하는 것이 아니라
실제로도 이런식으로 "패킷"이 만들어 진다.
정보 ( == 패킷 말하는듯 )가 최종적으로 제일 위에서 (어플리케이션 단계)에서 시작을 해가지고
아래로 이동 (트랜스포트 -> 네트워크 -> 데이터 링크 -> 피지컬) 하면서
"패킷"이 점점 늘어난다고 보면은 되는데
예를들어 "Hello World"라는 짧은 문자를 네트워크 상으로 전달을 해본다고 가정을 하면은
그렇다면, "Hello World"는 "어플리케이션" 단계에서 "Hello World"라는 코드를 넣어 주게 될텐데,
실제로 "패킷"을 네트워크 상에서 어떻게 흘러가는지 까보면은
"Hello World"라는 단순한 정보만 있는게 아니라,
아래로 이동 (트랜스포트 -> 네트워크 -> 데이터 링크 -> 피지컬) 하면서
트랜스포트 단계에서 TCP와 관련된 정책들 (추가된 정보들)이 추가가 될 것이고
그다음에
IP와 관련된 정보들 (== 네트워크 단계) 즉,
목적지 주소와 보낸사람의 주소도 추가가 될 것이고
아래로 내려가면서
패킷이 계속 조금씩 조금씩 추가가 되가지고
운영이 될 것이다.
그럼 반대로
이렇게 보낼 때는 위에서 아래로 가는 거라고 했었는데
( 어 -> 트 -> 네 -> 데 -> 피 )
그럼 저기 오른쪽 에서 보면은
받는 입장에서 보면은
거꾸로 가는 것이다.
피 -> 데 -> 네 -> 트 -> 어 순으로 하나씩 하나씩 까서 먹는 그런 식이 될텐데
피지컬 단계에서는 신호처리를 컴퓨터가 알아볼 수 있는 전기적 신호로 바꾼다던지
(010101010과같은 데이터로 만들어 줄 것이고)
변환을 한다음에는 피 > 데 > 네 > 트 > 어 순으로 올라가게되는 것이다.
그래서 필요한 것들을 다 꺼내서 쓰고 (받는애가)
최종적으로 어플리케이션에서 "Hello World"가 들어가 있게 되는 것이다.
"Hello World"를 보냈다는게 우리 입장에서는 10byte이내의 짧은것을 보냈다고 생각을 할테지만
실제로 네트워크가 계속 이렇게 보내는 흐름을 생각해보면,
어 > 트 > 네 > 데 > 피 에서 이러이러한 여러가지 정보들이 추가가 되가지고
가는것을 이해를 해야한다.