프로그래밍 공부/컴퓨터공학 기초

OSI 7 Layer (계층)

Wonuk 2021. 12. 19. 21:19
반응형
본 포스팅은 유튜브
10분 테코톡을 기반으로 만들어졌습니다.
https://www.youtube.com/watch?v=1pfTxp25MA8

1계층 물리계층 (Physical Layer)

 

두 대의 컴퓨터가 통신하려면?

모든 파일과 프로그램은 0과 1의 나열입니다.

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

 

두 대의 컴퓨터를 전선 하나로 연결한다고 상상해봅시다.

1을 보낼 때는 +5V의 전기를 전선으로 흘려보내고

0을 보낼 때는 -5V의 전기를 전선으로 흘려보내면 

0과 1의 전송이 가능할 것입니다.

 

0과 1을 주고받을 수 있으면 모든 데이터를 주고받을 수 있으므로

이제 두 컴퓨터는 모든 데이터를 주고받을 수 있게 되었습니다.

 

그러나, 실제 상황에선 잘 동작하지 않았습니다.

아래 그림으로 설명하겠습니다.

 

sin함수

 

X축 : 시간, Y축 : 전압(-5~+5V)

이것은 전자기파를 표현하는 함수 입니다.

 

이 전자기파의 주파수는 얼마일까요?

1초당 진동한 진동 횟수 [단위 : Hz(헤르츠)]

해당 이미지는 1초에 4번 진동하므로 주파수는 4 [Hz] 입니다.

 

이 파동은 파동이 진행되는 내내 주파수가 4입니다.

 

하지만 이런 전자기파라면 어떨까요?

이런 전자기파는 주파수 값이 숫자 하나로 고정되지 않습니다.

이 전자기파는 파동이 진행되는 동안 주파수 값이 계속 변합니다.

이 전자기파의 주파수 최솟값이 1 [Hz], 최대값이 10 [Hz] 라고 생각해봅시다.

 

어떤 전선이 5 ~ 8 [Hz] 의 전자기파만 통과시킬 수 있다고 가정해봅시다.

이 전선으로 위의 사진에 나오는 1~10 [Hz]인 전자기파를 흘려보낸다면

5 - 8 [Hz]인 부분만 통과하여 엉뚱한 데이터가 도착하게 됩니다.

즉, 처음보낸 데이터과 나중에 받은 데이터가 달라지게 됩니다.

 

그런데 앞서 두 대의 컴퓨터가 통신하려면 0과 1을 주고받을 수 있으면 된다고 했습니다.

 

두 대의 컴퓨터는 다음과 같은 전자기파를 주고받을수 있으면 됩니다.

그런데, 수직선과 수평선이 있는 전자기파는 항상 0 ~ 무한대 [Hz]의 주파수 범위를 가집니다.

왜 그런지에 대한 부분은 설명 생략

전선은 통과시킬 수 있는 범위가 한정적 입니다.

따라서 이런 전기신호를 통과시킬 수 있는 전선은 없습니다.

 

그렇다면 이 신홀르 어떻게 전송해야 할까요?

 

이렇게, 아날로그 신호로 바꿔서 전송해야 합니다.

 

그래서 결국 Physical Layer 란?

0101 0101이라는 데이터를 보내고 싶다면, 0과 1의 나열을 아날로그 신호로 바꿔 보내고(encoding)

그 신호를 받은 컴퓨터는 이를 0과 1의 나열로 해석하여(decoding)

0101 0101을 얻습니다.

이 두가지 과정을 통해서 전선이라는 물리적인 매체로 연결된 

두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module) -> Physical Layer

모듈 = 프로그래밍의 함수와 비슷한 개념입니다.

 

데이터를 보내는 컴퓨터의 0101 0101은 1계층 인코더의 인풋으로 들어가서

아날로그 신호로 변경(encoding)됩니다. 아날로그 신호는 전선을 타고 흘러서

데이터를 받는 컴퓨터에 도달하고 1계층 디코더의 인풋으로 들어갑니다.

디코더가 이것을 해석(decoding)하여 원본 데이터를 알아내게 됩니다.

 

여기서 인코더와 디코더는 함수라고 말할 수 있습니다.

 

인코더에 들어가는 매개변수는 0101 0101 이라는 원본데이터이고

리턴 값은 아날로그 신호의 아웃풋입니다. -> 원본을 변조하는 함수

 

