들어가며

이 포스팅의 내용은 <<TCP/IP 완벽 가이드>>의 OSI 참조 모델에 관한 내용을 정리한 것입니다.

OSI 7 Layer란

OSI 7 Layer를 배우고 사용하는 이유는 무엇인가? 모델은 어려운 개념과 복잡한 시스템을 이해하는데 도움을 주기 때문이다. OSI 7 Layer를 안다면, 네트워크를 거대하고 복잡한 것이 아니라 예측 가능한 방법으로 상호작용하는 모듈 조각으로 인식하게 함으로써, 네트워크를 쉽게 분석하고 설계, 구성, 재정리할 수 있도록 한다.

역사

네트워크를 구성하고 서로 연결하는 안정된 방법을 개발하기 위해, 네트워킹 표준을 생성하게 되었다. 1970년대 후반, 두 개의 프로젝트가 독자적으로 시작되었는데 둘의 목적은 같았다. 그것은 바로 네트워크 시스템 구조를 위한 통합 표준을 만드는 것이었다. 하나는 ISO에서 관리했고, 하나는 CCITT에서 관리했다.

1983년, 이 두 문서가 병합되어 표준이 작성되었고 이를 OSI 모델이라고 불렀다.

OSI 모델의 목표는 전 세계적인 인터네트워크에서 사용할 널리 인정받는 프로토콜 슈트의 기반을 마련하기 위한 것이었다. 이것을 OSI 프로토콜 슈트라고 불렀다. 하지만 원래 의도대로 일이 진행되지 않았다. 인터넷과 TCP/IP 프로토콜이 인기를 끌면서 OSI 모델과 정면 승부를 벌였고, TCP/IP 모델이 승리하게 되었다.

하지만 OSI 모델 자체는 살아남아 네트워킹 전반적인 동작을 설명하는 도구로 자리잡았다.

분류

OSI 잠조 모델은 공식적으로 연관 계층들의 그룹을 할당하지 않는다. 그러나 편의상 전체적으로 두 그룹으로 나눌 수 있다.

  1. 하위 계층(계층 1,2,3,4) : 물리, 데이터 링크, 네트워크, 트렌스포트 계층은 주로 네트워크에서 데이터를 포메팅하고, 인코딩하고, 전송하는 것을 다룬다. 이들 계층은 데이터의 내용과 용도에 관심이 없고 단지 데이터를 전송하는 데만 관심이 있다. 1계층에서 4계층으로 올라갈수록 점점 소프트웨어 비중이 높아진다.
  2. 상위 계층(계층 5,6,7) : 세션, 프리젠테이션, 애플리케이션 계층은 주로 사용자와, 네트워크에서 운영되는 애플리케이션 구현을 다룬다. 상위 계층에서 동작하는 프로토콜은 데이터를 한 곳에서 다른 곳으로 보내는 것고 관련된 하위 수준 세부 사항에는 별로 관심이 없다.

트렌스포트 계층이 하위 계층인 것은 이견의 여지가 있다. 하위 계층에 넣은 이유는, 트렌스포트 계층의 주요 역할이 상위 계층에게 데이터 전송 서비스를 제공하는 것이기 때문이다.

데이터 전송

상위 계층은 하위 계층의 서비스를 이용하고, 더 상위 계층에게 서비스를 제공한다. 또한 머신들은 각자 통신을 할 수 있는데, 이것은 1계층을 제외하고는 논리적 통신이다. 예를 들면, 한 머신의 세션 계층은 다른 머신의 세션 계층과 논리적으로 통신을 할 수 있다. 이를 위해 PDU(Protocol Data Unit)을 구성하는데, 이 PDU를 통하여 다른 계층에게 메시지를 전달할 수 있다.

예를 들면, 한 머신의 애플리케이션 계층이 다른 머신의 애플리케이션 계층과 논리적으로 통신을 한다고 가정하자. 애플리케이션 계층에서 PDU를 구성하여, 6계층인 프리젠테이션 계층으로 내린다. 프리젠테이션 계층은 위의 계층에서 온 SDU(Service Data Unit)을 자신의 PDU로 래핑한 후에(이를 캡슐화라고 한다) 다시 아래 계층으로 내려준다.

이렇게 내려간 데이터는 트렌스포트 계층에서 TCP를 프로토콜을 통해 세그먼트 메시지를 내려주고, 네트워크 계층에서 IP를 통하여 캡슐화한다. (네트워크 계층의 PDU는 데이타그램이다) 이는 2계층 프로토콜인 이더넷으로 전달되고, 1계층에서 데이터를 물리적으로 전송하게 된다.

