그 동안 운영체제에 관한 글만 써서 포스팅하기 적당할 것 같은 다른 분야를 찾다보니 네트워크와 관련된 내용을 써보는 것이 좋을 것 같아서 이번에는 네트워크의 가장 기본적인 모형인 OSI 참조 모델에 대해 글을 써보려고 한다. 완전히 기본적인 개념이기도 하고, OSI 참조 모델이 처음 발표된 지는 거의 35년이나 흘러서 이곳 저곳 OSI 참조 모델에 대한 글을 쉽게 찾아볼 수도 있기 때문에 스킵하고 넘어갈까 생각도 했지만 아무래도 쓰는 편이 좋을 것 같다고 생각했다. 왜냐하면, 기본이 가장 중요하다는 말도 있듯이 OSI 참조 모델에 관련된 내용은 면접 질문에서 나올 가능성이 매우 높을 뿐만 아니라 정보처리기사 시험에도 필수적으로 출제되는 부분이기 때문이다.
흔히들 OSI 7계층 모델, 또는 OSI 모형이라고들 말한다. 영어로는 Open Systems Interconnection Reference Model이니 어쩌면 OSI 참조 모델이라는 말이 한국말로 제일 잘 옮긴 걸지도 모르겠다. OSI까지 한국말로 바꾸면 개방형 시스템 상호연결 참조 모델이겠지만.. 이렇게까지 한국말을 사랑하는 사람은 없는 것 같다. 아무튼 정보처리기사 시험에서는 OSI 참조 모델이라고 나오기 때문에, 이 포스팅에선 OSI 참조 모델이라고 하겠지만 그래도 결국은 OSI 모형이나 OSI 7계층 모델이나 OSI 참조 모델이나 다 똑같은 것을 가리키는 말이다. 아무렇게나 말해도 상관없지만 항상 그래왔듯 간단하게 정의를 짚고 넘어가보자. 참조 모델이라는 단어에 주목해보면, 이 모델이 컴퓨팅 장치나 네트워크 장치를 설계할 때 이 모델을 참조해서 만들라고 만들어진 모델이구나 생각할 수 있다.
그렇다면 왜 컴퓨팅 장치나 네트워크 장치를 설계할 때 참조할 모델이 필요한 걸까? 실제로 우리 주변에서 만들어진 대부분의 물건들은 어떤 모델을 참조해서 만들어지기 때문이다. 그런데 옛날에는 컴퓨팅 장치나 네트워크 장치를 설계할 때 참조할 표준 모델이 없었기 때문에 이 기업 저 기업에서 중구난방으로 각자의 모델에 맞춰 장치를 개발했다고 한다. 그 결과 서로 다른 회사에서 만든 장치끼리는 통신이 되지 않는 불상사가 발생했었다고 한다. 이 사고를 방지하기 위해서 국제 표준화 기구(ISO)에서 통신 장비를 설계할 때 기준으로 삼으라고 제시해 준 표준 모델이 바로 OSI 참조 모델이다.
OSI 참조 모델은 컴퓨터 통신 구조의 표준적 모델이 되도록 설계되었다. 또한 앞으로 개발될 모든 네트워크 프로토콜(통신할 때 일종의 약속이 되는 양식, 규칙을 의미한다고 생각하면 된다.) 디자인의 표준적인 뼈대가 될 수 있도록 만들어져 현재 이 세상에 존재하는 모든 프로토콜 디자인은 이에 맞추어 설계되어 있고, 앞으로 개발될 프로토콜 디자인 또한 그러할 것이다. 이렇게 설계할 때 7가지 계층을 만들어서 설계했는데, 이 때문에 OSI 7계층 모델이라고 부르는 사람도 많다.
OSI 참조 모델이 만들어짐으로써 이 모델을 완벽히 이해하고 있을 경우 네트워크 통신이 어떻게 진행되는지 그 흐름을 파악하기 쉬워졌다. 네트워크 통신 과정을 단계별로 파악할 수 있기 때문이다. 또한 통신 내에서 트래픽이 어떻게 흘러가는지, 어떤 프로토콜에 대해 그 구성이 어떻게 되어있는지 대강 짐작할 수도 있게 된다.
지금부터는 이 OSI 참조 모델이 어떻게 생겨먹은 건지, 또 어떤 특징을 가지고 있는지 설명하도록 하겠다.
방금 전 OSI 참조 모델이 설계될 때 7가지 계층 구조로 설계되었다고 언급했었다. 백문이 불여일견이라고 바로 계층 구조를 살펴보도록 하자.
계층별 기능에 대해서는 아래에서 자세히 설명하도록 하고, 일단 여기서는 그림을 보면서 낮은 1계층부터 가장 높은 7계층까지 어떤 구조를 가지고 있는지만 이해하고 넘어가도록 하자. 이 그림에서 OSI 참조 모델의 첫 번째 특징이 나온다. OSI 참조 모델의 7가지 계층은 계층 간 상하 구조를 가진다는 것이다.
계층 간 상하 구조를 가진다는 것은, 모든 하위 계층이 정상적으로 작동해야 상위 계층이 정상적으로 작동할 수 있는 구조라는 것이다. 예를 들면, 물리 계층 연결이 제대로 되어 있지 않으면 다른 모든 계층이 정상적으로 작동될 수 없다. 이런 방식으로 설계한 이유가 뭐냐면, 이렇게 설계했을 때 유지보수가 쉬워지는 장점이 있기 때문이다. 네트워크 통신 과정에서 오류가 발생했을 때, 하위 계층의 프로토콜부터 순서대로 문제가 발생했는지 확인하면서 나아가면 어떤 계층에서 오류가 발생했는지 쉽게 파악할 수 있다.
또한 OSI 참조 모델의 계층 구조에는 중요한 특징이 하나 더 있다. 바로 각 계층은 독립성을 띠고 있다는 것이다. 위의 예시에서 오류가 발생한 계층을 파악했을 때, 해당 계층만 수정하면 다시 네트워크 통신을 정상화할 수 있다는 것이다. 이 덕분에 어떤 계층에서 오류가 발생해도 다른 계층의 장비에는 직접적인 피해를 주지 않게 된다.
그렇다면 각 계층 간의 독립성을 보장하면서도 상하 계층 간 통신을 진행해야 할텐데 어떤 방식으로 진행될까?
사용자가 어떤 데이터를 응용 계층(최상위 계층)에서 생성하고, 이를 다른 곳으로 전송하는 과정을 상상해보자. 이 데이터는 하위 계층으로 한 계층씩 내려가게 되는데, 이 각각의 층마다 하위 계층으로 데이터를 전송할 때 다른 계층에서 처리한 데이터를 인식할 수 있도록 하기 위해 각 계층에선 데이터에 헤더를 붙이게 된다. 이 과정을 캡슐화(Encapsulation)라고 한다. 즉, 최상위 계층에서 만들어진 데이터는 전송되기 전 물리 계층(1계층)에 도착했을 때 최소 6개의 헤더가 달린 상태가 된다는 것이다. 각 계층마다 캡슐화가 진행되기 때문이다. (2계층에서는 헤더뿐만 아니라 테일까지 붙인다.)
이 데이터는 물리 계층에서 0과 1로 이루어진 신호(Signal)로 변환되어 전송 매체(케이블 등)를 통해 다른 곳으로 전송된다. 이 신호를 받은 곳에서는 이 신호를 다시 원래 데이터의 모습으로 사용하기 위해 물리 계층부터 응용 계층까지 데이터를 올리게 되는데, 이 때 한 계층을 지날 때마다 방금 붙었던 헤더(와 테일)에 담긴 정보를 확인하고 난 뒤 떼내면서 데이터를 읽게 된다. 이 과정을 역캡슐화(Decapsulation)라고 한다.
캡슐화 과정을 나타낸 그림. 데이터는 계층을 지나면서 헤더가 하나씩 붙게 된다.이로써 OSI 참조 모델에 대한 기본 개념에 대해 모두 익혔다. 다음으로는 OSI 참조 모델의 각 계층이 어떤 일을 하고, 계층마다 어떤 프로토콜이 있는지 알아보도록 하자.
지금부터 각 계층이 하는 일, 각 계층의 대표적인 프로토콜, 각 계층에서의 데이터 전송 단위에 대해 설명할 것이다. 프로토콜은 이 글 첫 문단에서 언급한 대로 네트워크 통신할 때 사용되는 일종의 규약이다. 이 규약들은 여러 계층에서 다른 규약과 상관없이 독립적으로 작동한다. 우리가 알고 있는 HTTP, HTTPS, IP 등의 "P"가 Protocol의 약자다. 이것들도 프로토콜의 일종이기 때문이다.
- 하는 일: 물리적 매체를 통해 0과 1의 비트 흐름을 전송하기 위해 요구되는 기능들을 조정한다.
- 장비: 케이블, 리피터, 허브
케이블과 같은 연결 장치를 사용하여 다른 장치와의 물리적인 연결을 수행하고, 이 연결을 바탕으로 전기 신호를 직접 전송하는 계층이다. 이 계층에서 0과 1의 전압 및 케이블 사양 핀의 개수 등이 정의되어 있다. 이 계층은 별다른 알고리즘이나 오류 제어 기능은 없고 단순히 데이터 전달의 역할만을 수행하도록 설계되었다.
- 하는 일: 데이터 통신 과정에서 오류가 없도록 노드 대 노드 간 정보 전송의 신뢰성을 보장한다.
- 주요 프로토콜: CSMA/CD, LLC, Token Ring 등
- 데이터 전송 단위: 프레임(Frame)
- 장비: 브릿지, 스위치
데이터 링크 계층은 정보의 오류와 흐름을 관리하여 안정된 정보를 전달한다. 네트워크 계층(3계층)에서 전달받은 데이터에 그 정보의 주소와 제어 정보를 각각 헤더와 테일로 붙인다. 데이터 링크 계층에서 이렇게 전송하는 데이터의 전송 단위를 프레임(Frame)이라고 한다.
데이터 링크 계층의 대표적인 장비인 스위치는, 각 장치마다 MAC주소를 두어 정확한 장치로 데이터를 전송할 수 있도록 한다.
- 하는 일: 다중 네트워크 링크에서 패킷을 발신지로부터 목적지까지 성공적으로, 효과적으로 전달한다.
- 주요 프로토콜: IP, ICMP, IGMP, ARP 등
- 데이터 전송 단위: 패킷(Packet)
- 장비: 라우터
데이터 링크 계층에서 노드 대 노드 데이터 전달을 감독했다면 네트워크 계층은 데이터가 최종 목적지까지 어떤 경로를 통해 전달될 지 경로를 설정하는 역할을 한다. 네트워크 계층의 데이터 전송 단위를 패킷이라고 한다. 패킷을 최종 목적지까지 가장 빠르고 안전하게 전송할 수 있도록 하는 것이 네트워크 계층에서 하는 일이다. 이 과정을 라우팅이라고 하며, 라우터를 사용해서 이 기능을 수행한다.
- 하는 일: 종단 간 정보 전송의 신뢰성을 보장하고, 오류를 복구하며, 흐름을 제어한다.
- 주요 프로토콜: TCP, UDP 등
- 데이터 전송 단위: 세그먼트(Segment), 데이터그램(Datagram; UDP에서)
- 장비: 게이트웨이
전송 계층에서는 발신지와 목적지, 양 종단 간 정보 전송의 신뢰성을 보장하고, 오류를 복구하며, 흐름을 제어한다. 여기서 신뢰성을 보장한다는 말은, 데이터가 정상적으로 전송됐는지 확인하고 정상적으로 전송되지 못한 데이터가 있다면 이를 재전송하여 누락되는 데이터가 없도록 보장한다는 의미다. 또한, 데이터 통신 과정에서 오류가 발생했을 경우 이를 해결하고, 각 데이터 전송의 흐름을 제어하는 역할을 하게 된다.
아래 5계층부터는 데이터 전송 단위를 전부 메시지/데이터라고 부르고, 소프트웨어를 통해서 구현되기 때문에 별도의 하드웨어 장비가 없다. 따라서 데이터 전송 단위와 장비에 대한 설명은 생략하도록 하겠다.
- 하는 일: 응용 프로세스를 통해 통신 세션을 구성한다.
- 주요 프로토콜: TLS, SSH
응용 프로세스를 통해 통신 세션을 구현한다는 말이 바로 이해가 가지 않는다면, 어플리케이션을 통해 포트 연결을 진행한다고 바꿔 읽어 보자. (사실 포트는 전송 계층과 세션 계층 사이에 있는 모호한 위치에 있지만, 이해하기 편하도록 포트 연결이라고 설명하도록 하겠다.) 세션 계층은 이 포트 연결을 통해 통신 장치 간의 상호작용을 설정하고, 유지하며, 동기화하는 역할을 한다.
- 하는 일: 운영체제를 통해 입출력되는 데이터를 다른 표현 형태로 변환한다.
- 주요 프로토콜: JPEG, MPEG, ASCII
표현 계층에서는 데이터를 다른 장치 모두가 이해할 수 있도록 번역을 한다. 다른 장치에서도 내가 보낸 데이터가 내가 보낸대로 일관되게 출력되도록 하기 위한 계층이다. 주요 프로토콜의 JPEG, MPEG를 보면 쉽게 이해할 수 있는데, 내 휴대폰을 통해 보낸 JPG 확장자의 사진이 다른 장치에서도 똑같아 보이는 이유가, 다른 장치의 표현 계층에서 통신 과정에서 얻은 데이터의 번역을 수행했기 때문이라고 생각하면 이해하기 편하다.
- 하는 일: 사용자와 직접 상호작용하며 인터페이스 역할을 수행한다. 각 프로세스 간의 정보 교환을 담당한다.
- 주요 프로토콜: DHCP, DNS, FTP, HTTP
응용 계층은 우리들이 사용하는 대부분의 프로그램들이 있는 계층이다. 동영상 재생 프로그램이나 인터넷 브라우저 등 우리가 자주 사용하는 프로그램들 또한 이 이 계층에 포함되어 사용자가 네트워크에 접근할 수 있도록 도와주는 기능을 수행한다.
잘 읽었습니다.