디코더에 들어가는 매개변수는 아날로그 신호

리턴 값은 원본 데이터 아웃풋입니다.

 

 

Physical Layer 기술은 어디에 구현되어 있을까?

 - PHY 칩

사실 1계층 모듈은 하드웨어적으로 구현되어 있습니다.

이전에 설명한 Phisical Layer는 사실은 함수가 아니라 회로입니다.

하드웨어도 input을 받아서 output을 만들어내는 건 마찬가지 입니다.

 


2계층 데이터 링크 계층

2계층을 시작하기전에 여러 대의 컴퓨터 간의 통신에 대한 지식을 알아두어야 합니다.

이전 1계층 설명에서 서로다른 두 대의 컴퓨터에 대해 알아봤습니다.

하지만 이번에 한 대가 더 추가된다면?

단순히 전선을 하나 더 추가한다면? 이라고 생각할수 있지만

통신하고 싶은 컴퓨터가 생길때 마다 추가할 수는 없습니다.

 

이런 방식은 전선 꽂을 구멍도 많이 필요하고 전선도 많이 필요합니다.

통신하려는 컴퓨터가 많아질수록 비용 면에서 비효율적 입니다.

 

따라서, 전선 하나를 가지고 여러 대의 컴퓨터와 통신할 방법을 모색해야 합니다.

 

다음과 같은 모양의 전기가 통하는 구리선에

여러 대의 컴퓨터가 연결되었다고 가정 하겠습니다.

구리선은 전기가 통하므로, 신호는 구리선의 모든 곳으로 전달되어서 모든 컴퓨터로 전달됩니다.

모든 컴퓨터가 받긴 했지만, 결과적으로 데이터 전달은 성공했습니다.

 

그럼 이제 가운데 구리선을 구겨서 상자안에 넣어보겠습니다.

이때 이 상자 부분을 더미허브 라고합니다.

그리고 이런식으로 구현되면 네대의 컴퓨터가 서로 통신이 가능하게 됩니다.

하지만, 예림이가 혜림이에게 데이터를 보내려고 하면

다른 두 대의 컴퓨터도 그 메시지를 읽을 수 있습니다.

 

그런데 만약 이 상자가 메시지의 목적지를 확인해서

혜림이에게만 전달할 수 있다면?

이런 기능을 하도록 만든것을 스위치라고 합니다.

스위치는 일종의 컴퓨터로서 이러한 일을 수행합니다.

 

이번에는 새로운 상황을 보겠습니다.

하나의 스위치로 직접적으로 연결된 컴퓨터들을 하나의 네트워크라고 하고

이걸 또 다른 말로 인트라넷이란 말을 씁니다.

 

이 상황에서 예림이가 혜림이에게 데이터를 보내려고 한다면?

전선으로 연결되어 있지 않아서 통신할 수 없습니다.

 

그런데 만약 스위치와 스위치를 연결할 수 있다면?

서로 다른 네트워크에 속한 컴퓨터끼리 통신이 가능하게 해주는 장비를

라우터라고 합니다.

엄밀히 따지면 초록색 박스는 스위치 + 라우터인 L3스위치 이지만,

그냥 라우터라고 뭉뚱그려 생각합니다.

 

이 때, 초록색 박스는 우리가 잘 알고있는 공유기에 해당됩니다.

 

이번에는 좀 더 많은 네트워크들을 연결해봅시다.

라우터와 라우터를 라우터로 연결할 수 있습니다.

5개 네트워크가 모두 연결될 수 있습니다.

이렇게 전 세계의 컴퓨터들을 연결한 것을 인터넷 이라고 합니다.

 

왼쪽 하단의 세개는 한국, 오른쪽 두개는 일본이라고 가정한다면

최 상위의 전선은 규모가 아주 큽니다.

보통 규모가 아주 큰 케이블이 바다 밑에 해저 케이블로 깔려있습니다.

 

이제 Data-Link Layer를 알아봅시다.

앞서 컴퓨터들이 계층구조를 이루며 연결되어 있는 것을 보았습니다.

이렇게 전 세계의 컴퓨터들이 계층구조로 연결되어 있는것을

인터넷 이라고 합니다.

 

이보다 더 앞서, 두 대의 컴퓨터가 0과 1로 된 데이터를 어떻게 주고 받는지 보았습니다.

그러나 1계층에 속하는 기술 만으로는 여러 대의 컴퓨터가 통신할 수 없습니다.

 

