네트워크 통신모델, OSI 7 Layer(feat.TCP/IP 4 Layer)

oswaldeff·2022년 10월 17일
0
post-thumbnail

intro

여태껏 API로 프론트엔드에 데이터를 서빙하면서도 요청과 응답사이에
어떤 일들이 벌어지는지 인지하지 못했는데, 비동기 처리에 대해 학습하기 시작하면서 네트워크에 대해 아는것이 필수적인 부분임을 알게 되었다.

웹 프로그래밍에서 MTV, MVC 패턴은 software architecture인데
네트워크 또한 이러한 개념이 존재한다.
바로 layerd architecture를 따르는 네트워크 시스템인데,
OSI(open systems interconnection)7계층이란 이 네트워크 시스템에서 통신이 일어나는 과정을 7단계로 나타낸 것이다.
(각 레이어 계층에 대한 흐름을 이해하는데 테코톡을 특히 참조하였습니다)

layer 1, physical layer

학부시절 드론수업때 matlab simulink와 컴퓨터보드로 제어알고리즘을 입히는 작업을 했었는데, 특정자세를 제어하는 알고리즘으로부터 나오는 출력결과값은 디지털 신호의 형태였다.
컴퓨터 연산에서 나온 디지털 신호가 모터로 들어가 동작하기 위해서는 0과 1의 디지털 신호가 아닌 아날로그 신호여야 했기 때문에,
모터의 input으로 들어가는 line앞에는 '아날로그 필터'가 필수적이었다.

이와 반대 케이스인, 컴퓨터로 들어가는 신호들은 모두 디지털 신호여야 하는데, 제 1계층인 물리계층은 아날로그 신호로 바꾸어주는 decoding 디지털 신호로 바꿔주는 encoding이 이루어지는 계층이며 이 계층은 하드웨어적으로 구현되어 있다.
(통신 케이블 및 허브 등이 그 예시이다)

그런데 여기까지는 그냥 아 1계층이란게 이런거구나라는 정도의 받아들이기 위한 정도의 생각이었고
정확히 어떤 이유였는지 확실히하고자 컴퓨터는 왜 디지털 신호여야만 하는지 알고자 했다.
아날로그 신호란 X축(time)에 대한 Y축(amplitude)의, 위 그림에서는 초록색 그래프에 해당하는,
(단, 그림과 좀 다른부분은 신호이기 때문에 파동의 형태여야 한다😅)
연속적인 형태의 데이터이다.
컴퓨터가 이러한 연속적인 형태의 데이터를 읽기 위해서는, 그 읽는 주기를 X축의 시간에 대해 무한히 쪼개고 쪼개야 한다. 하지만 당연하게도 컴퓨터에서 데이터를 읽기 위한 최소한의 시간단위는 존재한다.

이렇게 컴퓨터는 설정된 시간단위에 대해 주기적으로 특정시점의 데이터들을 읽으려면, 이에맞는 형태로 데이터를 나타내주어야 하고 이는 위의 막대그래프와 같은 디지털 형태로 존재한다.

❓그렇다면 만약 위 데이터가 스트리밍 서비스의 경우의 음성 데이터라고 할 시에, 위의 그래프 기준으로 0.25와 0.5(단, 0.25와 0.5는 상대적인 time값으로 생각)시점의 디지털 데이터는 실제 아날로그 데이터의 연속적인 데이터 중 일부분이 유실된 형태일텐데, 어떻게 음악을 유실없이 스트리밍하여 들을 수 있는 것인가 라는 순간적인 궁금증이 들었다.
❗유추해본 생각으론 유실된 데이터들은 사실상 사람이 인식할 수 없는 정도의 아주작은 시간범위이지 않나라고 생각했다.
결과적으로 해당궁금증에 대해 탐구해보니 최소시간단위의 불연속적인 데이터로부터 연속적인데이터를 최대한 유사하게 복원하는 방법을 사용중이었다.
(차이를 잘 모르겠지만, LP음원과 디지털음원이 품질차이가 난다고 한다)

