IT 와 DT/조각모음

OSI 7 계층 (OSI 7 Layer)

Eyhad 2022. 9. 14. 16:22

OSI (Open Systems Interconnection Reference Model)

 

○ 국제표준화기구(ISO)에서 개발한 모델로, 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 나눈 것

 

 왜 나누었나? 

통신이 이루어지는 과정을 단계별로 파악할 수 있기 때문. 흐름을 한 눈에 알아보기 쉽고, 사람들이 이해하기 쉽고, 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들지 않고도 문제가 발생한 계층만 고치면 되기 때문

It is because of the fact that it will be easy for troubleshooting the network problems.

Only the layer in which the problem exist will be in modified. Other layers are left untouched.

 

○ OSI 7계층은 네트워크 동작을 나누어 이해하고 개발하는 데 도움되므로 네트워크 주요 참조모델로 활용됨 (이론적)

   그러나, 실제 사용하는 대부분의 프로토콜은 TCP/IP 프로토콜 기반임 (실사용)

 


[1 Layer] Physical Layer 물리계층 

   전선으로 물리적으로 연결된 두 대의 컴퓨터가 데이터 송수신할 수 있게 해주는 모듈 

   @ PHY 칩 (회로)

 

   아날로그(곡선) ↔ 디지털(0,1)

   이 계층에 속하는 데이터 단위 : bit

   이 계층에 속하는 대표 장비 : 리피터, 허브

리피터                                                                                                                                                               허브 

 

 

 

더보기

○  아날로그(곡선) ↔ 디지털(0,1) ?

아날로그는 빛과 소리처럼 연속적인 값 / 디지털은 순간의 불연속적인 값

컴퓨터 언어에는 0과 1밖에 없다. 컴퓨터에게 모든 건 0과 1의 나열일 뿐이다.

그러니 결국 0과 1만 주고 받을 수 있으면 된다.

 

두 대의 컴퓨터를 하나의 전선으로 연결한다고 가정하면, 1을 보낼 때에는 +5V, 0을 보낼 때는 -5V 전압을 주면 된다. 

0과 1을 주고 받을 수 있으면 모든 데이터를 주고 받을 수 있게 되는 것

 

그런데 우리가 전달하고 싶은 내용은 소리나 이미지, 즉 아날로그 신호다.

그래서 아날로그신호를 디지털로신호(0과 1)로 바꿔 전달해야 한다.

 

0과 1의 나열(디지털신호)을 아날로그신호로 바꿔 전선으로 흘러보내는 작업을 encoding, 

아날로그신호가 들어오면 0과 1의 나열(디지털신호)로 해석하는 작업을 decoding이라고 한다.

 

그리고 전선이라는 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module)이 바로 1계층 !

* 모듈 = 물리적 프로그램을 만들 때 사용하는 함수 

 

 

  아날로그인 소리가 어떻게 0과 1로 표현되는 디지털신호로 변환될까?

 

소리는 아래와 같은 과정을 거쳐 디지털신호로 바뀐다.

 

목소리 <-----------------------> 전기신호(아날로그신호) <-----------------------> 디지털신호

              (마이크/이어폰)                                                   (ADC/DAC)

 

우선 소리는 높낮이는 진동수(주파수), 크기는 진폭, 음색은 음파의 모양(파형)에 좌우된다.

진동수가 클수록 고음이고, 진동수가 같을 때 진폭이 클수록 큰 소리인 것.

 

소리의 진동수 진폭 파형은 아날로그 신호로 표현될 수 있다.

마이크에는 진동막과 코일로 감은 자석이 있는데, 얇은 종이를 앞에 두고 말하면 종이가 파르르 떨리듯 소리를 내면 마이크의 진동막이 떨리고 이는 코일을 감은 자석이 움직이게 한다. 이렇게 음성파동은 전기파동으로 바뀌는 것이다. 

전기파동까지는 아직 아날로그 신호다.

이후 ADC (Analog to Digital Converter) 장치를 통해 sampling과 quaization 작업을 거치며 전기파동이 디지털 신호로 바뀐다.

(a)의 x축 시간에서 신호를 나누는 것이 sampling, y축 전압에서 신호를 나누는 것이 quantization이라고 생각하면 쉽다. 

더 촘촘하게 나눌수록 원래의 소리와 비슷해지는데,  sampling rate가 높을수록 그 간격이 촘촘한 것이다. 일반적으로 CD의 음원은 44kHz의 샘플링레이트를 가지는데 이는 파동의 형태를 1초에 44000번 측정한다는 것이다. 


[2 Layer] Data-link Layer