이렇게 아래로 내려간 계층은 물리적 통신을 통해 목적지 머신으로 전달되고, 목적지 머신에서는 위로 올라가면서 캡슐화 된 데이터를 추출한다. 2계층 PDU를 분석하여 2계층 SDU를 추출하고, 3계층 PDU를 올려 보낸다. 이렇게 위로 데이터를 올려 보내면, 결국 애플리케이션 계층까지 데이터가 올라가게 되고 7계층끼리 논리적 커뮤니케이션이 가능하게 된다.

메시지 라우팅

메시지가 같은 네트워크에 있지 않은 장비 사이에서 전송되려면, 최종 목적지에 도달하기 전에 중간에 있는 네트워크들을 거쳐야 한다.

한 네트워크에 있는 메시지를 다른 네트워크로 보내는 과정을 포워딩이라고 하며, 포워딩을 통해 목적지로 데이터를 보내는 것을 라우팅이라고 한다.

OSI 참조 모델에서 라우팅은 일반적으로 네트워크 계층에서 일어나는 활동이다. 메시지가 라우팅 될 때 발생하는 일은 다음과 같다.

  • 머신의 상위 수준 애플리케이션은 목적지에 데이터그램을 보내려고 한다. 데이터그램은 패키징되어 하위 계층으로 전달된다.
  • 이 데이터그램은 목적지로 단번에 전송되는 것이 아니라, 중간 장비로 전송된다.
  • 중간 장비(라우터)에서 네트워크 레이어까지 데이터를 올려 보낸다.
  • 네트워크 레이어에서 최종 목적지 머신이 로컬 네트워크에 있는지, 아니면 다른 라우터로 포워딩되어야 하는지 확인한다.
  • 몇 개의 라우터를 거쳐 메시지는 목적지에 도달한다. 그 메시지는 프로토콜 스택을 거슬러 올라가 최종 레이어에 도달하게 된다.

OSI 참조 모델 계층

물리 계층(physical, 1계층)

데이터가 네트워크 인터페이스를 통해 물리적으로 전송되는 유일한 계층이다. 데이터를 적절히 인코딩한 다음 실제로 데이터를 송신하고, 역으로 수신하는 역할을 한다.

데이터 링크 계층과 완벽하게 분리할 수는 없다. 대표적인 예가 이더넷이다.

이더넷, 토큰 링, 802.11 과 같은 기술들이 있다. 데이터 링크 계층은 개념적으로 MAC과 LLC로 나뉘어진다.

  • 논리적 연결 제어(LLC) : 상위에 있는 네트워크 계층에게 서비스를 제공하고, 구현을 은닉하여 다른 기술이 상위 계층과 쉽사리 결합할 수 있도록 한다.
  • 매체 접근 제어(MAC) : 많은 네트워크는 공유 매체를 이용하기 때문에, 충돌을 피하기 위한 규칙이 필요하다.

많은 장비들이 이 계층과 연관이 있다. 브릿지, 스위치, 브라우터 등이 데이터 링크 레이어와 연관이 있다.

네트워크 계층(network, 3계층)

네트워크 계층은 서로 연결된 네트워크가 어떻게 동작하는지를 정의한다. 또한 OSI 모델에서 원격 네트워크에 있는 컴퓨터에게 데이터를 전송할 수 있는 기능과 연관된 가장 낮은 계층이다. 이더넷은 로컬 네트워크 안에서 데이터를 전송하는 것만 다룬다(MAC)

네트워크 계층부터 상위 계층의 추상적인 기능과 데이터를 목적지로 보내는 데 필요한 구체적인 작업이 구분되기 시작한다.

  • 논리적 주소지정 : 네트워크에서 통신하는 모든 장비는 장비를 식별하기 위한 논리적 주소를 가지고 있다. 논리적 주소는 특정 하드웨어와 무관하며 전체 네트워크에서 유일해야 한다. 예를 들면, 인터넷 프로토콜에서 모든 머신은 IP 주소가 있다.
  • 라우팅 네트워크 : 여러 군데에서 들어오는 패킷을 받아 최종 목적지를 파악하고, 목적지로 보내기 위한 다음 경로를 결정하는 역할을 한다.
  • 데이터그램 캡슐화 : 상위 계층에서 받은 메시지에 네트워크 계층 헤더를 붙여 캡슐화하여 데이터그램(패킷이라고도 한다)을 만든다.

이 계층에서 가장 유명한 프로토콜은 IP이다. IP는 인터넷의 백본이며 전체 TCP/IP 프로토콜의 토대이다. 네트워크 계층에서 동작하는 연결 장비를 라우터라고 한다. 이 라우터는 메시지 라우팅에 사용된다.