현대의 네트워크 모델은 OSI 7계층이 아닌 TCP/IP 4계층으로 이루어졌다.

OSI 1~2계층은 TCP/IP 1계층인 network access계층으로 편입되었다.

layer 2, datalink layer

네트워크

만약 a, b, c, d라는 컴퓨터가 있고 서로 모두가 직접적으로 연결되어 있다면
이 컴퓨터들은 동일한 네트워크에 있는 것이다.

컴퓨터들끼리 통신을 하고싶다면, 단순하게 연결된 라인을 따라 접근해서 그냥 통신하면 된다.

그런데 a에서 나머지 모두가 아닌 b하고만 통신을 하고 싶다면?
이에 대한 의문은 스위치와 라우터를 통해 접근해볼 수 있다.

스위치

스위치에 대해 직관적으로 알기 위해 1계층에서의 허브의 한계점과 MAC이라는 것에 대해 짚고 넘어가보자.
(스위치는 2계층을 제외한 3, 4, 7계층에도 존재한다고 한다)

허브는 a가 b하고만 통신하고 싶다고 할지언정 모두가 연결되어 있기 때문에, 나머지 c, d에도 동일한 데이터가 전송되는 한계가 존재한다.
하지만 이 한계점을 스위치라는 것이 해결해줄 수 있다.

스위치란 패킷(일련의 데이터들의 블록단위)의 제일 앞단에 위치해 있는 MAC주소를 통해 어떤 곳으로 보낼지 정해줄 수 있는 하드웨어인데,
MAC(Media Access Control)주소란 특정 고유값으로서 통신상의 컴퓨터 주소이다.

이 MAC주소를 통해 동일 네트워크상에서 서로 통신이 가능하다.

그럼 IP라는 개념은 뭐고 왜 구분짓고, 다른 네트워크에서는 어떻게 하는데?
라는 추가적인 의문이 생길 수 밖에 없다.

먼저 그러한 의문을 다시 파보기 전에 알아둘 것은
IP역시 특정 컴퓨터의 위치를 파악하는데 있어서 네트워크상의 MAC주소를ARP(Address Resolution Protocol)과정을 통해 변환하여 사용한다.

라우터

여기까지 와도 IP와 MAC의 차이가 뜬구름잡는것 같았는데,
라우터에 대해 알아보며 그 차이점은 손에 만져지듯 조금 명확해진다.

a, b, c, d 외에 e, f, g, h라는 컴퓨터가 존재하고 두가지 그룹이 다른 네트워크 상에 존재할때,
a에서 g로 데이터를 전송(통신)하고 싶다면 어떻게 할 것인가?

라우터는 이러한 통신을 가능하게 해주는 장비로,
(L2스위치 + 라우팅1 기능 = L3스위치라고 한다)
IP정보를 통해 다른 네트워크 상의 컴퓨터들을 식별할 수 있게 해준다.

다시 a에서 g로 돌아와서 말하자면 a는 IP를 통해 g의 네트워크를 구분할 수 있고 그 네트워크 안에서 MAC주소를 통해 g를 식별할 수 있다는 것이다.

❗MAC주소는 고유값이라고 하였으므로, 이해하기 쉽게 생각하여 만약 데이터 패킷에서 일련의 데이터들 앞뒤에 특정한 MAC고유값이 붙는다면
이러한 패턴의 데이터블록들은 한눈에 출발지와 목적지를 알 수 있을 것이다.

이렇게 2계층은 물리계층에서 넘어오는 통신에서의 오류사항을 검출할 수 있을뿐더러 MAC주소를 가지고 받은 정보들을 안전하게 전달할 수 있다.

layer 3, network layer

네트워크 레이어

네트워크 레이어란 라우터를 통해서 연결된 여러 네트워크(인터넷 혹은 inter-network라고 한다) 속에서 목적지의 컴퓨터에게 데이터를 넘겨주기위해, IP주소를 통해 경로를 탐색(routing)하고 다른 네트워크 상의 라우터에 데이터를 전달하는 것(forwarding)을 의미한다.

