[Network] OSI 7 layer

yongkini ·2021년 12월 10일
0

Network

목록 보기
5/5
post-custom-banner

OSI 7 layer & TCP/IP 모델

OSI 7계층은 하나의 거대한 네트워크 소프트웨어의 구조를 설명하는 것이다.

먼저, 컴퓨터와 컴퓨터를 연결(통신)하려면?

: A가 B에게 특정한 프로그램 혹은 자료를 보내려고 한다. 그러면 일단 '무조건' 두 컴퓨터는 '전선'으로 이어져 있어야한다. 그럼 둘을 전선으로 이으면 통신이 가능하다. 그렇다면, 만약 A가 이번에는 B,C,D과 통신하고자 한다면?. 똑같이 A-B, A-C,A-D 간의 전선을 연결하면 된다. 하지만, 이런식이라면 N개의 컴퓨터와 통신하려면 N개의 연결이 필요하다(전선). 이러한 방법 대신에 이러한 형태로 전선을 설치하는 것이 낫지 않을까?

즉, 첫번째 그림처럼 연결하는 것보다는 두번째 그림처럼 연결하는 것이 훨씬 효율적일 것이다(전선을 여러개 꽂는 것이 불가능하기도 하고, 여러개의 전선줄 자체가 비용이다).

하지만 2번째 방법에도 문제가 있다. 예를 들어, A→B에게만 보내고 싶은 상황일 때, 해당 구리선에 연결된 모든 PC가 데이터를 받아볼 수 있는 구조로 돼있기 때문이다. 그러면, 이를 보완하여 보내고자 하는 PC에만 보낼 수 있도록 컨트롤을 할 수 있는 커맨드 센터(?)와 같은 장치를 만들면 된다. 그것이 바로 '스위치'이다('더미허브'는 단지 연결만 할 뿐 이러한 기능을 하지 못하는 장치).

이러한 하나의 네트워크를 '인트라넷'이라고 한다. 그러면 이번에는 A 인트라넷에서 B인트라넷과 통신을 하고자 한다면 어떻게 할까?. 즉, 현재 네트워크 안에 없어서 전선으로 이어지지 않은 다른 PC와 통신을 하려면??? ⇒ 인트라넷끼리를 연결하는 장치가 필요함. 그러한 역할을 하는 장치가 '라우터'이다(우리가 공유기로 알고 있는 그것). 이 때, L3처럼 보통 라우터, 스위치의 기능은 통합돼 하나의 장치로 돼있음.

이런식으로 돼있다고 생각하면 된다. 그리고 전세계의 '인터넷'이 이렇게 연결돼있다. 그럼 일본과 한국의 통신은?? 엄청난 규모의 '해저 케이블'이 일본과 한국을 연결하며, 이를 통해 통신한다. 앞서 말했듯이 통신에 '전선'은 필수다.

OSI 7 Layer

물리 계층(Physical Layer) - 1계층

앞서 통신에는 '전선'이 필수라고 했다. 그러면, 가장 하부에 위치하는 1계층인 물리계층은 전선과 관련된 계층일 것으로 예상할 수 있다.

통신에는 전선이 필수인데, 전선으로 흐르는 것은 전류이다. 이에 더하여 우리가 통신에 사용하는 것은 '디지털 신호'이다. 예를 들어, '0101 0101'과 같은 이진수(컴퓨터가 알아들을 수 있는 유일한 언어)로 된 것들을 말한다. 모든 소프트웨어, 데이터는 결국 이러한 디지털 신호로 돼있다. 따라서 최종적으로 통신을 통해 자료를 보낼 때, 이러한 디지털 신호를 가지고 전선을 통해 전달을 하고, 받아서 써야한다.

그러면, 디지털 신호를 어떻게 전선을 통해 전달할까?. 이러한 방법을 생각해볼 수 있다. 0과 1의 조합이니까 1 ⇒ 5v의 전류, 0 ⇒ -5v의 전류를 흘려보내는 식으로 하면 이를 통해 0101을 조합해낼 수 있지 않을까(받는 쪽에서)?.

이런식으로 전압을 조절해서 보내면 되지 않을까?. 굉장히 간단해보이지만,

