네트워크를 다루는 수많은 책들 중 빠지지 않는 것이 있다면 OSI 7 Layer에 관한 내용일 것이다. 그렇다면 왜 그렇게 강조를 하는 것일까? 당연한 얘기겠지만 그만큼 중요해서 일 것이다. 문제는 OSI 7 Layer라는 것이 사실 초보자들에게는 조금 어렵다는 것인데, 그렇다고 그냥 넘어가서는 안된다. OSI 7 Layer의 핵심은 네트워크라는 하나의 흐름을 몇 개의 계층형태로 정리를 하고 있다는 것이다. 필자가 이것을 중요하게 언급하는 이유는 이러한 계층모델을 이해하고 나서 다음 과정을 공부하는 것과 이해하지 못하고 다음 과정을 공부하는 것은 너무나 큰 차이가 있기 때문이다.
네트워크에서 찾을 수 있는 라우터, 스위치, 허브 등 각종 장비들과, 네트워크상에서 구현되는 웹서비스, 메일서비스 등의 어플리케이션들, 이들 어플리케이션이 만드는 데이터를 전송해 주는 역할을 하는 TCP/IP 프로토콜 등 이 모든 것들이 OSI 7 Layer라고 하는 계층모델과 밀접한 연관성이 있기 때문이다. 그런 이유로 이것을 이해하면 그만큼 네트워크를 이해하는 속도가 빨라지게 된다. 2시간 공부해야 할 것이 1시간이면 이해할 수가 있게 될 것이다. 그렇게 시간을 단축할 수 있다면 다음 단원들을 위해서 조금 시간을 더 투자해 볼만 하다는 생각아닌가?
그렇다면 왜 이렇게 네트워크를 계층구조로서 구분해서 이야기를 하고 있을까? 그것은 네트워크상에서 컴퓨터와 컴퓨터가 데이터를 주고 받는다는 것이 그리 만만치만은 않다는데 있다. 한 컴퓨터에서 응용프로그램을 실행한 다음 데이터를 만들어 내서 상대방 컴퓨터에 이 데이터를 전달하기까지는 많은 작업이 필요하다.
먼저 상대방 컴퓨터가 누구인지를 판단해야 하며, 상대방 컴퓨터가 이 데이터를 인식할 수 있도록 데이터 포맷을 결정해야 하고, 상대방 컴퓨터의 이름을 근거로 해서 상대방 컴퓨터를 찾아갈 수 있는 방법을 결정해야 하고, 또한 데이터가 전송되다가 문제가 생겼을 때 체크할 수 있는 방법도 제공이 되야 한다. 이 모든 것을 하나로서 처리하기는 현실적으로 어렵다. 네트워크를 처음 공부하는 사람들에게나 이러한 네트워크 프로그램 및 프로토콜을 만드는 개발자들 입장에서도 이 모든 통신과정을 한꺼번에 처리하려고 한다면 그만큼 어렵게 느껴질 수 밖에 없을 것이다.
ISO(국제표준화기구;International Standard Organization)에서는 OSI(Open System Interconnection) Reference Model이라는 계층모델로써 네트워크에서 하나의 표준을 제시하고 있다. 이 OSI Reference Model은 일곱 개의 계층으로 나뉘어 있다고 해서 OSI 7 Layer라고 부르는 것이다. 이것을 원어 그대로 “오에쓰아이 세븐 레이어” 혹은 “오에쓰아이 칠계층”이라고 읽으면 된다. 계층모델은 네트워크를 하나로 바라보는 것이 아니라 네트워크 통신을 하는 과정을 단계별로 구분 지어서 각각의 계층별로 네트워크에 접근할 수 있게 해 준다. 결국 혼자서 다 처리하지 말고 맡은바 일만 제대로 처리를 하면 되는 분업을 통해서 효율성, 정확성을 기해 보자는 것이다.
예를 하나 들어보자. 당신이 지금 새로운 네트워크 프로그램을 개발하고 있다고 가정해 보겠다. 일단 먼저 해야 될 일은 사용자들이 컴퓨터를 켜고 실행할 수 있도록 사용자 인터페이스를 개발해야 할 것이고, 다음에 할 일은 이 응용프로그램이 만드는 데이터를 네트워크에 전송해야 할 것이므로 데이터를 실어나를 수 있는 프로토콜을 만들어 내야 할 것이다. TCP/IP와 같은 형태의 프로토콜을 개발해야 한다는 것을 의미한다.
그렇다고 이러한 프로토콜이 당신의 컴퓨터가 통신을 위해서 사용하는 랜케이블, 전화선 등에 데이터를 실어주지는 못한다. 그 작업은 바로 우리가 보통 랜카드라고 부르는 네트워크 어댑터 카드가 해 주는 일이다. 그래서 여러분은 다음 순서로 프로토콜이 네트워크 어댑터 카드에게 데이터 전송을 요청할 수 있도록 프로그래밍 해야만 할 것이다. 이런 일을 다 할 수 있는 개발자가 얼마나 있을까? 물론 한국의 개발자들이라면 해 내겠지만.
계층모델로 접근을 할때는 상황이 달라진다. 프로그램 개발자들은 응용프로그램을 개발한다. 그리고 나서 할일은 이 응용프로그램이 TCP/IP나 NetBEUI등의 프로토콜을 이용할 수 있도록 지정만 해 주면 된다. 프로토콜 개발자들은 응용프로그램으로부터 데이터를 넘겨 받아서 네트워크에서 통신하기 위한 약속들을 지키도록 몇가지 정보를 추가한 다음 네트워크 어댑터 카드로 보내주는 작업을 해 주면 된다. 네트워크 어댑터 카드는 프로토콜로부터 받은 데이터를 실제 케이블에 실어서 상대방 컴퓨터의 네트워크 어댑터 카드까지 갈 수 있도록 해 주면 된다. 각자 할일만 명확히 처리를 해 주면 되는 것이다. 계층모델을 가장 간단히 표현해 본 예제이다. 위와 같이 처리되는 것을 이해할 필요가 있다.
개발환경만 편해지는 것이 아니다. 더 큰 이점은 바로 당신, 시스템 관리자들에게 제공된다. 어느날 회사의 한 사용자가 인터넷이 안 된다고 불평을 하고 있다. 어떻게 해결해 주어야 할까? 사용자가 인터넷이라는 네트워크를 사용하기 위해 실행시킨 응용프로그램부터 추적을 해 봐야 할텐데 너무나 막연하진 않은가? 하지만 계층모델로 접근하면 보다 명확해 진다. 응용프로그램 자체가 문제가 생겼다면 데이터를 만들지도 못할 테니 당연히 네트워크에 실어보낼 수는 없을 것이다. 또, 데이터를 전송해 주는 프로토콜상의 문제라면 케이블이 불량이라거나, 허브가 꺼져 있다거나 하는 물리적인 문제와도 무관해진다. 라우터가 꺼져 있다거나 하는 물리적인 문제라면 역시 응용프로그램, 통신 프로토콜 등과도 무관해 지고. 이렇듯 문제가 생겼을 때 계층모델은 문제점을 계층별로 격리시켜서 문제해결을 하는데 도움을 주게 된다. 완전하지는 않더라도 보다 빠르게 문제점을 찾게 도와주는 것이다. 즉, 케이블이 불량인 경우인데도 엉뚱하게 시스템을 껐다 켠다거나 하는 식의 시간낭비는 하지 않게 해 준다는 얘기다.
OSI Reference Model의 7계층은 다음과 같다.
Layer 7 – Application
Layer 6 - Presentation
Layer 5 – Session
Layer 4 – Transport
Layer 3 – Network
Layer 2 – Data Link (MAC, LLC)
Layer 1 – Physical
이들을 외우라는 얘기는 아니다. 필자의 경험으로는 외운다고 해도 금방 잊게 될 것이다. 남들이 보기에 유식하게 보일 순 있어도 이것을 단순히 외운다고 큰 도움이 되지는 않는다. 다만 가장 기본이 되는 네트워크를 구분해 놓은 계층모델인 OSI 7 계층이 어떠한 계층들로 이루어져 있는지 살짝 들여다 봐 주기를 바란다. 각각의 계층이 어떤 역할을 하는지도 언급을 하지 않겠다. 그것보다는 네트워크를 계층구조로서 이해해 볼 것을 권한다.
위에서 이미 핵심을 예를 들었다. 다시 한번 마지막으로 정리를 해 보겠다. 한 컴퓨터에서 사용자가 웹브라우저를 실행하고, 네트워크에 있는 웹서버의 홈페이지에 접근을 한다고 가정을 해 볼까? 사용자는 웹브라우저라는 어플리케이션을 실행해야 한다. 이 어플리케이션은 사용자가 원하는 결과를 얻기 위해서 웹서버로 보내는 요청을 만들고 이 요청을 전달해줄 TCP/IP라는 프로토콜을 이용한다. TCP/IP 프로토콜은 네트워크 어댑터 카드에 데이터를 실어주고, 네트워크 어댑터 카드는 유선 혹은 무선을 이용해서 물리적인 환경으로 패킷을 전달한다.
하나의 흐름이지만 몇 개의 구성요소가 모여서 하나의 네트워크를 이룬다는 것을 알 수 있을 것이다. 이것이 네트워크이다. 이렇듯 계층(Layer)의 형태로 네트워크를 바라보는 눈을 키워야 한다. 우리가 무심코 사용하던 네트워크라는 것이 ‘이렇게 재미있구나’라는 생각을 가지게 됐으면 하는 바램이다.
조금 이야기가 길어졌다. 한가지만 기억하자. 네트워크라는 것은 계층모델로서 이해 해야 겠구나! 라는 생각을 가져 주면 된다. OSI 7 계층은 하나의 표준안을 제시한 것이지 모든 네트워크 환경에 반드시 일곱개의 계층으로 나눠져야 한다는 것은 아니다. 위의 예제를 잘 들여다 보면 완전하진 않지만 계층모델의 기본흐름은 그대로 따르고 있는 것을 알 수 있다.
마지막으로 그림으로 정리를 해 보자.