[네트워크/Network] 네트워크의 기본: OSI 계층 구조와 캡슐화

kindof

·

2021. 9. 8. 16:13

🤔 0. 개요

 

"OSI 7계층이 무엇인가요?"

"컴퓨터 네트워크를 왜 7계층으로 나누나요?"

"메시지, 데이터그램, 세그먼트의 차이와 캡슐화는 무엇인가요?"

 

 

CS를 공부해본 사람이라면 한 번쯤은 OSI 7계층에 대해 들어보았을겁니다. 저 역시 전공 수업에서도 배웠고 인터넷에서도 많이 보았던 내용입니다.

 

하지만 7개의 계층을 외우려고만 했던 시기에 왜 OSI 7계층이 존재하는지, 어떤 모습으로 존재하는지에 대한 이해는 잠시 뒤로 미뤄뒀던 것 같습니다. 그래서 이번 기회에는 OSI 계층 구조, 그리고 이 맥락과 이어지는 캡슐화에 대한 내용에 대해 이해를 해보려고 합니다. (외우지 말고!)

 

아래는 [컴퓨터 네트워크 하향식 접근]이라는 전공 서적에 있는 그림입니다. 이 그림이 OSI의 계층 구조를 이해하기 쉽게 비유하고 있다는 것 같습니다.

OSI 계층구조와 비행기의 비유

위 그림을 한 번 보고, 우리가 비행기를 타고 어딘가로 떠나본다고 상상해봅시다.

 

 

"우리는 이 여행을 위해 비행기 티켓을 사고, 가방을 검사받고, 탑승구로 가고, 비행기에 타면 비행기는 이륙하고 목적지로 향합니다.

비행기가 착륙한 후, 탑승구를 통해 내리고 짐을 찾습니다."

 

 

이렇게 비행기를 탈 때에는 각 단계, 계층별로 하는 우리가 하는 행위가 있으며 그 행위 안에서 교환되는 티켓이나 수하물, 사람 등이 존재합니다. 이것들이 바로 인터넷 계층 구조에서 패킷과 비슷한 역할을 한다고 이해할 수 있습니다.

 

계층 구조를 단순화하는 것은 그 계층이 제공하는 서비스의 구현을 변경하는 데 용이합니다. 한 계층이 상위 계층에 같은 서비스를 제공하고 하위 계층의 서비스를 이용하는 한, 어떤 한 계층의 구현이 변하더라도 시스템의 나머지 부분은 변하지 않습니다.

 

바로 이 부분이 우리가 프로토콜을 계층 구조로 바라보는 이유이자 중요한 이점이 되는 것이죠.

 


 

 

💻 1. OSI 7계층

과거의 프로토콜 스택은 5계층(물리, 링크, 네트워크, 트랜스포트, 애플리케이션)으로 구성되어 있었습니다. 하지만 1970년대 후반, ISO에서 컴퓨터 네트워크가 7계층으로 구성되어야 한다는 것을 제안한 후로 OSI 7계층이 되었습니다.

 

OSI 7계층

자, 그러면 위 그림을 토대로 OSI 7계층에 대해 상위 계층부터 하나하나 내려오면서 확인해봅시다.

 

 

✅  애플리케이션 계층

애플레케이션 계층은 우리가 가장 가까이서 접하는 계층으로 HTTP, FTP, SMTP 등 웹이나 이메일, 파일 공유와 같이 사용자가 실제로 사용하면서 체감할 수 있는 서비스를 제공합니다.

 

즉, 특정 서비스를 제공하기 위해 서버와 클라이언트 사이에서 다양한 메시지나 명령을 주고받는 것이 애플리케이션 계층의 프로토콜이 하는 일이죠.

 

이 때, 애플리케이션 계층은 다른 종단 시스템에 있는 애플리케이션과 정보 패킷을 교환하는데, 이 정보 패킷을 메시지(Message)라고 부릅니다. 밑에 캡슐화에 대한 내용을 소개할 때 다시 '메시지'라는 내용이 다시 나올테니 한 번 기억해두면 좋을 것 같습니다.

 

✅  프레젠테이션(표현) 계층

프레젠테이션 계층의 역할은 통신하는 애플리케이션들이 교환하는 데이터의 의미를 해석하도록 하는 서비스를 제공합니다. ASCII, MPEG, JPEG, MIDI 등의 프로토콜을 통해 데이터의 압축과 암호화를 할 수 있고, 이를 통해 애플리케이션은 데이터가 표현/저장되는 내부 포맷을 걱정하지 않아도 되죠.

 

✅  세션 계층

세션 계층은 데이터 교환의 경계와 동기화를 제공하는데, 음... 저도 예시에 나와있는 프로토콜 이름들이 낯설긴 합니다. 그래도 NetBIOS의 BIOS에서 힌트를 얻어서 설명해보자면, 세션 계층은 체킹포인트를 설정하여 상위 계층의 오류로 인한 데이터 손실을 복원하는 역할을 합니다.

 

✅  트랜스포트 계층

