이번 글에서는 네트워크 5계층과 프로토콜에 대해 정리하고자 한다.
인터넷은 매우 복잡하고 거대한 개념이다.
이 개념을 그냥 구현하려고 한다면 매우 복잡하고 거대하기 때문에 힘든일이 될 것이다.
그래서 이 거대한 개념을 보다 작은 단위의 개념으로 나눈다음, 이 작은 단위의 개념을 서로 연결해서 큰 개념을 구현하도록 설계했다.
비행기 탑승 절차와 레이어
예를 들어 비행기를 타고 다른 나라로 여행을 가는 과정을 생각해보자.
비행기는 단순히 타고싶을 때 타서 바로 슝 날아가서 도착하는게 아니라 여러 복잡한 절차가 존재한다.
비행기 표 예매 > 짐 맡기기 > 탑승구에서 비행기 탑승 > 활주로 이륙 > 비행 > 활주로 착륙 > 비행기에서 내려 탑승구로 나오기 > 짐 찾기 > 비행기 티켓에 대해 문제가 있을 경우 피드백 남기기
위 과정을 잘 보면, 비행기에서 내리는 과정은 비행기에 탑승하는 과정의 역순으로 진행되는 것을 알 수 있다.
이를 각 단계의 관점에서 생각해보면 아래와 같이 볼 수도 있다.
위에서 각각의 서비스는 하나의 layer를 담당하게 된다.
그리고 이 각각의 layer는 인접한 layer와 연관되어 있다.
이 레이어 모델에서 제일 중요한 개념은, 현재 레이어는 아래 레이어 (below layer) 가 제공하는 서비스를 이용하여 자신의 서비스를 제공한다는 것이다.
비행기 서비스에서 예를 들어보자.
활주로 서비스를 이용하여 이륙한 뒤, 활주로 서비스를 사용하려 착륙하려면 그 사이에 어떤 과정이 필요할까?
반드시 비행기로 목적지까지 이동하는 라우팅 서비스가 필요하다.
즉, 활주로에 착륙하는 서비스는 비행기로 목적지까지 이동하는 라우팅 서비스에 의존한다는 것이다.
이렇게 비행기로 이동한다는 하나의 큰 서비스를 작은 세부 단계로 나눠 계층화 시켜두면 큰 서비스를 유지보수하기가 쉽다는 장점이 있다.
각각의 작은 서비스가 인접하지 않았다면 서로에게 영향을 끼치지 않는다.
따라서 작은 서비스 하나를 업데이트할 때 다른 서비스에 영향을 미치지 않는 방식으로 업데이트를 할 수 있다는 것이 큰 장점이다.
예를 들어 짐 체크를 할 때, 무게 제한을 바꾼다고 하면, 이것 자체는 짐을 체크하는 서비스에 영향을 줄 뿐, 게이트를 통과하고, 활주로를 이륙하고 라우팅하는 과정을 수행하는데에는 영향이 없다.
OSI 7계층과 인터넷 프로토콜 레이어
OSI 7계층은 위 비행기 사례의 인터넷 버전 레이어라고 보면 된다.
이 개념은 ISO라는 국제 표준화 기구에서 만든 개념으로, 인터넷을 만들때 이 개념을 참고해서 만들라는 권고안이다.
그래서 reference model, 참조 모델이라고 부른다.
실제 인터넷에서 쓰는 프로토콜은 presentation, session 계층이 application 계층에 통합된 형태이다.
(그래서 정말 참조 모델이다.)
우리가 사용하는 Internet 은 위와 같은 레이어 구조를 가진다.
이 레이어를 구조를 통해, 현재 계층은 아래 계층이 제공하는 서비스를 이용해서 윗 계층에 어떤 서비스를 제공하겠다는 것을 알 수 있다.
이 계층에 대해 자세히 정리하면 아래와 같다.
Application 계층
가장 상위에 있는 계층이다.
크게 우리가 사용하는 인터넷 응용 어플리케이션들 (브라우저, 게임 클라이언트 등) 과 이 어플리케이션들을 지원하기 위한 프로토콜 (HTTP, IMAP, SMTP, DNS) 2가지가 속해있다.
Transport 계층
위에서 정리한 레이어의 개념대로 어플리케이션 계층은 트랜스포트 계층이 제공하는 서비스를 사용하여 자신의 서비스를 제공한다.
트랜스포트 계층은 process 와 process 사이에 데이터를 주고받는 서비스를 제공한다.
프로세스는 하나의 큰 어플리케이션을 구성하는 작은 실행 단위이므로, 프로세스와 프로세스 간 데이터를 주고받는 서비스가 있어야 이를 기반으로 하나의 큰 어플리케이션이 데이터를 주고 받을 수 있다.
이 계층과 관련된 프로토콜로는 대표적으로 TCP 와 UDP가 있다.
Network 계층
트랜스포트 계층이 하나의 컴퓨터 위에서 실행되는 여러 프로세스들에 대한 데이터 전송 서비스를 제공하려면,
그 전제로서 일단 데이터가 하나의 컴퓨터까지는 와야한다.
네트워크 계층은 컴퓨터와 컴퓨터 사이의 데이터를 주고받는 서비스를 제공하는 계층이다.
이때 주고받는 데이터의 단위를 '데이터그램' 또는 '패킷' 이라고 한다.
데이터를 주고받을 때는 직접 주고받을 수도 있지만, 보통은 여러 라우터를 거쳐서 주고받게 된다.
따라서 여러 라우팅 프토콜이 필요하고, 컴퓨터와 컴퓨터를 식별하기 위한 IP (Internet Protocol) 도 필요하다.
Link 계층
컴퓨터와 컴퓨터 사이에 데이터를 주고받으려면, 컴퓨터와 컴퓨터가 연결이 되어있어야 한다. (link)
더 정확하게는 각각의 컴퓨터가 속한 네트워크와 네트워크끼리 연결이 되어 있어야 한다.
그런데 각각의 네트워크는 서로 다른 종류의 기술을 사용하여 네트워크를 구성하고 있을 수도 있다.
가령 어떤 곳은 인터넷을 이용해 네트워크를 구성했고, 다른 곳은 PPP (Point Point Protocol) 를 사용하여 네트워크를 구성했다고 하자.
라우터는 인터넷을 통해 받은 데이터를 PPP 로 구성된 네트워크로 보내기 위해, 해당 프로토콜에 맞게 형식을 바꿔서 데이터를 보낸다.
이런 일이 Link 계층에서 일어난다.
대표적인 기술들로는 Ethernemt, WiFi, PPP 등이 있다.
Physical 계층
물리 계층은 실제로 어떤 '링크' 를 통해 데이터가 이동하는지를 결정하는 계층이다.
링크는 무선인 될 수도 있고, 유선이 될 수도 있다.
캡슐화
캡슐화는 어떤 데이터를 캡슐(껍데기)로 감싸고, 그 위에 새로운 데이터를 덧붙이는 것을 말한다.
인터넷을 주고 받는 데이터는 각 레이어를 지나면서 캡슐로 씌워지기도, 캡슐이 벗겨지기도 한다.
이 그림이 그 내용을 나타낸다.
데이터를 보내는 source 컴퓨터는 최초에 어플리케이션 계층에서 message 라는 데이터단위를 생성한다.
트랜스포트 계층으로 넘어오면 message 를 캡슐화 한 뒤, 그 위에 트랜스포트 계층에서 필요한 제어 정보(헤더)를 붙인 뒤 새로 캡슐화한다. 이렇게 만든 트랜스포트 계층의 데이터 단위가 '세그먼트' 이다.
네트워크 계층에서는 이 데이터에 네트워크 계층에서 필요한 헤더를 추가하여 캡슐화한다.
이 데이터 단위를 '데이터그램(패킷)' 이라고 한다.
링크 계층에서는 다시 링크에서 사용할 헤더를 붙이고 캡슐화하며, 이 데이터 단위를 '프레임' 이라고 한다.
최종적으로 만들어진 데이터는 시그널로 바뀌어 물리 계층을 통해 목적지 컴퓨터로 전송된다.
목적지 컴퓨터에서는 거꾸로 계층을 타고 올라가면서 자신의 계층에서 필요한 헤더 데이터를 통해 서비스를 처리하고 다음 계층으로 보낸다.
이 과정을 통해 최종적으로 source 컴퓨터가 보내려고 했던 데이터가 목적지 컴퓨터의 어플리케이션에게 전달된다.
지금은 데이터 앞에 '헤더' 데이터가 추가로 붙는 것으로 적었지만, 경우에 따라서는 데이터 뒤에 '트레일러' 데이터가 붙기도 한다.
이 과정을 레이어 to 레이어의 관점으로보면 위와 같다.
어플리케이션 계층은 내가 보낸 Mesage가 상대 어플리케이션에게 잘 전달될 것만을 기대한다.
그 아래에서 메세지가 어떤 데이터가 붙어서 어떤 과정으로 전송되는지는 알 필요가 없다.
트랜스포트 계층도 마찬가지로 내가 보낸 세그먼트가 상대 컴퓨터의 트랜스포트 계층까지 잘 전달되는지만 신경쓰면 된다. 특별히 트랜스포트 계층의 TCP 프로토콜은 신뢰성있는 데이터 전송을 보장해준다.
예를 들어 데이터 3개를 1, 2, 3 순서대로 보낸다고 했을 때, 도착지에 1, 3 만 도착을 했다고 하자.
그러면 TCP는 이를 확인하고 2번을 다시보내는 작업을 통해 1, 2, 3 이라는 데이터가 반드시 보내진다는 것을 네트워크 계층이 제공하는 서비스가 존재하는 한 보장해준다.
실제로는 모든 네트워크 장치에서 이 5가지 계층을 구현하지 않는다.
스위치는 주로 2계층에서 사용되므로 2계층 정보까지만 받아 처리하고, 다시 2계층에서부터 데이터를 캡슐화해 라우터로 보내고, 라우터는 3계층까지만 데이터를 읽은 뒤, 목적지 컴퓨터를 결정하면 새로 3계층부터 캡슐화해서 최종 목적지 컴퓨터로 데이터를 보낸다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
[컴퓨터 네트워크] 9. Application Layer (2) : HTTP와 Cookie (1) | 2024.04.13 |
---|---|
[컴퓨터 네트워크] 8. Application Layer (1) : 어플리케이션 계층 개요 (0) | 2024.04.11 |
[컴퓨터 네트워크] 6. Security (0) | 2024.04.08 |
[컴퓨터 네트워크] 5. Performance (loss, delay, throughput) (0) | 2024.04.05 |
[컴퓨터 네트워크] 4. Network Core : Internet Structure (0) | 2024.03.20 |