네트워크

[네트워크 기초] OSI 모델과 TCP/IP 모델

dev-ohdam 2024. 6. 5. 00:20

 지난 게시글에서 네트워크와 관련된 기본적인 개념을 설명하는 시간을 가졌다.
이때 필자는 서로 다른 호스트가 통일된 규칙을 기반으로 원할한 통신을 할 수 있도록 프로토콜을 정의했다고 말했다.

 

2024.06.04 - [네트워크] - [네트워크 기초] 네트워크와 프로토콜

 

[네트워크 기초] 네트워크와 프로토콜

네트워크(Network)란  우리는 여러 사용자와 통신할 때, 공유기, 라우터 등등 다양한 장치를 사용해 데이터나 서비스를 주고 받는 등 기능을 수행할 수 있다. 컴퓨터는 모뎀을 통해 라우터에 연결

dev-ohdam.tistory.com

 

 

 오늘은 실제로 우리가 사용하는 네트워크 프로토콜 스택인 TCP/IP 4계층 모델과 해당 모델과 함께 자주 등장하는 개념인 OSI 모델과 관련된 설명을 진행해보고자 한다.

OSI 모델과 TCP/IP 모델

계층 구조 (매우 중요) 

 일단 각 모델에 관해 설명하기에 앞서, 이 모델들의 설계 구조를 한번 살펴보자. 

두 모델 모두  "네트워크가 제공하는 기능"(목적지 설정, 노드 간 통신, 신뢰성 있는 전송... ect)에 맞게 계층 구조의 형태로 디자인되어 있다. 여기서 계층 구조는 상위 계층의 내용이, 하위 계층의 기능을 기반으로 하여 동작한다는 특징이 있다.

 

 그리고 이렇게 설계됨에 따라 호스트로 하여금, 각 계층 별로 통신하는 것 처럼 느껴진다.

이게 무슨 말이냐?

 

 채팅 프로그램을 사용한다고 가정해보자.(여기서 채팅 프로그램은 응용 계층에 해당한다.)
서로 메시지를 송수신 할 때, 사용자는 채팅 프로그램끼리 통신하는 것처럼 느껴지지, 그 아래 계층에서 내부적으로 어떻게 처리하는 지는 보이지 않는다. 굳이 알 필요도 없고

 

  도대체 왜 이런 형태로 설계했을까? 어떤 이점이 있길래?

 네트워크 통신 과정을 모듈화하고, 계층적으로 설계함에 따라 각 계층은 독립적인 역할을 수행하게 된다.

이렇게 설계하면,  통신 과정에서 문제가 발생 시, 해당 계층만 핸들링할 수 있다는 장점이 있다. 

그리고 전반적인 시스템을 파악하기 용이하고 프로토콜이 단순화된다. 

그 뿐만 아니라, 특정 계층의 내부적인 변화가 전체의 시스템에 영향을 주지 않는다.

 

OSI 모델 VS TCP/IP 모델

 그렇다면 이 두 모델의 차이점은 뭘까?

 

 일단 해당 모델을 모델링한 목적이 조금 다르다.

 TCP/IP 모델은 IETF에서 인터넷 표준과 함께 관리하며, 인터넷에 특화된 네트워크 구조를  표현하기 위해 모델링 한 것이다. 

 OSI 모델은 ISO라는 표준 기구에서 관리하며 범용적인 네트워크 구조를 표현하기 위해 모델링한 것으로, TCP/IP 모델보다 늦게 출시되었다.

 

또한 TCP/IP 모델의 경우 4계층으로 이루어진 반면,

OSI 모델은 7계층으로 좀 더 디테일하게 설계되어 있음을 알 수 있다.

 

 TCP/IP 모델실제 인터넷 설계 과정에서 함께 개발되고 표준화한 모델이기 때문에 OSI 모델보다 신뢰도가 높은 편이다. 반면, OSI 모델개념적인 내용을 파악할 때, 참고하기 위해 주로 쓰이며, 실제 프레임워크 구현 시, 해당 모델과 다르게 구현될 수 있다.

 

그렇기 때문에 실제로는 TCP/IP 모델을 더 많이 사용하는 편이다.

 

즉, 두 모델은 어느 정도 호환은 하지만 완전히 동일한다고 볼 순 없다.

 

데이터 통신 과정은 어떻게 될까?