같은 네트워크 (같은 라우터 사용) 컴퓨터들이 데이터를 주고 받기 위해 필요한 모듈 

 

   @ 네트워크 카드

          = 네트워크 인터페이스 카드, NIC(Network Interface Controller), 이더넷카드, 네트워크 어댑터, 랜카드

   이제 두 대가 아니라 여러 대의 컴퓨터를 연결하고 싶은데, 모든 컴퓨터를 다 전선으로 연결하려면 비용 면에서 비효율적. 따라서, 전선 하나로 여러 대 컴퓨터와 통신할 방법을 모색해야 한다.

여기서의 상자는 스위치

- 이런식으로 전선을 연결하면 됨 (그림 두개는 사실 같은 그림!)

- 그러나 예림이가 혜림이에게 0010 1100을 보내려고 하면 전선이 연결된 모두가 정보를 알게 됨

- 그런데 만약 이 상자가 메시지의 목적지를 확인해서 나머지 둘한테 안주고 혜림이한테만 줄 수 있다면? 이러한 기능을 수행하는 게 바로 스위치. 스위치는 일종의 컴퓨터로서 이런 일을 수행함.

- 스위치 개수 = 네트워크 수 

 

 

- 3대의 컴퓨터가 동시에 예림이에게 정보를 보냄. 잘못 끊어 읽으면 망함

- 어떻게 하면 제대로 끊어읽을 수 있을까?

- 이를 위해 보내는 사람(송신자)은 데이터 앞뒤에 특정한 비트열을 붙임

   예를들어, 송신자(전송자)가 데이터를 보낼 때 앞에는 1111, 뒤에는 0000을 붙인다고 해보자

 

   브릿지나 스위치를 이용하여 MAC 주소를 통해 물리계층에서 받은 정보를 전달.

   MAC주소로 감싼 데이터, 프레임

   이 계층에서 전송되는 데이터 단위 : 프레임

   이 계층에 속하는 대표 장비 : 브릿지, L2 스위치, 공유기

   MAC 주소값은 물리적으로 할당받는데, 이는 네트워크카드가 만들어질 때부터 맥 주소가 정해져 있다는 뜻이다. 

 

 

라우터와 라우터가 연결되고 이런 식으로 계층구조를 이루는데, 이렇게 전 세계 컴퓨터들을 계층구조로 연결한 것을 인터넷이라고 함


[3 Layer] Network Layer

   IP주소를 이용해 서로 다른 네트워크에 속한 컴퓨터끼리 데이터를 주고 받게 해주는 것

   @ 운영체제 커널

 

   IP주소로 감싼 데이터, 패킷

   이 계층에서 전송되는 데이터 단위 : 패킷 (packet)

   이 계층에 속하는 대표 장비 :  라우터 router, L3 스위치

   

- A가 B에게 데이터를 보내고 싶음. 그럴려면 B의 IP주소를 알아야 함.

- A가 B에게 데이터를 정보하고 싶으면, 데이터 앞에 B의 (IP) 주소를 붙임

- A는 어떻게 B의 IP주소를 아는 걸까요?

 B가 네이버에 있는 컴퓨터라고 해볼게요, 우리가 주소창에 www.naver.com을 입력하면 이 영어주소는 IP주소로 변환되어 사용됨.

 더 궁금하다면 DNS를 공부하면 됨

- 여튼 우리가 도메인 www.naver.com을 쓰는 건 naver의 IP주소를 아는 것과 마찬가지인 셈

  결론은 우리는 상대의 IP주소를 알아야 보낼 수 있음

- 위 그림에서 초록색 박스 (IP주소+데이터)를 패킷이라고 한다.

- A는 라우터 [가]에게 패킷을 전달,

[가]는 패킷을 열어 목적지 IP주소를 확인,

[가]는 데이터를 다시 포장해 마에 전달,

라우터 [마]는 패킷을 열어 목적지 IP주소를 확인, 패킷이 B에 도착하려면 어느 전선으로 보내야 하는지 확인

[마]는 어떻게 바에 가야한다는 걸 알까요? 궁금하다면 라우팅 공부

우선, 여기서는 알고 있었다고 가정합니다. 그러면 [마]는 패킷을 다시 포장해 라우터 [바]에 전달. 

[바]는 [라]에게 패킷 전달 

 

그래서 결국 Network Layer란 가 나 다 라 각각의 네트워크들이 있을 때, 