즉, 데이터 패킷목적지의 특정 주소(IP)값을 부여함으로서 경로설정하고 데이터를 주고받는 흐름을 논리적으로 구현한 계층이다.

OSI 3계층은 TCP/IP 2계층인 internet계층과 동일하다.

layer 4, transport layer

일전에 a컴퓨터에서 g컴퓨터까지 IP주소를 통해 데이터를 전송하여 네트워크계층까지 잘 도달했다고 한다면, 다음단계는 전송계층이다.

만약 a컴퓨터에서 g컴퓨터로 코코아톡 메신저 프로그램을 통해 메시지를 보냈다고 한다면 네트워크계층까지 일어난 일은 단순히 메시지가 g컴퓨터에 도달했다는것이다.

이때 g컴퓨터에서는 port330000, port440000, port550000을 사용하여 각각의 프로세스(프로그램이 실행되어 메인메모리에 올라온 상태)들이 돌아가고 있다면,
과연 a컴퓨터에서 보낸 메시지는 어떤 프로세스가 코코아톡 메신저인지 알고 메시지를 성공적으로 도달시키는 것일까?

정확한 목적지에 데이터를 보내기 위해서 전송계층에서는 port정보를 사용한다.
즉 데이터패킷으로 이루어진 메시지는 이미 g컴퓨터의 코코아톡이 실행되고 있는 port번호까지 포함하여 보내지기 때문에 먼저 ip를 통해 g컴퓨터로 이동한다음
다시 g컴퓨터의 port를 통해 성공적으로 코코아톡에 도달한다.
(그동안 어떠한 아키텍쳐의 이유로 웹서버상에서 80 및 8000에 대하여 포트설정을 하고 elasticsearch는 9200, django-channels는 6379를 기본값으로 사용하는지 모르고 그냥 원래 그런가보다 하고 사용했는데... 최소한의 실마리정도는 얻은것 같다)

이렇게 전송계층은 port번호를 사용하여 목적지의 컴퓨터특정 프로세스까지 데이터가 도달하도록 만든 계층이다.

layer 5, session layer

데이터가 통신하기 위해 논리적인 연결이 이루어지는 곳으로서 세션에 대한 설정 및 유지, 종료, 복구 등의 기능이 있다.
4계층에서도 연결에 대해 다루기 때문에 통신이 끊어졌다고 무조건적으로 세션계층으로 생각할 수 없다.

OSI 5~7계층은 TCP/IP 4계층인 application계층으로 편입되었다.

layer 6, presentation layer

표현계층은 일련의 데이터들에 대한 표현방식을 결정하는 흔히말해 데이터 변환, 압축, 인코딩, 암호화에 대한 동작들이 이루어지는 계층이다.

layer 7, application layer

각 계층을 통해서 응용계층에 도착한 데이터들은 약속된 특정 규칙에 맞게
다시 분류되는데,

친숙한 http, smtp(이메일 전송), ftp(파일전송) 프로토콜들과 header, body, request, response, status code가 바로 응용계층에 속한다.

outro

TCP/IP 모델이 등장하고 점유율이 증가함에 따라 현대의 인터넷 모델은
OSI 7Layer에서 TCP/IP 4Layer로 이동하였다.

통신의 각 계층에서 일어나는 일을 안다면, 어떤 에러가 났을때 서버자체에서 발생한 것인지 통신상에서 발생한것인지 더 나아가,
어느계층에서 문제가 있는지 원인을 빠르게 파악하고 디버깅에 착수할 수 있지 않을까 싶다.

remark

1: 라우팅이란 어떤 네트워크 안에서 데이터를 보낼 때 최적 경로(최단 혹은 최소)로 선택하는 과정이다.

more keywords for study

#DNS #TCP/UDP/IP

0개의 댓글