OSI 모델은 무엇인가

OSI 모델은 추상화를 위해 프로토콜을 여러 계층의 layer로 나누고, 각 layer에서 자신이 책임진 일만 하도록 설계한 네트워크 모델이다. 각 layer는 완전히 독립되어 있으며, 각 layer에서 수행해야 하는 일만 제대로 된다면 그 구현은 다른 구현으로 대체 될 수 있도록 설계되어야 한다.

OSI 7 layer

OSI layer는 보통 7계층으로 나누어지기 때문에 OSI 7 layer라고 불리기도 한다. 각 layer의 이름은 가장 아래부터 physical layer, data link layer, network layer, transport layer, session layer, presentation layer, application layer다. 이를 다시 크게 둘로 나누어서 network layer까지의 아래 3개 layer는 media layer라고 하고, transport layer부터 위의 4개 layer를 host layer라고 한다. media layer는 네트워크상에서 원하는 머신을 찾아 데이터를 보내는 역할을 하고, host layer는 전송된 데이터를 안전하게 사용하는 방법에 대한 역할을 한다.

그러면 이제부터 각 layer에 대해 자세한 설명을 할 것인데 명심해야 할 것은 어떤 네트워크 프로토콜을 만들 때 OSI 모델을 지키는 것이 필수적인 것은 아니라는 것이다. 실제로 많이 사용되는 네트워크 프로토콜 중에서도 완벽하게 OSI의 원칙에 따라 설계된 프로토콜도 거의 없고, 7개 계층을 전부 구현하여 사용하는 것도 본 적이 없다. 그냥 네트워크 프로토콜은 이러한 역할이 필요하고, 그것은 이러한 순서로 지켜지는 게 안전하다는 가이드 정도로 생각하는 것이 좋다.

physical layer

우선 가장 아래 계층은 physical layer다. physical layer에서는 전달 매체를 통해 전달된 신호를 어떻게 0과 1로 바꾸는지를 담당한다. 데이터의 전달 매체에 따라서 0과 1이 반드시 bit일 필요도 없고, 사실 전기 신호일 필요도 없다. 정말 다양한 방법으로 구현될 수 있지만 보통은 프로그래머가 신경 쓸 필요 없는 수준의 이야기다.

data link layer

두 번째 계층은 data link layer다. data link layer에서 전송되는 data의 단위는 frame이라고 부르는데, 이 계층에서는 오류 없는 온전한 frame이 전달되는 것을 보장하거나 데이터를 전달할 매체에 접근하는 것을 컨트롤 해주는 계층이다. 다만 최종목적지까지 전달되는 것은 아니고, 로컬 네트워크 내에서만 전달해주거나, 로컬 네트워크 사이를 연결해주는 역할만 한다. 오류가 없는 것을 보장하기 위해 에러를 감지하거나 고칠 수 있는 데이터를 프레임에 추가하기도 한다.

network layer

세 번째 계층은 network layer다. network layer에서 다루는 data의 단위는 packet이다. 일반적으로 frame은 packet을 감싼 1 : 1 관계지만, 꼭 그렇다고 할 수는 없다. 다양한 이유로 data link layer에서 packet들을 모아서 하나의 frame으로 만들거나, 하나의 packet을 쪼개서 여러 개의 frame으로 만들거나 한다. 이 계층에서는 data가 목적지까지 도착하도록 routing 해준다. 하지만 목적지까지 제대로 도착한다거나, 순서대로 도착하는 것을 보장해주지는 않는다.

transport layer

네 번째 계층은 transport layer다. transport layer는 최종 노드까지의 안전한 통신을 보장해서 이다음 layer부터는 data의 무결성을 신경 쓰지 않을 수 있도록 해준다. 에러 검출이나 order의 보장 등을 할 지 말지에 따라서 TP0부터 TP4까지 4개의 class로 분류된다.

session layer

다섯 번째 계층은 session layer다. 두 node 사이의 인증을 해주거나, 연결이 끊어졌을 때 다시 연결을 해주거나 하는 것을 담당한다. SSH protocol처럼 지속적인 연결이 보장되어야 하는 프로토콜에서 사용된다.

presentation layer

여섯 번째 계층은 presentation layer다. 교환되는 정보의 형태를 결정한다. endian을 결정하기도 하고, 전송할 data field의 크기를 결정하는 등 전송될 데이터의 모양을 만든다. 하지만 현실적으로 별도의 프로토콜 레이어로 구현되지 않고, 서버와 클라이언트 간의 암묵적인 약속으로 보장해준다.

application layer

일곱 번째 계층은 application layer다. 이 계층의 프로토콜은 사용자가 네트워크를 이용해 실제로 하고자 하던 것. 즉, file을 주고받는다거나, 명령을 보낸다거나 하는 내용을 명시한다.

댓글

이 블로그의 인기 게시물

[C++] enum class - 안전하고 쓰기 쉬운 enum

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

RAII는 무엇인가

[Python] cache 데코레이터로 최적화하기

[Web] SpeechSynthesis - TTS API