전송 계층(transport, 4계층)

1계층에서 3계층은 실제 데이터를 패키징하고, 주소를 지정하고, 라우팅하고, 전달하는 작업을 수행한다. 물리 계층은 비트를 다루고, 데이터 링크 계층은 로컬 네트워크를 다루며, 네트워크 계층은 네트워크 간의 라우팅을 다룬다.

반면 전송 계층은 상당히 추상적이다. 전송 계층은 장비 간 데이터 이동을 직접 처리하지 않고 하위 계층을 이용한다.

전송 계층의 주요 역할은 서로 다른 컴퓨터에 있는 소프트웨어 애플리케이션 프로세스들이 서로 통신하는데 필요한 기능을 제공하는 것이다.

현대의 컴퓨터는 멀티태스킹이므로, 한번에 다양한 소프트웨어 애플리케이션이 동일한 머신에서 데이터를 송수신할 수 있다.

전송 계층은 이들 애플리케이션들이 동일한 하위 계층 프로토콜 구현을 이용하여 데이터를 송수신할 수 있는 방법을 제공한다. 그래서 전송 계층의 역할을 end-to-end 또는 host-to-host 전송이라고 부르기도 한다.

이 역할을 하기 위해 전송 계층은 몇 가지 작업을 수행해야 한다.

  • 각 애플리케이션에서 나오는 데이터를 추적하여 하나의 데이터 흐름으로 결합한 다음 하위 계층으로 보낸다.
  • 데이터를 분리하여 적절한 수신 프로세스에게 전달해야 한다. (한번에 다양한 소프트웨어에서 데이터를 송수신하므로)
  • 상위 계층에서 동작하는 프로토콜, 애플리케이션에 연결 서비스를 제공한다.

세션 계층(session, 5계층)

세션 계층은 데이터 주소지정, 패키징, 전달과 관련된 실제적인 문제를 다루지 않는 첫 번째 계층이다.

세션 계층은 이름을 보면 알 수 있는 것처럼, 장비가 세션을 수립하고 관리할 수 있도록 설계되었다. 다시 말하면, 두 개의 소프트웨어 어플리캐이션이 지속적인 논리적 연결로 데이터를 교환할 수 있도록 한다.

예를 들면, 소켓 인터페이스는 개념적으로 5계층에 위치해 있으며, 소프트웨어 프로그램들이 세션을 맺도록 하는 데 쓰인다.

프리젠테이션 계층(presentation, 6계층)

타 계층과 두 가지 큰 차이점이 있다.

  1. 다른 계층보다 제한적이고 구체적인 기능을 제공한다.
  2. 훨씬 적게 쓰이며 많은 통신에서 필요로 하지 않는다.

프리젠테이션 계층은 한 시스템에서 송신한 데이터를 수신 시스템에서 다른 방법으로 볼 필요가 있을 때 일어나는 문제를 처리한다. 예를 들면 다음과 같다.

  • 번역 : 각각 유형의 컴퓨터들이 서로 다른 문자 집합을 이용한다던지 할 때, 이를 내부 구현과 무관하게 데이터를 볼 수 있게 변환한다.
  • 압축 : 데이터 처리율을 향상시키기 위해 데이터를 압축/해제할 수 있다.
  • 암호화 : SSL과 같은 것들이 프리젠테이션 계층에서 작동한다.

프리젠테이션 계층은 항상 필요한 건 아니다. 그리고 프리젠테이션 계층의 기능이 애플리케이션 계층에서 수행될 수도 있다.

애플리케이션 계층(application, 7계층)

OSI 모델에서 애플리케이션 계층은 사용자 애플리케이션이 이용할 수 있는 서비스를 제공한다.

예를 들어, 웹 브라우저를 사용한다면 실제 소프트웨어는 PC에서 동작중인 애플리케이션 된다. 그 소프트웨어는 실제로 애플리케이션 계층에 동작하는 대신, 애플리케이션 계층에서 동작하는 프로토콜(HTTP)를 이용한다. 브라우저와 HTTP간의 차이는 미묘하지만 중요하다.

예외 사항이 있기는 하지만, 일반적인 상황에서 컴퓨터에서 네트워크를 이용하는 프로그램을 사용하면, 사용자는 애플리케이션 계층에 직접 접근하는 것이다. 예를 들어 이메일 메시지를 보내고, 웹 브라우저를 실행하고, 채팅 프로그램을 이용하는 것은 애플리케이션 레이어에 존재하는 프로토콜을 사용하는 것이다.