트랜스포트 계층은 클라이언트와 서버 간에 애플리케이션 계층 메시지를 전송하는 서비스를 제공합니다. 이 계층에는 TCP, UDP라는 트랜스포트 프로토콜이 있으며 이 프로토콜을 통해 세그먼트를 전달합니다.

 

다른 포스팅에서 자세히 기술하겠지만 TCP는 연결지향형 서비스, 긴 메시지를 짧은 메시지로 나누고 혼잡 제어 기능을 제공하며, 네트워크가 혼잡할 때 출발지의 전송속도를 늦춥니다. 반면 UDP는 비연결형 서비스를 제공하고 신뢰성, 흐름제어, 혼잡제어를 제공하지 않는 아주 간단한 서비스죠. 

 

한편, 트랜스포트 계층이 전달하는 패킷을 세그먼트(Segment)라고 합니다.

 

✅  네트워크 계층

인터넷의 네트워크 계층은 한 호스트에서 다른 호스트로 데이터그램(Datagram)을 라우팅합니다.

 

출발지 호스트에서 인터넷 트랜스포트 계층 프로토콜(TCP, UDP)은 세그먼트와 목적지 주소를 네트워크 계층으로 전달하고, 네트워크 계층은 목적지 호스트의 트랜스포트 계층으로 전달받은 세그먼트를 운반해주는 역할을 합니다.

 

네트워크 계층은 IP 프로토콜과 라우팅 프로토콜을 가지고 있는데, 네트워크 계층을 가진 모든 인터넷은 IP 프로토콜을 통해 출발지와 목적지 사이에서 데이터그램을 이동시킵니다.

 

✅  링크 계층

위에서 설명한 것처럼 네트워크 계층은 출발지와 목적지 간 일련의 패킷 스위칭을 통해 데이터그램을 라우트한다고 했습니다.

 

다시 말해서, 트랜스포트 계층에서 네트워크 계층으로 세그먼트를 던지면 목적지까지 알아서 쭉 가는 것이 아니라, 라우팅을 통해 적절한 이동경로를 찾아간다는 뜻입니다.

 

그리고 데이터그램이 경로 상의 한 노드에서 다른 노드로 움직일 때, 네트워크 계층은 지금 이 링크 계층에 의존하게 됩니다. 링크 계층은 네트워크 계층의 데이터그램을 받아서 다음 노드의 링크 계층에 전달하고, 해당 지점에서는 다시 링크 계층의 데이터그램을 상위 네트워크 계층으로 보내서 이 과정을 반복합니다.

 

✅  물리 계층

링크 계층의 기능이 전체 프레임을 한 네트워크 요소에서 이웃 네트워크 요소로 이동하는 것이라면, 물리 계층의 기능은 프레임 내부의 각 비트를 한 노드에서 다음 노드로 이동하는 것입니다. 

 

'물리'라는 계층의 이름에서 알 수 있듯이, 광케이블과 같은 물리적인 전송 매체를 통해 이 역할을 수행하죠.

 

지금까지 설명한 내용을 간단한 그림으로 요약하면 다음과 같습니다.

 

 

 

 

✉️ 3. 캡슐화(Encapsulation)

지금까지 OSI 7계층에 대해 알아보았습니다. 그런데 이 시점에서 궁금증이 하나 생길 수 있겠죠.

 

'메시지', '세그먼트', '데이터그램' 처럼 각 계층에서 전달하는 데이터(Payload)의 이름이 다릅니다. 무엇이 다르고 왜 다른걸까요?

 

실제로 트랜스포트 계층 세그먼트는 상위 계층(애플리케이션 계층)에서 전달받은 메시지에다가 자신의 헤더를 붙여서 구성되고, 특히 애플리케이션 계층 메시지를 캡슐화하여 저장합니다. 그리고 거기에다가 메시지의 비트들이 변경되었는지를 체크하는 비트 등을 붙이게 됩니다.

 

한편, 트랜스포트 계층은 세그먼트를 네트워크 계층으로 보내고, 네트워크 계층은 이를 받은 다음에 출발지와 목적지 종단 시스템의 주소와 동일한 헤더 정보를 추가해서 데이터그램으로 만든 후에 링크 계층에 던져주게 되죠.

 

이런 식으로 각 계층에서 들고 다니는 정보는 조금씩 상이하고, 대개는 상위 계층에서 전달받은 데이터를 캡슐화하여 하위 계층에 보내주고 이를 전달받은 계층은 다시 상위 계층으로 데이터를 복원(Decapsulation)하여 보내줍니다.

 

그러면 왜 캡슐화를 할까요? 이유는 간단합니다. 맨 처음 부분에 계층 구조 자체가 왜 필요한지에 대해 이야기한 것처럼 각 계층별로 목적에 부합하는 기능만을 수행하도록 하여 다른 모듈에 미치는 영향을 최소화하고, 네트워크 동일 계층 간 호환성을 유지하기 위한 것입니다.

 

 

🚗 4. 나가면서

이번 포스팅에선 OSI 7계층과 캡슐화에 대해 공부해보았습니다.

 

혹시 지적하실 부분이 있으면 댓글 남겨주시면 감사하겠습니다.