모든 전자기파에는 주파수(초당 진동수)가 있고, 이는 첫번째 사진처럼 수직, 수평선 형태일때 0-무한대(HZ)의 범위를 갖게 된다. 하지만, 전선이 모든 범위의 주파수를 커버할 수 있는 것이 아니다. 예를 들어, 전선이 0-8HZ사이의 주파수를 가지는 전자기파는 커버하지만, 그 외에는 커버를 못한다고 할 때, 통신을 하는 데에 있어서 특정 주파수 대 전자기파를 전송하지 못한다면 전송하는 자료의 왜곡이 발생(혹은 유실)한다.

그러면 어떻게 할까?.. 해결책은 '아날로그 신호'로 보내는 것이다. 정확한 설명은 불가능하지만..ㅎ 아날로그 신호는 전자기파와는 달리 수평, 수직선으로 이뤄져있지 않은 곡선 형태이다.

이렇게 곡선형태의 아날로그 신호는 보낼 수 있고, 전선이 커버 가능하다. 따라서 물리 계층에서는 10101 과 같은 '디지털 신호'를 '아날로그 신호'로 encoding(엔코딩)해서 전선을 통해 흘려보내고, 받는 쪽의 물리 계층에서는 '아날로그 신호'를 받아서 이를 decoding(디코딩)해서 10101 과 같은 '디지털 신호'로 해석한다. 이러한 모듈(엔코딩, 디코딩)은 'PHY'라는 하드웨어 칩(in LAN 어댑터)에 탑재돼있다고 한다.

정리해보면 물리 계층에서는 실제 전선에 데이터를 실어 보내는 역할을 해야하는데, 이 때, 디지털 신호를 바로 전압을 통해 전달하면 주파수의 범위 때문에 유실되는 데이터가 발생할 수 있기 때문에 디지털 신호를 아날로그 신호로 엔코딩하는 작업을 물리계층에서 하게 되고, 받는 쪽의 물리계층에서는 아날로그 신호를 받아서 역으로 이를 디지털 신호로 디코딩하는 작업을 맡게 된다.

물리 계층 설명에 이어서, 여러 개의 컴퓨터에서 A라는 컴퓨터로 '동시에' 데이터를 전송 혹은 통신하면 어떻게 될까?

위와 같은 상황이 발생한다면?. 특정 데이터가 어디서부터 어디까지 인지 1계층 통신 방법만으로는 알 수 없기 때문에(단지 아날로그 신호가 동시에 들어올 뿐임), 01011110001 이런식으로 구분되지 않은 디지털 신호가 변환될 것이다(1계층의 디코더). 따라서, 이를 끊어서 각각의 정보를 제대로 파악할 수 있는 로직 및 처리가 필요하다 ⇒ 이 역할을 하는 것이 데이터 링크 계층(2계층). 즉, 같은 네트워크(혹은 인트라넷) 안에서 여러 정보를 끊어읽을 수 있도록 하는 것(=여러 컴퓨터들이 데이터를 주고 받기 위한 것)

그러면 어떻게 끊어읽을 수 있게 할 수 있을까?. 먼저, 보내는 쪽의 2계층에서는 자신이 보내는 자료를 상대가 명확히 이해할 수 있도록(어디서 부터 어디까지인지에 관해) 'Framing' 과정을 거친다. 즉, [특정 신호 | 보내려는 신호 | 특정 신호(특정한 비트열을 붙인다고 함)] 이런식으로 프레이밍을 해놓음으로서 특정 신호부터 특정 신호 사이에 있는 신호가 자신이 보내려는 정보라는 것을 구분해둔다(이 과정 또한 엔코딩 과정이라고 할 수 있다). 그러면 받는 쪽에서는 이를 받아서 특정 신호부터 특정 신호를 발견하면 그 사이에 있는 것이 보내려는 정보라는 것을 파악한다(디코딩).

이러한 데이터 링크 계층의 기능은 LAN 드라이버라는 하드웨어에 구현돼있다(2계층도 1계층처럼 하드웨어적으로 구현돼있음).

네트워크 계층(Network Layer) - 3계층

그러면 앞서 1,2계층을 통해 여러 컴퓨터가 동시에 통신을 하면서, 실제 전선을 통해 전달하는 방법까지 알아봤는데, 이제 어떻게 A→B 의 통신 과정에서 A에서 머나먼(?) B를 찾아갈 수 있는지를 알아보자.

