[컴퓨터 네트워크] layers의 탄생 원리와 5계층, 프로토콜

Pakxe·2023년 9월 22일
2

컴퓨터 네트워크

목록 보기
4/16
post-thumbnail

구성

  • 시작하기
  • Layering
  • 프로토콜
  • Internet protocol stack
  • Encapsulation & Decapsulation
  • 요약

이 정리는 23-2에 수강한 컴퓨터 네트워크 강의를 기반으로 하였습니다.

시작하기

네트워크는 종단 시스템들을 이어준다. 그리고 종단 시스템들은 셀 수 없을 정도로 많다. 이들을 연결해줄 라우터와 스위치도 무수히 존재한다. 라우터와 스위치들을 잇는 링크도 다양한 종류로 존재한다. 또한 프로토콜과 다양한 하드웨어 소프트웨어도 네트워크에 포함된다.

요약하자면 네트워크는 복잡하고 다양한 장치들의 집합이라고 할 수 있다.

그렇다면 이런 거대한 시스템을 어떻게 관리할 수 있을까?

Layering(계층화)

계층화 ❌

따라서 거대한 시스템을 계층별로 쪼개 관리하는 개념이 네트워크에 도입되었다. 마치 회사의 직급같은 것이다.

네트워크가 거대하긴 하지만 하나의 디렉토리에서 관리할 수도 있긴하다. 모든 기능을 긴밀하게 엮어서 말이다. 하지만 이렇게 설계하면 나중에 문제 발생시 에러 트래킹이 어려워진다. 서로 긴밀하게 엮여있다는 것은 책임이 분산되어있다는 것과 같기 때문이다.

또한 이런식으로 한 곳에 묶어 개발하게되면 개발자간의 인터렉션이 굉징히 중요해진다. 왜냐면 내가 개발한 부분이 여러 곳에 묶여 사용되기 때문이다. 내가 만든 그리고 이런 나뉨이 많아질 수록 개발 복잡도가 증가한다.

계층화 ⭕️

위의 불편함을 해소하기 위해 거대한 문제 또는 프로그램을 break down할 수 있다. f(function)1은 f2를 서포트, f2는 f3을 서포트.. 이렇게 계층적으로 관리하는 것이다.

이런 구조를 계층화(Layering)구조라고 한다.

그리고 이렇게 만들어진 계층끼리의 교환, 통신을 interface라고 한다. (api의 i와 같다)
각 계층의 interface는 다를 수 있다. 따라서 이 interface는 오픈되어 다른 개발자(사용자)가 이를 사용할 수 있도록 한다. 이런 api를 open api라고 한다. 밑의 계층에서 위의 계층으로 open api를 제공하는 방식으로 계층화 구조를 만드는 것이다.

한명의 개발자가 모든 모듈을 만드는 것이 아니므로, 모듈의 interface는 각각 다를 수 있다.

이렇게 계층화된 방식의 구조는 책임이 명확해지기 때문에 문제가 생겼을 때 추적하기 쉽다. 또한 로컬라이즈(응집)된다. 그리고 보통 재사용성이 높아진다.

하지만 이렇게 계층화 시킨 구조는 최적화가 어려울 수 있다. 오히려 하나의 패키지로 만들어서 관리하는 것이 최적화에는 더 용이할 수 있다.

계층화 예시

비행기를 타고 내리는 과정을 예시로 들 수 있다. (이미지)

위 이미지의 과정을 보면 종단에는 티켓이 있다. 그리고 티켓 다음에는 수하물이 있으며, 그 다음은 탑승구이다. 이렇게 항공 여행은 계층으로 나눠지고, 각 계층은 아래 계층과 연계돼 서비스를 구현한다.

비행기로 이동하기 위해선 비행기가 활주로를 타야한다. 비행기가 활주로를 타기 위해선 승객의 탑승이 필요하다. 승객의 탑승을 위해선 수하물 맡기기가 필요하다. 수하물 맡기기는 티켓을 가진 승객이 있어야 가능하다. 이렇게 아래로 타고 내려가보면 비행기 타기라는 하나의 목표를 위해 구현되어야할 하위 기능들이 있다.

