본 글은 Computer Networking: a Top Down Approach의 Overview of Network Layer 챕터를 정리한 글입니다.
네트워크 계층의 주 역할은 발신 호스트에서 수신 호스트로 패킷을 이동시키는 매우 단순한 기능이다.
이를 위해 네트워크 계층에 두 가지 중요한 기능이 존재한다.
포워딩
패킷이 라우터의 입력 링크에 도착하면 적절한 출력 링크로 이동해야 한다.
위 그림 예시에서는 H1
에서 출발한 패킷이 H2
로 향할 때, R1
을 거쳐 H2
로 향하는 다음 라우터에 전달되어야 한다.
포워딩은 하나의 기능일 뿐이고 data plane에서 구현된다.
패킷은 악의적인 호스트에 시작 또는 도착 예정인 경우 차단 될 수 있고, 다수의 발신 링크를 통해 중복 전송될 수도 있다.
라우팅
패킷이 발신자에서 수신자까지 이동할 때의 경로가 결정돼야 한다.
이런 경로를 계산하는 알고리즘이 라우팅 알고리즘이다.
control plane에서 구현된다.
포워딩과 라우팅은 종종 혼용하여 사용되기도 하는 용어지만, 정확한 정의는 다음과 같다.
포워딩: 패킷을 입력 링크에서 적절한 출력 링크로 전송하는 라우터 로컬 작업
라우팅: 패킷이 발신지부터 목적지까지 이동하는 end system 간의 경로를 결정하는 프로세스
펜실베니아에서 플로리다까지 이동한다면, 운전자는 도로에서 수많은 IC(고속도로의 입구와 출구)를 통과한다.
여기서 포워딩은 하나의 IC를 통과하는 과정이라고 생각할 수 있다.
여행을 시작하기 전에 운전자는 지도를 보고 여러 경로 중 하나를 선택할 수 있고,
경로는 IC로 연결된 여러 개의 도로로 구성된다.
여기서 라우팅은 펜실베니아에서 플로리다까지의 여러 전체 경로 중에서 하나를 선택하는 과정이다.
포워딩 테이블은 모든 네트워크 라우터의 핵심 요소이다.
라우터는 도착한 패킷의 헤더에 있는 하나 이상의 필드 값을 검사하고,
이 값을 사용해 포워딩 테이블에 인덱스로 사용함으로써 패킷을 전달한다.
포워딩 테이블에는 헤더의 값과 대응되는 발신 링크가 기록되어 있기 때문에 패킷이 올바른 링크로 이동할 수 있다.
위 예시에서 패킷은 0110
이라는 헤더값을 가지고 있고, 포워딩 테이블에는 해당 값이 2
링크와 매칭되기 때문에, 패킷은 2
링크로 이동한다.
그렇다면 포워딩 테이블은 처음에 어떻게 구성되는 것일까?
위 그림에서 알 수 있듯이 라우팅 알고리즘이 라우터의 포워딩 테이블을 결정한다.
또한 한 라우터의 라우팅 알고리즘은 다른 라우터의 라우팅 알고리즘과 통신하여 라우터의 포워딩 테이블의 값을 계산한다. (이것을 위해 라우팅 프로토콜이 존재한다. 자세한 사항은 뒤에서 살펴보자)
만약 라우팅 프로토콜이 존재하지 않는다면 각 라우터에 인력이 투입되어 각 인력끼리 소통해야 되기 때문에 오류가 발생하기도 쉽고 네트워크 구조의 변경에 대응 속도가 느릴 것이다.
위 그림에서는 원격 컨트롤러가 모든 라우터의 포워딩 테이블을 배포하고 있다.
기존에 라우터에 포함되어 있던 라우팅 알고리즘(control plane)이 물리적인 라우터에게서 분리된 것이다.
그래서 라우터는 포워딩만을 기능하며, 원격 컨트롤러는 데이터 센터에 구현되어 ISP 또는 제3자가 관리하게 된다.
라우터와 원격 컨트롤러는 포워딩 테이블 및 기타 라우팅 정보가 포함된 메시지를 서로 교환한다.
이런 원격 컨트롤러는 소프트웨어로 구현되므로 본 방식을 software-defined networking이라 부른다.
네트워크 계층이 제공할 수 있는 서비스를 고려할 때, 다음과 같은 질문을 할 수 있다.
전송 계층이 네트워크 계층에게 패킷을 전달할 때, 네트워크 계층에 의지하여 패킷을 올바르게 전달시킬 수 있는가?
여러 개의 패킷을 전송하면 수신자의 전송 계층에 순서대로 전달되는가?
두 패킷을 순차적으로 전송했을 때, 두 패킷의 전송 간격과 수신 간격이 일치하는가?
네트워크에서 네트워크 혼잡도에 대한 피드백을 제공하는가?
위와 같은 질문에 대한 답은 네트워크 계층에서 제공하는 서비스 모델이 결정한다.
즉, 네트워크 서비스 모델이 패킷 전달 특성을 정의한다.
다음과 같은 네트워크 서비스가 포함될 수 있다.
전달 보장 (Guaranteed delivery)
특정 지연 시간 이내로 전달 보장 (Guaranteed delivery with bounded delay)
순서대로 패킷 전달 보장 (In-order packet delivery)
최소 대역폭 보장 (Guaranteed minimal bandwidth)
보안 (Security)
위 서비스들은 일부일 뿐이고, 다양한 유형이 가능하다.
인터넷 네트워크 계층은 best-effort 서비스라는 단일 서비스를 제공한다.
이 서비스는 패킷이 순서대로 전달된다는 보장이 없고, 전달 자체를 보장하지도 않는다. 또한 지연 시간 및 최소 대역폭도 보장하지 않는다.
즉, best-effort 라는 표현은 서비스가 전혀 제공되지 않는다는 의미이다.
ATM 네트워크 아키텍처, Intserv 아키텍처와 같은 best-effort를 넘어서는 서비스 모델이 구현되어 왔지만, 흥미롭게도 기존의 인터넷 best-effort 서비스는 DASH와 같은 대역폭에 민감한(bandwidth-sensitive) 앱 프로토콜과 잘 조합되어 왔다.
네트워크 계층은 발신 호스트에서 수신 호스트로 패킷을 이동시키는 단순한 역할을 한다.
패킷을 이동시키기 위해 포워딩과 라우팅 기능을 지원한다.
포워딩은 data plane에 구현되는 기능으로, 어떤 입력 링크에서 출력 링크로 이동할 지를 선택한다.
라우팅은 control plane에 구현되는 기능으로, 패킷의 전체 경로를 설정하는 기능이다.
라우터에 라우팅 알고리즘이 내재되는 것이 전통적인 방식이었으나, ISP 또는 제3자가 원격 컨트롤러를 통해 라우팅을 하는 SDN 방식이 도입되고 있다.
네트워크 계층은 패킷 전달 보장, 지연 시간 보장 등의 다양한 서비스를 제공할 수 있다.
인터넷은 best-effort service라 불리는, 아무 기능도 제공하지 않는 서비스를 제공하고 있으며, 의외로 이런 특성이 다른 프로토콜과 잘 조합되어 왔다.