먼저, 결론적으로 3계층인 네트워크 계층에서는 통신 상대의 IP 주소 및 보내려는 데이터를 '패킷(Packet)이라는 일종의 구조체 혹은 객체에 프로퍼티 값으로 넣어서 아래 계층으로 보내주는 역할을 함과 동시에 이를 디코딩해서 어디로 이 데이터를 전달해야할지 길을 찾고(Routing), 실제로 다음 라우터에게 데이터를 넘겨주는 과정(Forwarding)의 역할을 맡는다.

위와 같은 방식으로 진행된다.

이와 같은 네트워크 계층의 기능 구현은 운영체제의 '커널'에 '소프트웨어'적으로 구현돼 있다.
** 커널 : 메모리에 상주하는 운영체제의 부분(사이즈가 큰 운영체제 전체를 컴퓨터 켤 때마다 실행하면 리소스 낭비이므로 필수적인 부분만 실행시키는데 그 부분을 커널이라고함)

전송 계층(Transport Layer) - 4계층

그렇다면, 만약에 컴퓨터에 '크롬 브라우저', '카카오톡'이 실행되고 있었을 때, 카카오톡에서는 '메시지' 통신이 나에게로 전달됐고(내 컴퓨터), 크롬 브라우저에서는 내가 방금 클릭한 웹 사이트의 index.html 파일 및 그외 파일들이 전달됐다고 해보자. 즉, 동시에 두개의 데이터가 전달됐고, 각각 다른 프로세스에서 요구한 자료들이다. 그러면 여태까지 1-3계층에서 주소를 알아내서 전달을 했고, 디지털 신호를 아날로그 신호 그리고 그 역의 관계로 디코딩 + 연속적인 데이터를 프레이밍 하는 방법까지 제공한다는 것을 알았는데, 이 경우처럼 다른 프로세스에서 각각 다른 통신이 이뤄졌고, 그렇게 받아온 자료를 카카오톡에서 요청한건 카톡에, 크롬 브라우저에서 요청한 것은 크롬 브라우저에 적절하게 전달하려면 어떻게 해야할까?. 결론적으로 컴퓨터가 어떤 자료가 어떤 프로세스꺼인지 어떻게 알 수 있을까?.

해결책 : '포트 번호(Port Number)'. 포트 넘버란 하나의 컴퓨터에 진행중인 프로세스들이 갖는 고유의 정수값이다(서로 겹치면 안됨).

결론적으로 전송 계층이란 최종 목적지인 특정 프로세스의 포트 번호를 사용하여 대응되는 프로세스에 데이터를 잘 전달하는 모듈이다.

이러한 전송 계층의 구현은 3계층과 마찬가지로 운영체제의 '커널'에 소프트웨어적으로 구현돼있다.

어플리케이션 계층(Application Layer) - 7계층(5,6계층을 통합한)

** 5,6 계층 간단 설명
표현 계층(6계층) - 데이터의 형식을 규정
세션 계층(5계층) - 통신할 기기를 네트워크상 통신 연결 및 유지

: 갑자기 7계층으로 점프?. 잠깐 다른 얘기를 해보면, 현대에는 OSI 7계층 모델이 시장에서 점유율 싸움에서 졌기 때문에 TCP/IP 모델을 쓴다고 한다. 그에 따라 현재는 TCP/IP Updated 모델을 쓰고 있다고 생각하면 된다(그림에 있는). 그림을 보면 전송계층까지는 그대로 OSI 7계층 모델과 유사한데, 5,6,7계층이 어플리케이션 계층으로 통합된 것을 볼 수 있다. 따라서, 바로 어플리케이션 계층의 설명으로 넘어가도록 한다.

어플리케이션 계층은 실제로 유저들과의 인터랙션이 발생하는 서비스가 속한 계층으로, HTTP, FTP 등의 프로토콜이 여기에 속한다. 쉽게 말해 우리가 아는 어플리케이션들(서버나 클라이언트의 응용 프로그램)이 위치한 곳이 응용 계층이고, 이러한 응용 계층은 앞의 1-6계층의 모든 기능을 포함한다(앞의 계층도 마찬가지로 자기보다 아래 계층의 기능을 모두 포함한다).
** TCP/IP 5계층 별 정리 표 이미지

reference

profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자
post-custom-banner

0개의 댓글