OSI(Open Systems Interconnection) 7계층은 네트워크 통신이 어떻게 이루어지는지를 단계별로 나눈 표준 참조 모델이다. 이는 ISO(국제표준화기구)에서 제안한 모델로 서로 다른 시스템 간의 네트워크 통신이 원활하게 이루어질 수 있도록 체계적으로 나눈 것이다.
계층 | 계층명 | 기능 | 프로토콜 |
---|---|---|---|
7계층 | 응용계층 (Application) | 사용자와 직접 상호작용하는 소프트웨어를 지원. 사용자에게 네트워크 기능 제공 | HTTP, FTP, SMTP, DNS, Telnet, SSH |
6계층 | 표현계층 (Presentation) | 데이터 표현과 변환을 담당. 인코딩/디코딩, 암호화/복호화 | JPEG, MPEG, SSL, TLS |
5계층 | 세션계층 (Session) | 세션 생성, 유지, 종료. 동기점 설정 및 세션 복구 기능 | NetBIOS, RPC, NFS |
4계층 | 전송계층 (Transport) | 포트 기반 송수신, 신뢰성 보장, 데이터 분할/재조립, 오류 복구 | TCP, UDP |
3계층 | 네트워크계층 (Network) | IP 주소 기반의 라우팅과 포워딩. 최적 경로 선택 | IP, ICMP, ARP, RARP |
2계층 | 데이터링크계층 (Data Link) | 같은 네트워크 내 데이터 전송. MAC 주소 사용, 오류 검출 및 프레임화 | Ethernet, Token Ring, FDDI, HDLC |
1계층 | 물리계층 (Physical) | 전기/광 신호를 통한 실제 데이터 전송. 케이블, 하드웨어 규격 정의 | RS-232C, V.35,Ethernet, FDDI |
전기적 신호가 나가는 물리적인 장비
컴퓨터는 전기가 흐른다(1), 흐르지 않는다(0)는 신호로 데이터를 정의한다.(101010..)
하지만 전자기파는 0 ~ 무한대의 주파수 범위를 갖기 때문에 0과 1로 이루어진 전기적 신호를 통과시킬 수 있는 전선은 없다. 따라서 이러한 컴퓨터의 전기적인 신호를 곡선 형태의 아날로그 신호로 변경하는 과정이 필요하다. 이 과정을 인코딩, 디코딩이라고 한다.
즉 최소 두 대의 컴퓨터가 통신하기 위해 0, 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고 아날로그 신호를 0, 1의 나열로 해석하는 역할 또는 그 반대의 역할을 하는 것이 물리 계층의 역할이다.
전송 단위 : 비트(Bit)
장비 : 허브, 리피터
LAN 내부 같은 내트워크에 있는 여러대 컴퓨터 데이터 교환. 프레이밍
네트워크 계층 패킷 데이터를 물리적 매체에 실어 보내기 위한 계층이다. 물리 계층에서 발생한 오류를 검출하고 수정하는 기능을 수행한다. 다시 말해 물리적인 장비를 식별하는데 사용되는 주소 지정 체계와 데이터가 변조되지 않았음을 확증하기 위한 오류 확인하는 기능을 수행한다. 그리고 이러한 오류 감지 및 수정, 제어를 위해 "프레임"을 생성합니다.
프레임을 생성한 후 데이터 링크 계층은 각 프레임의 헤더에 발신자 및/또는 수신자의 물리적 주소(MAC 주소)를 추가한다. 그리고 손상되거나 손실된 프레임을 감지하고 재전송하는 오류 제어 메커니즘을 제공한다. 또한, 양쪽의 데이터 속도가 일정하지 않으면 데이터가 손상될 수 있으므로 데이터의 양을 조정하는 "흐름제어" 기능을 한다.
프레임과 프레이밍은 물리적인 매체의 한계를 극복하기 위해 필요하다.
물리적인 매체에서는 데이터를 전송할 때 데이터의 시작과 끝을 알리기가 어렵기 때문에 프레임의 시작과 끝에 특수 비트 패턴을 첨부하여 수행할 수 있다. 이는 데이터를 일정한 크기로 나누고 각각의 프레임에 프레임 마커를 추가하는 것으로 구현된다.
프레임은 데이터 링크 계층(Data Link Layer)에서 사용하는 단위로 물리적인 매체를 통해 전송되는 데이터의 논리적인 그룹을 의미한다. 프레임은 일반적으로 시작 프레임 마커, 목적지 주소, 출발지 주소, 프로토콜 식별자, 데이터, 오류 검출 및 제어를 위한 프레임 마커 등의 필드로 구성된다.프레임의 전송을 위해서는 데이터를 일정한 크기로 분할해야 하는데 이를 프레이밍(Framing)이라고 한다.
프레이밍은 데이터 링크 계층에서 수행되며 프레임에 대한 시작과 끝을 알리는 프레임 마커를 추가하여 프레임을 구분하는 작업을 의미한다. 프레임 마커는 시작 프레임 마커와 종료 프레임 마커로 구성되며 이를 통해 수신자는 프레임의 시작과 끝을 식별할 수 있다.
전송 단위 : 프레임(Frame)
장비 : 브릿지, 스위치, 이더넷
IP를 사용하여 도착지를 찾고 라우팅을 통해 도착지까지 최적의 경로 탐색하는 계층
물리적인 네트워크 사이의 라우팅과 네트워크 호스트의 논리적인 주소(IP)를 관리하고 패킷을 분할해 프로토콜을 식별하는 기능, 오류 탐지 등을 담당하는 계층이다.
네트워크 계층은 패킷을 목적지까지 전달하는 기능을 수행하며 이 과정에서 라우팅 알고리즘이 사용된다. 라우팅 알고리즘은 데이터를 전송할 최적의 경로를 찾고 패킷을 목적지까지 전달한다. 네트워크 계층에서는 IP 주소와 같은 논리 주소를 이용해 패킷을 라우팅한다. 즉, 사용 가능한 경로 수에서 패킷을 전송할 최단 경로 선택을 처리한다. 발신자와 수신자의 IP 주소는 네트워크 계층에 의해 헤더에 배치된다.
라우팅(Routing)은 여러 개의 네트워크가 연결되어 있을 때 데이터 패킷을 목적지까지 가장 효율적으로 전달하기 위해 어떤 경로를 거쳐야 하는지 최적의 경로를 결정하는 과정을 의미한다. 라우팅은 인터넷과 같은 대규모 네트워크에서 특히 중요한 역할을 한다.
IP(Internet Protocol)는 인터넷에서 데이터 패킷을 전송하기 위한 프로토콜 중 하나로
IP는 패킷을 보내는 송신자와 받는 수신자를 식별하기 위한 주소인 IP 주소를 사용하며 라우팅 프로토콜을 이용하여 패킷을 목적지까지 전달한다. IP 주소는 각각의 컴퓨터가 인터넷에 접속하기 위해 부여받은 고유한 주소이다. IP 주소는 라우팅(Routing) 과정에서 중요한 역할을 한다. 목적지까지의 최적의 경로를 결정할 때 라우터는 목적지 IP 주소를 참조하여 어느 경로를 통해 데이터를 전송할지 결정하게 된다. 따라서 IP 주소는 인터넷 상에서 컴퓨터 간에 통신하는 과정에서 중요한 역할을 담당한다
⚠️ IP는 비연결형 프로토콜로 패킷을 전송하기 전에 미리 연결을 설정하지 않고 전송한다. 이러한 특성 때문에 IP는 신뢰성과 안정성 측면에서 한계가 있으며 이를 보완하기 위해 상위 계층에서는 TCP(Transmission Control Protocol)와 같은 신뢰성 있는 프로토콜을 함께 사용한다.
전송 단위 : 패킷
장비 : 라우터
양 끝단의 사용자들 간의 신뢰성있는 데이터를 주고 받게 해주는 역할
전송 계층은 데이터를 안정적으로 전송하는 기능을 수행한다. 두 시스템 간의 연결을 설정하고 데이터를 신뢰성 있게 전달한다. 이 계층에서는 송신 측과 수신 측 사이의 연결을 관리하며 데이터를 분할하거나 재조합하며 오류 검출 및 재전송 등의 기능을 담당한다.
예를 들어, 송신 측이 전송하고자 하는 데이터가 크다면 전송 계층에서 이 데이터를 여러 개의 작은 조각으로 나누어 전송할 수 있다. 이때 각각의 조각은 일련번호를 부여받아 전송되며 수신 측에서는 일련번호를 이용하여 조각들을 순서대로 재조합한다. 또한, 전송 중에 발생하는 데이터 손실이나 오류를 검출하고 복구하기 위해 체크섬과 같은 오류 검출 코드가 추가된다. 만약 데이터 전송 중에 오류가 발생하면 송신 측에서 해당 오류를 감지하고 해당 조각을 다시 전송하는 등의 복구 작업이 이루어진다. 전송 계층은 애플리케이션 계층에 서비스를 제공하고 네트워크 계층에서 서비스를 받는다. 전송 계층의 데이터는 세그먼트라고 한다.
송신측: 전송 계층은 상위 계층에서 형식화된 데이터를 수신하고 세그멘테이션을 수행하며 흐름 및 오류 제어를 구현하여 적절한 데이터 전송을 보장한다. 또한 헤더에 소스 및 대상 포트 번호를 추가하고 세그먼트화된 데이터를 네트워크 계층으로 전달한다.
수신측: 전송 계층은 헤더에서 포트 번호를 읽고 수신한 데이터를 해당 응용 프로그램으로 전달한다. 또한 분할된 데이터의 시퀀싱 및 재조립을 수행한다.
이 때 송신측은 수신측의 어플리케이션과 연결된 포트번호를 알아야한다.
TCP와 UDP는 각각 데이터 전송에 대한 다른 요구사항을 충족시키기 위한 프로토콜이다. TCP는 신뢰성 있는 데이터 전송을 위해 사용되며 UDP는 빠른 데이터 전송을 위해 사용된다.
TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장한다.
데이터 전송 시, 패킷이 손실되지 않도록 보장하고 순서대로 전달된다. 이를 위해 TCP는 3-way handshake와 같은 절차를 사용하여 연결을 설정하고 패킷 전송 후 확인 응답을 받고 연결 종료 시 4-way handshake를 수행한다. 이러한 절차는 데이터 전송에 대한 신뢰성을 보장하며 대용량 파일 전송과 같은 안정적인 데이터 전송에 적합하다.
UDP(User Datagram Protocol)는 데이터 전송 속도를 중시하는 프로토콜이다. 데이터 전송 시 패킷이 순서와 신뢰성 없이 전송된다. 이는 패킷 전송 시간이 짧아져 빠른 데이터 전송이 가능하다는 장점이 있다. UDP는 데이터 전송 속도가 중요한 실시간 응용 프로그램에서 사용된다. 예를 들어, 비디오 및 오디오 스트리밍, 게임, DNS 등에서 사용된다.
전송 단위 : 세그먼트
통신을 위한 세션 관리, 연결 설정 및 해제, 동기화
-> 송신시: 데이터복구를 위한 동기점(대동기점, 소동기점) 생성
-> 수신시: 동기점 확인
논리적인 연결을 설정하고 유지하는 기능을 수행한다. 데이터 교환의 시작과 끝을 구분하기 위한 동기점을 생성한다.
실제 예시
응용계층으로부터 받은 데이터를 수신측에 알맞는 코드 및 형식으로 변환하거나 그 반대의 과정을 수행
서로 다른 시스템 간 데이터 형식이 다를 수 있으므로 이를 표준 포맷으로 인코딩하거나 해독하는 역할을 한다. 예를 들어, 윈도우 시스템과 리눅스 시스템이 서로 데이터를 주고받을 때 파일 인코딩 방식이나 문자의 바이트 표현 방식이 다를 수 있는데 이 차이를 중재한다. 또한, TLS/SSL 암호화를 적용하거나 JPEG, MPEG 포맷으로 데이터를 변환하는 것도 이 계층에서 수행된다.
표현 계층은 3가지 기능을 가지고 있다.
1. 송신자에서 온 데이터를 해석하기 위한 응용계층 데이터 부호화, 변화
2. 수신자에서 데이터의 압축을 풀수 있는 방식으로 된 데이터 압축
3. 데이터의 암호화와 복호화
사용자와 직접 상호작용하는 소프트웨어를 지원하고 사용자(응용프로그램)를 OSI 환경에 접속시킨다.
응용 프로세스와 직접적으로 관계하여 일반적인 응용 서비스를 수행한다. 최종 사용자와 직접 상호작용하여 다른 분산 정보 서비스 중에서도 이메일, 네트워크 데이터 공유, 파일 전송 및 디렉터리 서비스를 지원한다. 네트워킹 엔티티를 식별하여 최종 사용자 요청에 의한 네트워킹 요청을 용이하게 하고 리소스 가용성을 결정하고 통신을 동기화하고 애플리케이션별 네트워킹 요구사항을 관리한다.
이번에 OSI 7계층에 대해 공부하면서 그동안 막연하게 알고 있던 네트워크 통신 흐름을 구조적으로 이해할 수 있었다. 특히, 각 계층이 어떤 역할을 하고 어떤 기술이 사용되는지 파악하면서 에러가 발생했을 때 어느 계층에서 원인을 추적해야 할지도 감이 잡혔다. 예를 들어 HTTP 요청이 실패했을 때 단순히 응용 계층만 보는 것이 아니라, DNS 문제(응용 계층), 포트나 IP 설정 오류(전송/네트워크 계층), MAC 주소 충돌(데이터링크 계층) 등 여러 원인을 계층별로 나눠서 접근할 수 있겠다는 생각이 들었다. 또한, TCP와 UDP의 차이를 실제 서비스 예시(파일 다운로드 vs 영상 스트리밍)와 연결해 보면서 왜 특정 상황에서 TCP를 쓰고 또 어떤 상황에서는 UDP가 더 적합한지 이해할 수 있었다. 단순한 암기에서 끝나는 것이 아니라 실제 개발자로서 네트워크 기반 문제를 분석하고 해결하는 데에 중요한 기반이 되는 지식이라는 걸 깨달았다. 앞으로 Spring Boot 등 백엔드 개발을 진행하면서 이 개념들이 어떻게 활용되는지도 더 깊게 연결해서 익혀나가고 싶다.
참고