OSI 7계층
OSI 7계층은 네트워크 통신이 일어나는 과정을 7단계로 나눈 ISO에서 정의한 네트워크 표준 모델 --> 다른 통신 장치와의 상호 호환이 가능해지며 용이성 생김
송신시에 각 계층을 지날때마다 각각 Header가 붙게 되고(캡슐화), 수신시에 역순으로 헤더를 분석하고 뗀다(디캡슐화)!
계층구조
계층 구조를 사용하는 목적은 분할 정복(Divide and Conquer) 때문.
어떤 복잡한 문제를 해결하고자 할 때, 나누어 생각하면 쉽게 해결할 수 있다는 취지인 것!
또한 계층구조 내에서는 아, 아래 층으로만 이동할 수 있고, 다음 단계로 넘어가기 위해서는 이전 계층이 전제되어야 함!
나누는 이유
통신이 일어나는 과정을 단계별로 파악할 수 있기 때문 -> 한 계층에서 오류가 나면 다른 계층을 건드리지 않고 문제가 발생한 계층에서만 고칠 수 있기 때문!
--> 계층별 모듈화된 것이 하나로 조립/융합된 구조
--> 유지관리의 수월성
1계층 (물리 계층, Physical Layer)
- 물리적인 장비
- 데이터 전기적인 신호(0, 1)로 변환해서 주고받는 기능만 할 뿐임 (데이터 전달의 역할만 함)
- 통신 단위 : 비트(Bit, 0와 1로 나타내어지는 상태)
- 장비 : 통신 케이블, 리피터, 허브 등
2계층 (데이터링크 계층, DataLink Layer)
- 송수신되는 정보의 오류와 흐름을 관리하여 안전한 통신의 흐름을 관리
- 프레임에 물리적 주소(MAC 주소)를 부여하고 에러검출, 재전송, 흐름제어를 수행
- 전송 단위 : 프레임(Frame)
- 장비 : 브리지, 스위치 등
- MAC 주소를 가지고 브리지나 스위치를 통해 물리계층에서 받은 정보를 전달함
3계층 (네트워크 계층, Network Layer)
- 데이터를 목적지까지 가장 안전하고 빠르게 전달
- 라우터를 통해서 경로 선택, 주소 정하기(IP), 경로에 따른 패킷 전달 (이때 IP 헤더가 붙음)
- 전송 단위 : 패킷(Packet)
- 장비 : 라우터, L3 스위치 등
4계층 (전송 계층, Transport Layer)
- port 번호를 통해 전송, 전송방식(TCP, UDP) 결정 (이때 TCP 헤더가 붙음)
- 두 지점간의 신뢰성 있는 데이터를 주고 받게 해주는 역할 (오류검출 및 복구, 흐름제어와 중복검사 등 수행)
- 신호 분산 후 합치는 과정에서 에러와 경로를 제어
- TCP, UDP (프로토콜)
- 전송 단위 : 세그먼트(Segment)
5계층 (세션 계층, Session Layer)
- 주 지점간의 프로세스 및 통신하는 호스트 간의 연결 유지
- TCP/IP 세션 체결, 포트 번호를 기반으로 통신 세션 구성
- API, Socket
6계층 (표현 계층, Presentation Layer)
- 전송하는 데이터의 표현 방식을 결정 (ex. 데이터변환, 압축, 암호화 등)
- 파일인코딩, 명령어를 포장, 압축, 암호화
- JPEG, MPEG, GIF, ASCII
7계층 (응용 계층, Application Layer)
- 최종 목적지로, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행
- HTTP, FTP, SMTP, POP3, IMAP, Telnet (프로토콜)
전체적인 통신 플로우
- 발신 측에서 응용 계층부터 시작해 각 계층마다 헤더를 붙여서 캡슐화를 진행
- 수신 측에서는 물리 계층부터 차례로 올라가면서 헤더를 떼어내는 디캡슐화(디캡슐레이션)을 진행하여 데이터를 식별
- 목적지에 원하는 데이터가 전송됨
전기 신호가 애플리케이션에 표현되는 과정
- 송신 측에서 전송한 전기 신호를 1계층 장비(허브, 케이블 등)가 재생성해서 2계층으로 전달
- 2계층은 1계층으로부터 받은 전기 신호를 데이터 형태로 변환, 이 데이터에 있는 목적지가 내 LAN카드의 MAC 주소랑 맞는지 확인해서, 맞으면 3계층으로 데이터를 전달, 아니면 폐기
- 3계층은 2계층으로부터 받은 MAC 주소랑 3계층의 IP 주소를 확인해서 알맞은 단말기로 라우터가 최적의 경로를 찾아서 패킷 전달
- 4계층은 3계층으로부터 받은 패킷의 시퀀스, ACK 번호 및 포트번호를 확인해서 해당 패킷을 차단시키거나 통과시킴
- 5계층은 보내는 쪽과 받는 쪽을 연결하고 안정적으로 유지되도록 관리. 패킷 전송이 완료되면 연결을 끊는 역할을 수행
- 6계층은 받은 패킷을 자신의 시스템 또는 애플리케이션에 맞게 인코딩 또는 암호화 등을 하여 통일된 형식으로 변환
- 7계층은 6계층으로 부터 받은 통일된 형식의 데이터를 애플리케이션에서 사용
--> 물리 계층에서는 전기신호를 최종목적지인 내 핸드폰 크롬창에 오기까지 가장 가까운 네트워크 장비 (ex. 가정의 라우터(공유기))까지 전달해주고 데이터링크계층에서는 이를 데이터 형태로 변환 후 MAC 주소 확인(해당 네트워크에서 목적지를 찾음), 네트워크계층에서는 그 공유기에 연결되어 있는 여러 단말기기중 하나(내 핸드폰)를 찾아 최적의 경로로 전달, 전송 계층에서는 포트 번호를 확인해서 크롬 프로세스를 찾아주고, 세션 계층에서는 세션을 관리해서 안정적으로 도와줌, 표현 계층에서는 형식을 변환해주고 어플리케이션 계층에서는 이를 사용!
이라고 간단하게 생각하면 좋을 것 같다.
참고
https://lxxyeon.tistory.com/155
https://velog.io/@cgotjh/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-OSI-7-%EA%B3%84%EC%B8%B5-OSI-7-LAYER-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EA%B0%81-%EA%B3%84%EC%B8%B5-%EC%84%A4%EB%AA%85
https://backendcode.tistory.com/167 -> 완전 추천
https://github.com/ssafy-tech-concert/ssafy-tech-concert/blob/master/Computer-Science/OSI%207%20layer.md