이렇게 계층 구조로 설계하면 일부를 수정하는게 쉬워지고, 수정하더라도 다른 계층은 수정하지 않아도 된다(모듈화가 되어있기 때문). 예시로 티켓 발권이 발권 창구에서 해야하는 것이 아니라 모바일에서 가능해진다고 해도 이 티켓 계층에서 하는 역할인 승객에게 티켓주기 기능은 본질적으로 변하지 않기 때문에 그 상위 계층인 수하물계층은 변하지 않아도 된다는 의미이다.

| 인터넷은 이렇게 거대한 기능을 5개의 계층으로 분할해 다루기 때문에 5계층이라고 칭한다.

프로토콜(protocol)

5계층에 대해서 자세하게 다루기 위해선 프로토콜에 대한 선학습이 필요하다.

실생활에서의 프로토콜

프로토콜이란 넓은 범위론 A와 B 사이의 소통 방법이라고 할 수 있다. 간단한 예시로 교수님께 메일을 쓰기 위해선 제목, 인사, 신원 밝히기, 목적, 끝인사가 필요하다. 그리고 교수님은 목적에 대한 답변을 주신다. 이런 교수님과 학생사이의 암묵적 규칙도 프로토콜이라 할 수 있다. 소통 방법이니까 말이다. 이러한 사회속 규칙은 생각해보면 우편, 택배, 전화 등 많은 곳에 존재한다.

A와 B 사이의 소통 방법을 왜 굳이 정의해야할까를 생각해보면, 내부 동작을 쉽게 다루기 위해 입력의 제한을 두는 것이 이유가 될 수 있다. 또한 친구끼리의 대화에는 제목, 인사, 신원 밝히기, 목적, 끝인사와 같은 항목이 필요없다. 나와 친구는 교수님과 학생의 소통 방법과는 다르다. 어쩌면 인사는 필요할 수 있겠다. 세상의 모든 소통에 혹시나 필요할 수 있는 모든 항목을 포함하는 것은 비효율적이기 때문에 소통 방법이 A, B에 따라 다르게 정의된 것이라고 생각한다. 위 예시로 어느정도 이해되었길 바란다.

컴퓨터 네트워크에서의 프로토콜

컴퓨터 네트워크에서 사용하는 용어인 프로토콜의 정의는 아래와 같다.

프로토콜은 둘 이상의 통신 개체 간에 교환되는 메세지 포맷과 순서뿐만 아니라, 메세지의 송수신과 다른 이벤트에 따른 행동이다.

말이 어렵지만 실제 예시를 보면 쉽게 이해할 수 있다. 메일을 보내려면 수신자 메일, 제목, 내용이 필요하다. 웹페이지는 서버에 get요청을 보내 html을 받아온다. 웹페이지를 받아오려면 수신자 메일이 필요하지 않다. 이런게 교환되는 메세지 포맷이다. 메일은 답장을 할 수 있고, 웹페이지는 html을 보낸다. 이런 후속 행동이 이벤트에 따른 행동이라고 할 수 있다.

따라서 메일과 웹은 다른 프로토콜로 소통한다. 그런데 메일을 보낸다고 해서 갑자기 웹페이지가 먹통이 된 적은 없다. 그리고 웹페이지를 새로고침한다고 해서 이상한 사람에게 메일이 보내지지도 않는다. 이렇듯 각 프로토콜은 다른 프로토콜에 영향을 주지 않는다.

예시로 든 메일과 웹 말고도 컴퓨터 네트워크에선 수많은 프로토콜이 이용된다. 그리고 이런 프로토콜들은 여러가지 통신 목적으로 사용된다.

Internet protocol stack

앞에서 네트워크는 거대하여 5개의 계층으로 나누어 관리한다고 했다.
이를 internet protocol stack이라고 한다. 각 계층의 프로토콜을 합해서 protocol stack이라고 부르는 것이다. 그리고 이번 학기에는 TCP/IP model의 protocol stack을 중점적으로 배운다. TCP/IP의 프로토콜 스택은 아래 이미지와 같다.

5개의 계층을 하나씩 살펴보자.

application

최종 사용자가 상호작용하는 곳으로, 다양한 응용 프로그램 및 서비스를 지원하는걸 책임지는 application 계층(+ application protocol)이다.

하위 계층의 도움을 받아 동작한다.

한 종단 시스템에 있는 애플리케이션이 다른 종단 시스템에 있는 애플리케이션과 정보 패킷을 교환하는데 이 프로토콜을 사용한다. 애플리케이션 계층에서의 정보 패킷을 메세지라고 부른다.