출저) 모두의 네트워크 서적 TCP/IP 모델의 캡슐화/역캡슐화 과정

 그렇다면 실제로 이 데이터를 전송하는 과정에서, 해당 모델이 어떻게 적용되는지 살펴보자.

 여기서 일단 각 계층 별 역할은 생각하지 말자.

 

 응용 계층(응용 프로그램)에서 발생한 순수한 데이터는 송신 측에서 각 계층을 거처갈 때마다, 해당 계층에서 정의된 추가적인 정보들이 헤더 혹은 트레일러의 형태로 붙어나간다. 이 과정이 마치 데이터를 감싸나가는 모습과 유사하며, 이를 캡슐화라고 부른다.

 

 반대로 수신 측에서 이렇게 데이터에 붙은 추가적인 정보들을 해석하고, 제거해 나가며, 적절한 목적지까지 전달하는 과정을 역캡슐화라고 부른다.

 

이렇게 캡슐화된 데이터 단위를 패킷이라고 일컫는다.

 

여기서 주의해야할 것은 송신측과 수신측의 계층 순서가 반대로 처리된다라는 것이다.

OSI 7 계층 모델

출저) 해시넷

 

 가끔 각 계층별 설명을 볼 때 헷갈리는 경우가 많은데, 그 이유를 곰곰히 생각해보니, 송신 측 입장에서 설명하냐

수신 측 입장에서 설명하냐 제대로 명시하지 않았기 때문에 그런 것 같다. 이런 현상을 예방하기 위해

필자는 캡슐화와 역캡슐화 과정을 앞서 먼저 설명했다. (송신측과 수신측의 계층 이동 순서에 차이가 있기 때문)

 

 

 

각 계층별 설명을 진행할 때도 송신측, 수신측 두 가지 측면을 모두 고려해서 작성해보도록 하겠다.

(특정 계층 순서대로 동작하는 맥락을 L6->L5 등의 형태로 표현해보겠다.)

 

L7(Layer 7) 응용 계층

 

 응용이라고 하니 뭔가 응용 프로그램과 실질적인 연관이 있는 계층으로 추측할 수 있다.해당 계층은 응용 프로그램의 목적에 맞는 통신 방법을 제공한다. 즉, 사용자에게 실질적인 서비스를 제공하는 층이라고 보면 된다. 보통 응용 프로그램을 개발할 때 다양한 API 형태로 제공된다.

 

HTTP, DNS, SMTP, FTP가 대표적인 응용 계층의 프로토콜에 해당한다.

 

L6 표현 계층

 

 표현 계층은 데이터 송신 과정에서 응용 계층에서 발생한 데이터의 메시지의 포맷을 관리한다.

 

예를 들어 데이터에 대해

송신 측에서(L7->L6) 인코딩을 수행했다면, 수신 측(L6->L7)에서 이를 디코딩 해야하고,

송신 측에서 (L7->L6) 보안 이슈로 암호화를 수행했으면  수신 측(L6->L7)에서는 복호화를 해야한다. 

 

L5 세션 계층

 세션 계층은 응용 프로그램간의 통신에서 세션을 관리한다.

 연결을 생성하고, 이를 지속적으로 유지 시켜주고, 마무리 할 경우 이를 해제시키는

기능을 담당한다.

 

 어떻게 보면 네트워크 기본 I/O에 관해 정의한 계층이다.

우리가 윈도우 환경에서 소켓 프로그래밍을 할 때 사용하는 Winsock이 이에 해당한다.

 

 RPC가 대표적인 세션 계층의 프로토콜이다.

 

L4 전송 계층 (중요)

 

 이전 게시글에서 네트워크의 기능 중 안전하고 신뢰성 있는 데이터 전송 방식을 제공했다는 것 기억하는가?

 

 해당 계층은 응용 프로그램간의 통신 중, 최종 통신 목적지(우리가 최종적으로 데이터를 전달하는 곳은 응용 프로그램임. 호스트가 아님), 데이터를 전송하는 방식과 전송하는 것을 제공한다.

 

 헷갈리면 안된다!! 이 계층은 목적지까지 도달하는 경로을 결정하는 계층이 아니다. (이건 네트워크 계층)