만약 여러 대의 컴퓨터가 통신하려면?

나머지 3대의 컴퓨터가 예림이의 컴퓨터에 동시에 데이터를 보낸다면

그렇다면 예림이 컴퓨터는 데이터를 ...010111110001... 이런식으로 받게됩니다.

이것을 어떻게 끊어서 읽는지에 따라서 데이터를 올바르게 얻어낼 수 있습니다.

 

그렇다면 어떻게 해야 제대로 끊어 읽을 수 있을까요?

 

이를 위해 송신자는 데이터의 앞뒤에 특정한 비트열을 붙입니다.

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

어떤 컴퓨터로 다음과 같은 비트열이 들어왔다면

...0000 1111 0110 1000 0001 1111 1011 0000 1111...

동그라미친 부분이 서로 다른 두 데이터가 됩니다.

이런 형식으로 예림이는 여러 발송지로부터 전달받은 데이터를

잘 끊어 읽을 수 있게 되었습니다.

 

그래서 결국 Data-link Layer란?

같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈

Framing은 Data-link Layer에 속하는 작업들 중 하나입니다.

0000~1111로 원본 데이터를 감싼것을 Framing이라고 합니다.

 

1~2 계층으로 보는 데이터 통신과정

 

 

Data-link Layer 기술은 어디에 구현되어 있을까?

 - 랜카드

2계층 모듈도 1계층 모듈처럼 하드웨어적으로 구현되어 있습니다.

 


3계층 네트워크 레이어

더 많은 컴퓨터들 사이의 통신

설명의 편의를 위해 규모를 축소시키고

각 라우터에 이름을 붙이겠습니다.

 

A는 B에게 데이터를 전송하고 싶습니다.

A는 데이터 앞에 목적지 주소, 즉 B의 주소를 붙입니다. ex) 55.10.54.75

각 컴퓨터들이 갖는 고유한 주소를 IP주소라고 합니다.

 

A가 B에게 데이터를 보내기 위해서는 B의 IP 주소를 알아야 합니다.

A는 B의 IP주소를 어떻게 알게될까요?

 

예를들어 B가 네이버에 있는 한 컴퓨터라고 가정해봅시다.

우리가 주소창에 www.naver.com을  을 입력하면

이 영어주소는 ip주소로 변환되어 사용됩니다. (DNS서버)

따라서 우리는 naver의 IP 주소를 알고있는 것과 마찬가지 입니다.

 

결론적으로, 상대방의 IP 주소를 알고있어야 메시지를 보낼 수 있습니다.

 

앞으로 55.10.54.75[data]를 패킷이라고 부르겠습니다.

가장먼저 A가 라우터 '가'에게 패킷을 전달합니다.

'가'는 패킷을 열어서 목적지 IP 주소를 확인합니다.

만약 연결된 컴퓨터중에 55.10.54.75 IP가 없다면

'가' 라우터는 데이터를 다시 포장한 다음

'마' 라우터에 데이터를 전달합니다

패킷을 받은 '마'는 '가'가 했던 작업과 동일한 작업을 수행합니다.

 

여기서 패킷이 B에 도착하려면 어느 전선으로 패킷을 내보내야 하는지 알아내야 합니다.

'마'는 어떻게 데이터를 바에게로 전달해야 한다는 것을 알아낼 수 있을까요?(라우팅)

라우팅을 통해 '바'에게 그 데이터를 줘야 한다는 것을 '마'가 알고있습니다.

 

이후 라우터 '마'는 데이터를 패킷으로 다시 포장한 후 '바'에게 넘겨줍니다.

'바'는 '마'와 같은 작업으로 '라'에게 데이터를 보냅니다.

'라'는 자신과 연결된 컴퓨터들 중에 IP주소가 55.10.54.75인 컴퓨터가 있다는 것을 알고 있어서

패킷을 B에게 전달합니다.

 

이렇게해서 A에서 출발한 패킷이 B로 무사히 도착합니다.

 

그래서 결국 Network Layer란?

수많은 네트워크들의 연결로 이루어지는 inter - network 속에서

어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해,

IP 주소를 이용해서 길을 찾고(routing)

자신 다음의 라우터에게 데이터를 넘겨주는 것(forwarding)

 

1~3계층 으로 보는 데이터 전달과정

 

그렇다면 Network Layer 기술은 어디에 구현되어 있을까?