FTP, SMTP, HTTP 프로토콜이 있다.

transport

통신 당사자 간의 연결을 설정, 관리 및 해제하며, 데이터를 송수신하는걸 책임지는 transport 계층(+ transport protocol)이다.

네트워크 서비스는 데이터 송수신이 잘 되는 것이 기반이어야 하므로, application 계층은 transfer 계층에 의존적이다.

트랜스포트 프로토콜은 TCP, UDP 프로토콜이 있다. 트랜스포트 계층의 패킷은 세그먼트라고 한다.

network

데이터그램을 목적지까지 라우팅하는걸 책임지는 network 계층이다.

통신 당사자 간의 연결은 출발지부터 목적지까지 잘 송수신되어야 가능한 일이기 때문에, tranfer 계층은 network계층에 의존적이다.

트랜스포트 계층 프로토콜은 트랜스포트 계층 세그먼트와 목적지 주소를 네트워크 계층으로 전달한다. 그런 다음 네트워크 계층은 목적지 호스트의 트랜스포트 계층으로 세그먼트를 운반하는 서비스를 제공한다.

이 계층은 라우팅 프로토콜과 IP프로토콜이 있다. 라우팅 프로토콜은 출발지와 목적지 사이에서 데이터그램이 이동하는 경로를 설정하는 프로토콜이고, IP 프로토콜은 컴퓨터 네트워크에서 데이터를 패킷으로 나누고 전송하는 데 사용되는 프로토콜이다.

경로상의 한 노드(호스트 또는 패킷스위치)에서 다음 노드(호스트 또는 패킷스위치)로 이동하는걸 책임지는 link 계층이다.

네트워크는 무수한 링크들의 연결이 필요하기 때문에, network 계층은 link 계층에 의존적이다.

physical

프레임의 각 비트를 한 노드에서 다음 노드로 이동하는걸 책임지는 physical 계층이다.

링크는 비트를 잘 전송한다는게 기반이 되어야하므로, link계층은 physical 계층에 의존적이다.

Encapsulation(캡슐화) & Decapsulation


메세지가 출발지(source)에서 목적지(destination)까지 도착하려면 각 계층을 거쳐가며 순서는 아래 그림의 무지개색 순서로 거쳐가게 된다.


발신자와 가장 맞닿아있는 계층은 application 계층이다. 따라서 발신자가 보내는 메세지는 바로 application 계층에 들어가게 된다. 그리고 그 하위 계층인 transport 계층에서 메세지는 세그멘트라는 데이터 형태로 바뀌게 된다. 세그먼트는 메세지에 부가적인 정보인 헤더(그림에선 Ht)를 붙인 데이터라는 뜻이다. 그 하위 계층인 network에서 세그먼트는 network 계층에서의 헤더가 붙어 데이터그램이 된다. 그리고 마지막으로 link계층에서의 헤더가 붙어 프레임이 된다. 이렇게 한 겹씩 헤더가 추가되는 것은 encapsulation(또는 encryption)이라고 한다. 이렇게 원래의 메세지 + transport header + network header + link header 가 붙어 physical 계층으로 가 목적지로 이동된다.

그림을 보면 알겠지만 출발지의 physical 계층에서 출발한 프레임은 목적지의 physical 계층으로 도착한다. 그리고 상위 계층으로 갈 수록 그 계층에서 붙였던 헤더를 떼어내 해석하는 과정을 거친다. 그렇게 다 뗴어지고(해석을 완료하고)남은 메세지만 application에서 수신자에게 전달되는 것이다. 이렇게 헤더를 빼어 해석하는 과정을 decapsulation(또는 decryption)이라고 한다.

요약

  • 계층화: 큰 프로그램을 잘 다루기 위해 나누는 것
  • 프로토콜: 기기간의 소통 규칙
  • 프로토콜 스택: 인터넷의 계층구조
  • 캡슐화: 헤더가 점점 감싸짐

참고

https://velog.io/@estell/%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%98%88%EC%8B%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%86%B5%EC%8B%A0%EA%B7%9C%EC%95%BD
https://frog-in-well.tistory.com/m/27

잘못된 내용이 있으면 pigkill40@naver.com 으로 연락주시기 바랍니다.

profile
내가 꿈을 이루면 나는 또 누군가의 꿈이 된다.

0개의 댓글