네트워크 계층을 통해 결정된 최적의 경로를 기반으로 데이터를 전송하는 것이다. (수신 L3 -> L4)

 

 이때, 안정적이고 신뢰할 수 있는 데이터 전송을 보장하는 전송 방식(TCP) 또는 일부 필수적인 기능은 제공하되,

속도와 효율성을 중시하는 데이터 전송 방식을(UDP) 결정한다.

 

TCP, UDP가 해당 계층의 대표적인 프로토콜이다. (이후 다른 게시글을 통해 디테일하게 다룰 것이다.)

 

 L3  네트워크 계층 (중요)

 

이전 게시글에서 네트워크의 기능 중 최적의 경로를 탐색한다는 점을 기억하는가?

 

 네트워크 계층은 호스트 간의 통신을 담당하며, 목적지 호스트까지 데이터를 전송하는 것을 담당한다.

네트워크 간의 최적의 경로를 결정한다. 해당 과정에서 보편적으로 목적지 호스트가 연결된 IP주소를 사용한다.

 

 특히, 라우터에는 네트워크 계층에 관한 처리방식이 구현되어 있다.

( 덕분에 여러 개의 라우터를 거처 이동할 때, 가장 최적의 경로를 탐색할 수 있다.)

 

IP(Internet Protocol)이 해당 계층의 대표적인 프로토콜이다.

L2 데이터 링크 계층

 

이전 게시글에서 네트워크의 기능 중 노드 간의 데이터 통신을 제공한다는 것 기억하는가?

 

여기서 노드(라우터)간의 통신은 어떻게 수행해야 하는가? 에 관해 데이터 링크 계층이 정보를 제공한다.

 

노드 간의 통신을 수행할 때는 보통 MAC 주소를 사용하기 때문에, IP 주소 정보를 MAC주소로 바인딩(= 대응시키는)하는 과정이 필요하다. (송신 L3 -> L2)

이를 위한 프로토콜이 ARP(Address Resolution Protocol)이다.

 

 

 참고로 데이터 링크 계층의 정보는 헤드와 트레일러의 형태로 붙게 된다.

L1 물리 계층

 

 해당 계층은 송신 측은, L2의 정보를 기반으로, 물리적인 매게체(케이블 등)을 통해 전달할 데이터를 전기 신호로 바꾸어 비트 단위로 전송한다. (송신 L2 -> L1)

 

수신 측은 전달된 비트 단위의 데이터를 다시 헤더|데이터|트레일러의 형태로 복구한다. 그리고 해당 결과물을 L2 계층으로 이동시킨다 (수신 L1 -> L2)

 

TCP/IP 4계층 모델

 

TCP/IP 4계층 모델의 경우, 첫 번째 사진을 보면

 

OSI 7계층의 물리 계층(L1), 데이터 링크 계층(L2) 대신, 링크 계층(=네트워크 인터페이스 계층)의 형태로 표현됐다.

OSI 7계층의 응용 계층(L7), 세션 계층(L6), 표현 계층(L5) 대신, 응용 계층의 형태로 표현되어 있다.

나머지 전승 계층은 그대로 이다.

 

 

링크 계층

 

 링크 계층은 OSI 7계층의 L1 L2의 내용처럼 물리적 장치를 통한 실제 데이터 통신을 담당한다.

네트워크 HW와 드라이버가 이에 해당한다. 

인터넷 계층

 

 링크 계층의 도움을 받아 데이터를 호스트까지 전달할 최적의 경로를 탐색한다.

보통 논리적 주소인 IP 주소를 사용한다.

전송 계층

 

 앞서 언급했듯, 인터넷 계층에서 호스트까지의 최적의 경로를 탐색했지만 우리의 최종 목적지는 호스트가 아닌
응용 프로그램
이다. 이때 전송 계층은 포트라는 것을 사용해 호스트에서 실행되는 다양한 프로세스 중에서 목적지를 결정해 데이터를 전달할 수 있다.

 

 그 뿐만 아니라, 인터넷 계층에서는 데이터의 유실과 손상을 처리하지 못하기 때문에 전송 계층에서 이를 검증함으로써 신뢰성 있는 데이터 전송을 수행할 수 있다. 

 

응용 계층

 

 전송 계층을 기반으로한 다양한 프로토콜 및 응용 프로그램들이 해당 계층에 속한다.

소켓을 사용한 네트워크 프로그램들 또한 여기에 해당한다.