수많은 네트워크의 연결로 이루어지는 inter-network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해, IP 주소를 이용해 길을 찾고 (routing) 자신 다음의 라우터에게 데이터를 넘겨주는 것 (forwarding)

 

 

 

     * 라우터와 L3의 차이가 무엇인가? 

      똑같이 IP 패킷을 포워딩하는 장비고, 이제 라우터와 L3를 구분하는 것은 무의미하다. 비싼 장비는 Router, 싼 장비는 L3 스위치. 원래 스위치는 L2에서 IP주소 스위칭을 수행하는 장치였는데 최근 HW 기술 발달로 IP주소를 이용해 바로 패킷을 포워딩하는 L3스위치가 생긴 것. 결론적은, 사람마다 의견은 분분하지만 거의 동일한 의미로 사용할 수 있다는 것


[4 Layer] Tranport Layer

   네트워크를 통해 송수신된 이진 데이터를 인코딩, 디코딩 하는 방법 (메타 정보)

   패킷 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송

   포트 번호(0~65535)로 감싼 데이터,  segment(TCP), dataframe(UDP)

   포트번호가 어떤 애플리케이션으로 가야 하는지 지정함

   이 계층에 속하는 대표 장비 :  L4 스위치

 

- 이제 인터넷 상의 모든 컴퓨터가 서로와 통신할 수 있게 되었음

- 데이터를 받는 수신자는 전 세계의 모든 컴퓨터에서 데이터 받을 수 있음

- 그런데 컴퓨터에는 여러 개의 프로그램들이 실행되고 있음.

  이때 컴퓨터에서는 코코아톡, 배달의 부족 등의 프로그램이 실행중 (프로세스 진행중)

 컴퓨터는 어떤 데이터를 어떤 프로젝트에 줘야하는지 알 수 있을까?

 먼저 데이터를 받고자 하는 프로세스들은 포트 번호라는 것을 가져야 함.

- 포트번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수값

예를들어 코코아톡은 포트번호를 8081, 배달의 부족 배달의 부족은 9000.

송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 있는 프로세스 포트 번호를 붙여 보냄. 데이터는 전송자는 9000이라는 포트번호까지 미리 알고 있어야 함

 

- www.naver.com을  을 입력하는 것은 사실 뒤에 ":80"이 생략된 것임

 

- 그래서 결국 Transport Layer란, port 번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에까지 데이터가 도달하게 하는 모듈


 

[OSI 5~7 Layer] = [TCP/IP Application Layer]

- 네트워크를 이용하려는 프로그램과 사용자에게 서비스 제공

  사용자의 응용프로그램과 통신하는 계층

- 프로토콜 : DNS, DHCP, Telnet, SSH, HTTP, FTP

 

 

 

* OSI 모델 vs. TCP/IP 모델

- 현대 인터넷이 TCP/IP 모델을 따르는 이유는 OSI 모델이 TCP/IP모델과의 시장 점유 싸움에서 졌기 때문

 

- TCP/IP 업데이트 모델이 현재 가장 많이 사용됨

 

- TCP/IP 소켓 프로그래밍 (=네트워크 프로그래밍) : 운영체제 Transport Layer에서 제공하는 API를 활용해 통신 가능한 프로그램을 만드는 프로그램을 만드는 것

- 소켓 프로그래밍 만으로도 클라이언트, 서버 프로그램을 따로따로 만들어 동작시킬 수 있음

 뿐만 아니라, TCP/IP 소켓 프로그래밍을 통해 누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있음. 누구든 자신만의 Application Layer 프로토콜을 만들어 사용할 수 있다는 것. 

- Application Layer도 다른 layer들과 마찬가지로 인코더, 디코더가 있음. 대표적인 Application Layer 프로토콜인 http로 인코딩과 디코딩을 조금만 더 살펴봅시다

 

* HTTP를 이해하기 위해서는, 먼저 클라이언트 & 서버 패러다임을 알아야 함. header, body, request, response, status code 등...

 

 

MVC 패턴은 소프트웨어 아키텍쳐 중 하나

MVC와 마찬가지로, 소프트웨어 아키텍처 중에 Layered Architecture라는 게 있고, Layered 아키텍쳐를 따르는 대표적인 예가 바로 네트워크 시스템

그러니까, Layered 아키텍쳐를 따르는 대표적인 예가 네트워크 시스템 

네트워크 시스템은 하나의 커다란 소프트웨어라고 할 수 있음

OSI 7 Layer 모델은 거대한 네트워크 소프트웨어 구조를 설명하는 것.

 

 

 

참고

https://velog.io/@skyepodium/OSI-7-%EA%B3%84%EC%B8%B5-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

https://onecoin-life.com/19

https://m.blog.naver.com/wlsdml1103/220936267002

https://kkamagistory.tistory.com/205

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rlaghlfh&logNo=221385737830 

https://shlee0882.tistory.com/110

https://forexp.tistory.com/69