운영체제의 커널(운영 체제의 핵심 부분)에

소프트웨어적으로 구현되어 있습니다.

 


4계층 Transport Layer 전송계층

3계층까지 오면서 이제 인터넷 상의 모든 컴퓨터가 서로와 통신할 수 있게 되었습니다.

데이터를 받는 수신자는

전 세계의 컴퓨터로부터 데이터를 받을 것입니다.

 

그런데 컴퓨터에는 여러 개의 프로그램들이 실행되고 있었습니다.

여기서 실행중인 프로그램이란 프로세스라고 합니다.

컴퓨터는 우측 세 개의 데이터를 프로세스들에게 나누어 주려고 합니다.

그런데, 이 상황에서 어떤 데이터를 무슨 프로세스에게 줘야할 지

컴퓨터는 어떻게 알 수 있을까요?

 

먼저, 데이터를 받고자 하는 프로세스들은

포트번호 라는 것을 가져야 합니다.

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

송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 있는

프로세스의 포트 번호를 붙여서 보냅니다.

 

그렇다면 데이터 전송자는 9000이라는 포트번호까지 미리 알고있어야 하는가?

맞습니다. 검색창에 www.naver.com 을 입력하는 것은 사실 뒤에 :80이 생략된 것입니다.

결국 우리는 네이버의 포트번호도 알고있는 셈입니다.

 

그래서 결국 Transport Layer란?

Port 번호를 사용하여

도착지 컴퓨터의 최종 도착지인 프로세스에 까지

데이터를 도달하게 하는 모듈입니다.

 

그렇다면 Transport Layer 기술은 어디에 구현되어 있을까?

운영체제의 커널에 소프트웨어적으로 구현되어 있습니다.

 


7계층 Applcation Layer

왜 갑자기 5, 6을 건너 7계층이 나오게 되었을까요?

 

사실 현대의 인터넷은 OSI 모델이 아니라

TCP/IP 모델을 따르고 있습니다.

 

TCP/IP 모델도 OSI 모델과 마찬가지로

네트워크 시스템에 대한 모델입니다.

 

현대의 인터넷이 TCP/IP 모델을 따르는 이유는

OSI 모델이 TCP/IP 모델과의 시장 점유 싸움에서 졌기 때문입니다.

 

TCP/IP 모델을 잠깐 보고갑시다.

자세히 보면 초록색 계층이 Internet Layer으로 변경되고

Physical Layer, DataLink Layer가 Network Interface로 변경되었습니다.

 

TCP/IP 모델이 업데이트 되면서 조금 바뀌게 되었습니다.

업데이트 되면서 Transport ~ Physical까지 OSI 모델과 동일해지게 되었습니다.

그래서 Application만 설명합니다.

오늘날 Updated 모델이 더 많이 사용됩니다.

 

TCP/IP 소켓 프로그래밍

운영체제의 Transport Layer에서 제공하는 API를 활용해서

통신 가능한 프로그램을 만드는 것을

TCP/IP 소켓 프로그래밍 또는 네트워크 프로그래밍 이라고 합니다.

 

소켓 프로그래밍 만으로도

클라이언트, 서버 프로그램을 따로따로 만들어서 동작 시킬 수 있습니다.

 

뿐만 아니라, TCP/IP 소켓 프로그래밍을 통해서

누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있습니다.

즉, 누구든 자신만의 Application Layer 프로토콜을 만들어서 사용할 수 있다는 뜻입니다.

 

Application Layer도 다른 Layer 들과 마찬가지로 인코더, 디코더가 있습니다.

대표적인 Application Layer 프로토콜인 HTTP로 인코딩 & 디코딩을 살펴봅시다.

 

HTTP를 이해하기 위해서는, 클라이언트 & 서버 패러다임을 알아야 합니다.

 

 

 

마치며..

MVC 패턴은 소프트웨어 아키텍처 중 하나입니다.

 

MVC와 마찬가지로, 소프트웨어 아키텍처 중에 Layered Architecture 라는게 있습니다.

레이어드 아키텍처를 따르는 대표적인 예가 네트워크 시스템입니다.

그러니까, 네트워크 시스템은 하나의 커다란 소프트웨어라고 할 수 있습니다.

 

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

 


JSON은 application Layer에서 HTTP 프로토콜로 통신하는 데이터중에 하나라는것을 알 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

반응형