이번에는 간단하게 OSI 7계층에 대해서 소개하고 설명한다.
사실 OSI 7계층도 각 계층별로 존재하는 프로토콜이나 개념들을 자세히 알려고하면 책 몇 권도 부족하기 때문에 간단히 설명할 수 있는 정도만 정리한다.
OSI 7계층이 뭔지 알아보기 전에 왜 계층을 나누게 되었는지 부터 아는게 순서일 것 같다.
계층을 분리함으로서 각 계층은 독립적인 역할을 할 수 있다. 역할이 분리되면서 문제 발생시 문제의 현상을 보았을 때 어떤 계층에 문제가 생겼는지도 파악이 가능하다. 각 계층의 수행역할이 다르기 때문에 이런 것이 가능하다 볼 수 있겠다.
각 계층은 하위계층을 사용하고 현계층의 기능을 포함하여 상위 계층에 제공한다. 그래서 계층구조는 위에서 바라보았을 때 아래층이 안보이는 구조라 볼 수 있다. 따라서 최상위 계층만 보면 그 아래계층을 모두 포함하고 있다.
OSI 7계층 또한 그렇다.
OSI 7계층은 네트워크를 구성하는 표준 계층 중 하나이다. 아래 그림을 참고하자.
이제 각 레이어에 대한 내용을 살펴보자.
물리계층은 말 그대로 하드웨어 전송 기술로 이루어져 있다.
전기적인, 기계적인 신호를 주고받는 역할을하는 계층이다. 비트 0, 1의 통신단위로 통신한다.
우리가 당장 컴퓨터만 봐도 랜선을 통해 인터넷에 연결하는 모습을 확인할 수 있다.
이 계층에 속하는 대표적인 장비는 통신 케이블, 허브, 리피터 등이 있다.
또한 데이터의 종류나 오류를 제어하지 않는다. 이것은 다음 계층인 데이터 링크 계층에서 다룬다.
데이터링크 계층은 Point to Point 간의 신뢰성 있는 전송을 보장하기 위한 계층이다.
전송 데이터에 대한 CRC 오류제어가 필요하다.
장비는 대표적으로 스위치와 브릿지가 있다.
물리주소인 MAC주소가 이 계층에 해당한다.
전송 단위는 Frame이다.
네트워크 계층은 우리가 흔히 아는 IP주소를 제공하는 계층이다. 이 IP주소 또한 계층적으로 A,B,C,D클래스로 나누어져 있지만 자세히 다루진 않겠다.
네트워크 계층에서는 대표적으로 노드들을 거칠때마다 라우팅 해주는 역할을 담당한다.
실제 우리 실생활에서 가장 쉽게 볼 수 있는 라우팅 장비가 공유기이다. 공유기가 라우터라는 말은 아니지만 라우터의 NAT이라는 기능을 활성화 시킨 것이다. 공유기는 하나의 외부 통신선에서 들어오는 요청을 사설망에 연결되어있는 컴퓨터에게 전달해주는 역할을 한다.
이 계층의 대표적인 장비는 라우터, L3 스위치, IP 공유기 등이다.
전송 단위는 Packet이다.
전송계층의 경우 양 끝단(End to End)의 사용자들이 데이터를 주고 받을 수 있게 하는 계층이다. 대표적으로 우리가 자주 사용하는 TCP, UDP 프로토콜이 있는 계층이다.
TCP 프로토콜은 우리가 자주 사용하는 프로토콜이기 때문에 알아둘 필요가 있다고 생각하여 조금 자세히 적어본다.
TCP의 경우 신뢰성있는 통신을 보장한다. 따라서 데이터가 전달되는 과정에서 여러 스위치 라우터 등등을 거치면서 데이터가 잘못 전달되는 현상이나 전달이 안되는 경우 오류제어, 흐름제어를 통해 신뢰성있는 데이터가 전달될 수 있도록 한다.
TCP는 연결시 3-way hanshaking 방식으로 목적지와 상호 패킷을 교환하여 연결한다. 연결을 종료할 때는 4-way hanshaking 방식을 사용한다.
신뢰성 연결과 전달을 보장하는 만큼 중간의 확인과정을 거치고 연결을 계속 유지해야되기 때문에 그만큼의 리소스가 더 들어간다.
UDP 프로토콜의 경우 비연결형 프로토콜로서 데이터를 빠르게 전달하는데에 초점을 두고 있다. 따라서 UDP는 목적지에 데이터가 제대로 전달 되었는지 조차 확인하지 않는다. 그냥 전송하면 끝인 것이다. 이렇게만 말하면 이걸 왜쓰냐라고 할 수 있는데 비연결을 지향하고 데이터를 전달할 때 TCP에 비해 오버헤드가 적다. 그래서 신뢰성 있는 데이터 전송이 필요할 때보다 스트리밍같이 연속적인 특성을 가지고 있는 서비스에 사용한다.
전송 단위는 Segment이다.
세션 계층부터 데이터를 만들어내는 계층이다.
양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다. 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.
통신하는 사용자들을 동기화하고 오류복구 명령들을 일괄적으로 다룬다.
대표적으로 RPC, Socket 등이 있다.
표현 계층은 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다. MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. 우리가 자주 사용하는 데이터의 압축이나 인코딩 등을 여기에서 다룬다고 볼 수 있겠다.
응용 계층은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.
한마디로 우리가 사용하는 사용자 인터페이스를 제공하는 프로그램 등을 말하는 것이다.
대표적으로 우리가 잘 알고있는 HTTP, FTP 등의 프로토콜이 응용 계층에 속한다.
간단하게나마 정리를 해보았는데 위키내용을 많이 참고하였다. 알아보면서 각 계층의 역할정도만 보고 정말 각 계층을 세세하게 보지는 못하였다. 아마 필요할 때가 되면 필요한 계층에 대해 심도있게 보지 않을까 싶다. 사실 대부분은 운영체제와 프로그래밍 언어에서 개발자가 쉽게 쓸 수 있도록 제공해주기 때문에 정말 심도있게 보게 될지는 모르겠다.
좋은 글 감사합니다