<h1><center> 네트워크 - OSI 계층 구조 </center></h1>
###### title: `네트워크 - OSI 계층 구조`
###### tags: `💻 TIL`, `Network`, `WebRTC`, `Computer Science`, `TCP/IP 4계층`, `Computer Science`, `OSI 7계층`
###### date: `2023-11-14T10:39:33.284Z`
> [color=#724cd1][name=데릭]
> [네트워크 계층 구조 - 위키백과](https://ko.wikipedia.org/wiki/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC_%EA%B3%84%EC%B8%B5)
> [OSI 계층 - 위키백과](https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95)
> [CRC - 위키백과](https://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%A4%91%EB%B3%B5_%EA%B2%80%EC%82%AC)
> [이더넷 - 위키백과](https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%8D%94%EB%84%B7)
## 개요
> WebRTC에 대해 학습하기 위해 필요한 배경 지식이다. 또한, CS 네트워킹 학습을 위해 필요하다.
## 컴퓨터 네트워크
> 컴퓨터 네트워크 또는 컴퓨터망은 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망의 하나이다. 즉, 분산되어 있는 컴퓨터를 통신망으로 연결한 것을 말한다. (feat. 위키백과)
> 컴퓨터 네트워크에서 컴퓨팅 장치들은 노드 간 연결(데이터 링크)을 사용하여 서로에게 데이터를 교환한다. 이 데이터 링크들은 유선, 광케이블과 같은 케이블 매체, 또는 와이파이와 같은 무선 매체를 통해 확립된다. (feat. 위키백과)
> 데이터를 출발시키고 라우팅시키고 종단시키는 네트워크 컴퓨터 장치들은 네트워크 노드로 부른다. 노드들은 개인용 컴퓨터, 전화, 서버, 네트워크 하드웨워와 같은 호스트를 포함할 수 있다. 이 두 장치들은 서로 직접 연결 여부에 관계 없이 하나의 장치가 다른 장치와 정보를 교환할 수 있을 때 함께 망으로 묶인다. 대부분의 경우 Application에 특화된 통신 프로토콜은 다른 통신 프로토콜에 비해 계층화된다.
**NOTE**
> 라우팅: 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정이다. 라우팅은 전화 통신망, 전자 정보 통신망, 교통망 등 여러 종류의 네트워크에서 사용된다.
> 최적의 경로: 주어진 데이터를 가장 짧은 거리로 또는 가장 적은 시간 안에 전송할 수 있는 경로이다.
## OSI(Open System Interconnection Reference Model)
> 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. **일반적으로 OSI 7계층이라고 한다.**
**목적**
> 이 모델은 프로토콜을 기능별로 나눈것이다. 각 계층은 하위 계층의 기능만을 이용하고, 상위 계층에게 기능을 제공한다. `프로토콜 스택` 혹은 `스택`은 이러한 계층들로 구성되는 프로토콜 시스템이 구현된 시스템을 가리키는데, 프로토콜 스택은 하드웨어나 소프트웨어 혹은 둘은 혼합으로 구현될 수 있다.
- 상위계층: 소프트웨어
- 하위계층: 하드웨어
## OSI 계층 기능
### 1계층 - 물리 계층(Physical Layer - 제일 아래에 해당)
> 물리 계층은 네트워크의 기본이 되는 하드웨어 전송 기술을 다룬다. OSI 아키텍처에서 가장 낮은 계층으로, 주로 전기적, 물리적 신호를 전송하는 역할이다.
### 2계층 - 데이터 링크 계층(Data link Layer)
> 포인트 투 포인트(Point to Point) 간 신뢰성 있는 전송을 보장하기 위한 계층이다. 해당 계층은 **CRC**(Cyclic Redundancy Check - 순환 중복 검사) 기반의 오류 제어와 흐름 제어가 필요하다.
> 네트워크 위의 개체들 간 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아 수정하는 데 필요한 `기능적`, `절차적 수단`을 제공한다. 주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥주소(MAC address)가 정해져 있다는 뜻이다. 노드 간의 직접 통신을 관리하고 MAC주소를 통해 주소를 할당한다.
- 주소 체계는 계층이 없는 단일 구조이다.
- 가장 잘 알려진 예는 **이더넷**이다.
- 프레임에 주소여부(MAC - 물리적주소)
- 에러검출 / 재전송 / 흐름제어
**NOTE**
> **CRC**: 네트워크 등을 통하여 데이터를 전송할 때 전송된 데이터에 오류가 있는지를 확인하기 위한 체크값을 결정하는 방식을 말한다.<br>
> **이더넷**: 컴퓨터 네트워크 기술의 하나로, 일반적으로 LAN, MAN, WAN에서 가장 많이 활용되는 기술 규격이다. 이름은 빛의 매질로 여겨졌던 에테르(ether)에서 유래되었다. 대부분은 IEEE 802.3 규약으로 표준화 되었다. <br>
> - OSI 모델의 **물리 계층**에서 신호와 배선
> - **데이터 링크 계층**에서 MAC(media access control) 패킷과 프로토콜의 형식을 정의한다.
### 3계층 - 네트워크 계층(Network Layer)
> 여러 개의 노드를 거칠때 마다 경로를 찾아주는 역할을 하는 계층으로 네트워크들을 통해 다양한 길이의 데이터를 전달하고, 그 과정에서 **전송 계층(4계층)** 이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공한다. <br>
> 네트워크 계층은 라우팅, 흐름제어, 세그멘테이션(Segmentation / Desegmentation), 오류 제어, 인터네트워킹(Internetworking) 등을 수행한다.
네트워크 계층은 여러 노드를 거칠 때마다 경로를 찾아주는 역할을 하며, 라우팅과 패킷 전달을 수행한다. IP 주소를 사용하여 통신하며, 서로 다른 네트워크 간의 통신을 지원한다.
- 주소부여(IP)
- 경로설정(Route)
### 4계층 - 전송 계층(Transport Layer)
> 양 끝단(End to end)의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해주어 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다. 또한, 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념(Stateful)이 있고, 연결 기반(Connection Oriented)이다.
> 이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다. 종단간(end-to-end) 통신을 다루는 최하위 계층으로 종단간 신뢰성이 있고 효율적인 데이터를 전송하며, 기능은 오류검출, 복구, 흐름제어, 중복검사 등을 수행한다.
전송 계층은 종단 간의 신뢰성 있는 데이터 전송을 담당한다. 데이터의 분할 및 재조립, 흐름 제어, 오류 검출 및 복구 등을 수행하며, 대표적인 프로토콜로 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)가 있다.
- 시퀀스 넘버 기반의 오류 제어 방식을 사용
- 가장 잘 알려진 예는 TCP이다.
**NOTE**
> TCP: 연속성보다 신뢰성 있는 전송이 중요할 때 사용되는 프로토콜이다.
- 서버소켓은 연결만을 담당한다.
- 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다.
- 서버와 클라이언트는 1:1로 연결된다.
- 스트림 전송으로 전송 데이터의 크기가 무제한이다.
- 손실될 경우 재전송을 요청하여 Streaming 서비스에 불리하다. <br>
> UDP: TCP보다 빠르고 네트워크 부하가 적다는 장점이 있지만, 신뢰성 있는 데이터 전송을 보장하지 않는다. 또한, 연결 자체가 없어서 서버 소켓과 클라이언트 소켓의 구분이 없다.
### 5계층 - 세션 계층(Session Layer)
> 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께 체크 포인트, 유효, 종료, 다시 시작 과정 등을 수행한다. <br>
> 이 계층은 **TCP/IP 세션을 만들고 없애는 책임**을 진다.<br>
> 통신하는 사용자들을 동기화하고 오류복구 명령들을 길괄적으로 다룬다.
세션 계층은 데이터 교환을 관리하고 동기화하는 역할을 한다. 세션 설정, 유지, 종료 등의 작업을 수행하여 양 끝단의 응용 프로세스 간 통신을 관리한다.
- 운영체제에서 통신 하기 위한 세션을 확립, 유지, 중단 한다.
**NOTE**
> 동시 송수신 방식(duplex): 이중통신 또는 쌍방향 통신은 두 지점 사이에서 정보를 주고 받는 전자 통신 시스템을 말한다. 이중 통신을 할 때 전송 방향마다 두 개의 통신 선호를 사용하면 단순하지만 전송로를 아끼기 위해 여러 종류의 전송 방식이 쓰인다. <br>
> 반이중 통신(half-duplex): 한 쪽이 송신하는 동안 다른 쪽에서 수신하는 통신 방식으로 전송 방향을 교체한다. 무전기를 들 수 있다. <br>
> 전이중 통신(Full Duplex): 두 대의 단말기가 송수신하기 위해 동시에 각각 독립된 회선을 사용하는 통신 방식이다. 휴대전화를 들 수 있다. <br>
> 단방향 통신(Simplex): 한쪽 방향으로만 전송할 수 있는 것이다. 방송, 감시 카메라를 들 수 있다.
### 6계층 - 표현 계층(Presentation Layer)
> 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층(7계층)으로부터 덜어 준다. **MIME** 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. <br>
> 예를 들어, **EBCDIC**로 인코딩된 문서 파일을 ASCII로 인코딩된 파일로 바꿔주는 것이 표현 계층의 몫이다.
표현 계층은 데이터의 형식을 변환하고 암호화하는 등의 역할을 한다. 응용 프로세스가 이해할 수 있는 형식으로 데이터를 변환하여 통신 가능하게 한다.
- 사용자의 명령어를 완성, 결과 표현
- 포장, 압축, 암호화
**NOTE**
> MIME(Multipurpose Internet Mail Extensions): 전자 우편을 위한 인터넷 표준 포맷이다.<br>
> EBCDIC(Extended Binary Coded Decimal Interchange Code): IBM 메인프레임용 운영 체제인 z/OS, OS/390, VM 운영 체제와 IBM의 중급 컴퓨터 운영체제인 OS/400, i5/OS 등에서 사용되는 8비트 문자 인코딩이다.
### 7계층 - 응용 계층(Application Layer)
> 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 일반적인 으용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다.
> 예를 들면, 가상 터미널(ex. 텔넷), Job transfer and Manipulation protocol(JTM, 표준 ISO.IEC 8832) 등이 있다.
응용 계층은 사용자와 직접 상호작용하며 네트워크 서비스를 제공하는 최상위 계층이다. 이메일, 파일 전송, 웹 브라우징 등 다양한 응용 프로그램이 이 계층에서 동작한다.
- 네트워크 소프트웨어 UI 부분
- 사용자의 입출력(I/O) 부분