틀린 부분이 있으면 지적해주시면 감사하겠습니다.
공부하는데 큰 도움이 됩니다.
OSI 7계층
OSI 7 계층이란?
네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층간 상호 작동하는 방식을 정해놓은 ISO(국제 표준화기구)에서 개발한 모델이다.
쉽게 말해 통신이 일어나는 과정을 7단계로 나눈 것이다.
계층을 나눈 이유
통신이 일어나는 과정을 단계별로 파악하기 쉽고, 흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉬우며 계층 중에 특정한 곳에 문제가 생기면 다른 단계의 장비 및 소프트웨어를 건들지 않고도 해당 문제가 생긴 계층만 고칠 수 있다.
데이터 캡슐화
사용자 데이터가 각 계층을 지나면서 하위 계층은 상위 계층으로부터 온 정보를 데이터로 취급하며, 자신의 계층 특성을 담은 제어정보(주소, 에러 제어 등)을 헤더화 시켜 붙이는 일련의 과정을 말한다.
데이터를 보낼 때, 응용 계층에서 시작되어 OSI 계층을 차례로 내려오며 물리 계층으로 간다. 이 과정에서 캡슐화를 하게 되는데 각 계층은 다른 계층과 통신할 때 데이터에 특정 정보가 들어있는 헤더와 푸터를 추가한 후 다른 계층으로 전달한다. 캡슐화 과정에서 PDU(Protocol Data Unit : 프로토콜 데이터 단위이자 OSI 모델의 정보 처리 단위)가 만들어 지는데, 아래 계층으로 내려갈수록 PDU에는 다양한 프로토콜에 의해 헤더와 푸터가 더해진다.
마지막 물리 계층에서 PDU는 최종적인 모습으로 변하며, 데이터를 보내는 접점이 된다.
반대로 데이터를 받은 컴퓨터는 PDU로부터 프로토콜의 헤더와 푸터를 분석하며 올라가 마지막 응용 계층에 도달하면 원본 데이터만 남는다.
계층별 기능
1계층 / 물리 계층(Physical Layer)
데이터를 전송하는 물리적인 매체
네트워크 데이터가 전송되는 물리적인 매체이다. 주로 전기적, 기계적 기능적인 특성들을 이용해 통신 케이블로 데이터를 전송하게 된다. 데이터는 0과 1의 비트열로 ON, OFF의 전기적 신호 상태로 이루어져 있다.
데이터를 전달만 할 뿐, 데이터가 무엇인지, 어떤 에러가 있는지 등은 고려하지 않고 디지털에서 아날로그 또는 아날로그에서 디지털로의 변환하는 역할을 한다. OSI 모델에서 가장 복잡한 계층으로 간주된다.
이 계층에 속하는 대표적인 장비는 통신 케이블, 리피터, 허브 등이 있다.
2계층 / 데이터 링크 계층(DataLink Layer)
물리계층에서 받은 정보를 안전하게 전송하는 수단을 제공
투 포인트(Point to Point) 간 신뢰성 잇는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다. 네트워크 위의 개체들 간 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아내고 수정하는데 필요한 기능적, 절차적 수단을 제공하며 MAC 주소를 통해 통신한다.
주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다. 주소 체계는 계층이 없는 단일 구조이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다.
이 외에도 HDLC나 ADCCP 같은 포인트 투 포인트(point-to-point) 프로토콜이나 패킷 스위칭 네트워크나 LLC, ALOHA 같은 근거리 네트워크용 프로토콜이 있다.
대표적으로 브리지, 스위치, 이더넷 등이 있다.
3계층 / 네트워크 계층(Network Layer)
주소 부여(IP) 및 경로 설정(Route)
데이터 라우팅을 담당하는 계층으로, 라우팅이란 어떤 네트워크 안에서 통신 데이터를 짜여진 알고리즘에 의해 최대한 빠르게 보낼 최적의 경로를 선택하는 과정이다.
이 계층은 경로를 선택하고 주소를 정하고 경로에 따라 패킷을 전달해주는 것이 이 계층의 역할이다.
이 계층의 대표적인 장비는 라우터 이며, 요즘은 2계층의 장비 중 스위치라는 장비에 라우팅 기능을 장착한 Layer 3 스위치도 있다. (IP주소 사용)
여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 수행한다. 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공한다.
라우팅, 흐름 제어, 세그멘테이션(segmentation/desegmentation), 오류 제어, 인터네트워킹(Internetworking) 등을 수행한다. 라우터가 이 계층에서 동작하고 이 계층에서 동작하는 스위치도 있다. 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층이다. 논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며, 계층적(hierarchical)이다.
서브네트의 최상위 계층으로 경로를 설정하고, 청구 정보를 관리한다. 개방형 시스템들의 사이에서 네트워크 연결을 설정, 유지, 해제하는 기능을 부여하고, 전송 계층 사이에 네트워크 서비스 데이터 유닛(NSDU : Network Service Data Unit)을 교환하는 기능을 제공한다.
4계층 / 전송 계층(Transport Layer)
패킷 생성 및 전송
통신을 활성화하기 위한 계층으로 보통 TCP 프로토콜을 이용하며, 포트를 열어 응용프로그램들이 전송을 할 수 있게 해준다. 만약 데이터가 왔다면 4계층에서 해당 데이터를 하나로 합쳐 5계층에 전달한다.
하위 계층에 신뢰할 수 있는 데이터 전송 서비스를 제공한다. 신뢰성 있는 데이터를 서로 주고받을 수 있도록 해주어 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 부담을 덜어주는데, 이때 시퀀스 넘버 기반의 오류 제어 방식을 사용한다.
전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고(stateful),
연결 기반(connection oriented)이다.
이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다.
가장 잘 알려진 전송 계층의 예는 TCP이다.
종단간(end-to-end) 통신을 다루는 최하위 계층으로 종단간 신뢰성 있고 효율적인 데이터를 전송하며,
기능은 오류검출 및 복구와 흐름제어, 중복검사 등을 수행한다.
5계층 / 세션 계층(Session Layer)
세션 확립,유지,중단 및 사용자 동기화
모든 통신 장치 간에 연결을 설정하고 관리 및 종료한다. 하지만 4계층에서도 연결을 맺고 종료할 수 있기 때문에 우리가 어느 계층에서 통신이 끊어 졌나 판단하기는 한계가 있다. 그러므로 세션 계층은 4 계층과 무관하게 응용 프로그램 관점에서 봐야 한다.
세션 계층(Session layer)은 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다.
동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다.
TCP/IP 세션을 만들고 없애고 통신하는 사용자들을 동기화하고 오류 복구 명령들을 일괄적으로 다루며, 통신을 하기 위한 세션을 확립, 유지, 중단하는 작업을 수행한다.
6계층 / 표현 계층(Presentation Layer)
인코딩, 디코딩, 암복호화
응용 계층으로부터 전달받은 데이터를 읽을 수 있는 형식으로 변환하는데, 표현 계층은 응용 계층의 부담을 덜어주는 역할이 되기도 한다.
응용 계층으로부터 전송받거나 전달해야 할 데이터의 인코딩과 디코딩이 이루어지며, 데이터를 안전하게 사용하기 위해 암복호화 작업을 한다. 예를 들면, 유니코드(UTF-8)로 인코딩된 문서를 ASCII로 인코딩된 파일로 바꿔 주는 것, 해당 데이터가 TEXT인지, 그림인지, GIF인지 JPG인지의 구분 등이 표현 계층의 몫이다.
7계층 / 응용 계층(Application Layer)
UI, I/O
사용자가 볼 수 있는 유일한 계층이며, 네트워크 활동의 기반이 되는 인터페이스를 제공한다.
즉, 사용자가 실행하는 응용 프로그램들이 이 계층에 속한다.
가상 터미널인 텔넷, 구글의 크롬, 이메일, 데이터베이스 관리 등의 서비스를 제공한다.
최종 목적지로, HTTP, FTP, SMTP, POP3, IMAP, Telnet 등과 같은 프로토콜이 있다.
http://wiki.hash.kr/index.php/OSI_7_%EA%B3%84%EC%B8%B5
https://shlee0882.tistory.com/110
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!