Router

youngwiki

상위 문서: Network Layer

개요

라우터(router)는 netwrok layer에서 가장 핵심적인 장치라 해도 과언이 아니다. 특히, SDN 관점에서 라우터는 컴퓨터 네트워크에서 데이터그램(datagram)을 목적지까지 전달하기 위해 경로를 선택하고 전달을 수행(forwarding)하는 네트워크 장비이다. 해당 문서에서는, 라우터의 forwarding 기능에 주목하여 라우터의 구조와, 패킷을 입력 링크(link)에서 적절한 출력 링크로 전달하는 과정에 주목하여 서술한다.

Structure of router

Figure 1에서 볼 수 있듯이, 라우터는 control plane과 data plane으로 나뉘어 구현된다. Control plane(routing)은 보통 소프트웨어적으로 구현되며, 해당 작업에는 보통 수 밀리초가 소요된다. Data plane(forwarding)은 보통 하드웨어적으로 구현되어 보통 수 나노초가 소요된다. 라우터은 일반적으로 네 가지의 구성 요소로 이루어져 있다고 할 수 있다.
먼저, 입력 포트(input port)이다. 이때 'port'라는 용어는 물리적인 입력/출력 인터페이스를 의미하며, applicaton layer의 socket이나, transport layer의 port 번호 등의 개념과는 완전히 구분되는 개념이다. 입력 포트는 아래와 같은 여러 핵심적인 기능을 수행한다.

  1. physical layer 기능: 수신되는 physical 링크를 라우터에서 종료시킨다.
  2. link layer 기능: 수신 링크의 반대편에 있는 link layer와 상호 운용하기 위한 기능이다.
  3. Look up 기능: Forwarding table을 참조하여 도착한 패킷이 switching fabric을 통해 어떤 출력 포트로 전달되어야 하는지를 결정한다.
  4. Control 패킷 처리: Routing 프로토콜 정보를 담은 control packet 등은 입력 포트에서 라우팅 프로세서로 전달된다.

두 번째로는 Switching fabric이 있다. Switching fabric은 입력 포트와 출력 포트를 연결하는 장치로, 일종의 '라우터 안의 네트워크'처럼 작동한다.
세 번째로는 출력 포트(output port)가 있다. 출력 포트는 switching fabric으로부터 수신한 패킷을 저장하고, link/physical layer 기능을 수행해 적절한 출력 링크로 해당 패킷을 전송한다.
마지막으로, 라우팅 프로세서(routing processor)는 control plane 기능을 수행한다.[1] 전통적인 라우터에서는 routing 프로토콜을 실행하거나, forwarding table을 계산하는 등의 작업을 한다. 하지만 SDN 라우터에서는 라우팅 프로세서가 remote controller와 통신하여 해당 controller가 계산한 forwarding table을 받아 입력 포트에 설치하는 등의 작업을 수행한다. 또한 네트워크 관리 기능도 한다.

Input port function

Figure 2는 입력 포트에 대한 더욱 자세한 이미지를 제공한다. 위 문단에서 다뤘듯이, 입력 포트에는 physical/link layer의 기능에 해당하는 line-termination과 data link processing과 같은 기능을 수행하는 부분도 존재하지만, 해당 문서에서는 입력 포트가 제공하는 look up 기능에 초점을 맞춘다. 입력 포트에서 조회되는 lookup은 라우터 동작의 핵심이다. 해당 과정에서 라우터는 forwarding table을 조회(lookup)하여 도착한 패킷이 어떤 출력 포트로 전달될 지를 결정한다.[2]
Forwarding table은 라우팅 프로세서로부터 별도의 bus를 통해 line card로 복사된다.[3] 이렇게 각 line card에 forwarding table의 복사본이 존재한다면, 각각의 입력 포트가 자체적으로 forwarding 결정을 내릴 수 있게 되고, 매 패킷마다 라우팅 프로세스를 호출하지 않아도 되므로 그 효율성이 증대된다. 이런 방식을 decentralized switching이라고 하며, 이는 figure 1의 라우팅 프로세스와 입력 포트 사이의 점선에 잘 나타나 있다.

이때 forwarding table을 이용하여 lookup을 진행하는 것은 기본적으로 패킷의 헤더 필드와 forwarding table을 비교하는 것이다. 이때 forwarding 방식은 destination-based forwardinggeneralized forwarding로 나뉘어진다.

Destination-based forwarding

Destination-based forwarding는 패킷이 목적지 주소(IP 주소)를 바탕으로 어떤 출력 포트로 스위칭(switching)될지 결정하는 작업이다. 이를 구현하는 가장 단순한 방법으로는 forwarding table을 brute-force 방식으로 구현하는 것이다. 이는 모든 IP 주소에 대해 하나의 항목을 1대1 매칭하는 방법으로, 전세계에 수십억개의 IP 주소가 존재하기 때문에 전혀 실현 불가능한 방법이다.
다른 방법으로는, figure 3과 같이 단 4개의 출력 포트에 대한 forwarding table을 구성할 수 있다. figure 3은 IP 주소의 범위를 제시하고, 해당 범위 안에 패킷의 IP 주소가 들어가는지 아닌지를 판별하여 패킷의 출력 포트를 정한다. 하지만 이 방식은 기본적으로 if-else로 구현되기 때문에 비효율적이라는 방식이 있다.
이러한 한계를 극복한 방식이 longest prefix matching이다. 이 방식을 사용하기 위해서는 figure 3에 나타난 forwarding table을 figure 4와 같이 바뀌어야 한다. 이와 같은 forwarding table에서 라우터는 패킷의 IP 주소의 prefix를 테이블의 항목들과 비교하여, 일치하면 해당 출력 포트로 forwarding한다. 예를 들어 패킷의 목적지 주소가 11001000 00010111 00010110 10100001라면, 이 주소의 앞 21비트 가 첫 번째 테이블 항목과 일치하므로, 이 패킷은 링크 인터페이스 0번 으로 전달된다. 하지만, 어떤 IP 주소는 테이블의 여러 항목과 동시에 일치할 수 있다. 예를 들어 11001000 00010111 00011000 10101010의 앞 24비트는 두 번째 항목과, 앞의 21비트는 세 번째 항목과 일치한다. 이러한 경우 longest prefix matching rule을 사용하여 가장 긴 prefix를 가진 항목을 찾아, 그 해당 항목에 해당하는 링크 인터페이스로 패킷을 forwarding한다. longest prefix matching이 사용되는 이유는 IP 주소를 어떻게 할당하는지와 밀접하게 관련되어 있다.
위의 메커니즘을 통해서 출력 포트가 결정된 패킷은 switching fabric으로 전달된다.

각주

  1. 위의 세 구성 요소들은 data plane에 속한다.
  2. Forwarding table은 라우팅 프로세서가 다른 라우터들과 상호작용하여 계산하거나, remote SDN controller로부터 수신한다.
  3. line card는 많은 포트가 모여있는 하드웨어 장치이다.