해당 글은 Computer Networks: Top-Down Approach 에 대해 읽고 정리한 글입니다. 책과 동일한 순서로 정리하지 않습니다.

Router

라우터 내부에는 입력 포트와 출력 포트, 이를 이어주는 스위치 구조로 이루어진 데이터 평면(하드웨어)이 존재하며, 그 위에는 이를 제어하기 위한 라우팅 프로세스가 있는 제어 평면(소프트웨어)이 존재한다.

입력 포트

입력 포트는 1~2계층의 기능을 수행한다. 기본적으로 입력 포트의 입력 링크에서 물리적인 비트를 받는다. 또한 반대편에서는 물리적인 비트를 내보낸다. 또한 입력 포트는 들어오는 링크의 반대편에 있는 링크 계층과 상호 운용하기 위해 필요한 링크 계층을 추가적으로 수행하게 되는데, 이는 미들박스로서 표시된다 (나는 미들박스를 우선적으로 미들웨어로 치환하여 생각했다. 블랙박스와 같이 특정 작업을 수행하는 추상화된 부분.).

여기서 중요하게 다가오는 것은 검색 기능을 수행하는 것인데, 입력 포트 내에서 가장 스위치 구조와 가까운 곳에서 수행된다. 여기서 포워딩 테이블을 참조하여 출력 포트를 결정하고, 해당 출력 포트 내 가장 스위치 구조와 가까운 곳의 버퍼에 해당 패킷의 내용을 복사한다.

출력 포트

출력 포트는 수신된 패킷을 저장하고 올바른 링크로 패킷을 전송한다. 링크가 양방향인 경우, 출력 포트는 일반적으로 동일한 링크의 입력 포트와 한 쌍을 이룬다.

라우팅 프로세서

라우팅 프로세서는 라우팅 및 관리의 역할을 하는 제어 평면의 기능을 수행한다.

여기서 전통적인 라우터와 SDN이 나뉜다.

  • 전통적인 라우터: 라우팅 프로토콜(아마도 AS 내부에서의 OSPF, AS 외부에서의 BGP를 말하는 듯 하다. 여기서는 iBGP와 eBGP에 대한 개념을 별도로 나누지 않았다.) 을 실행하고, 라우팅 테이블과 연결된 링크 상태 정보를 유지관리하며 포워딩 테이블을 계산한다.

  • SDN: 원격 컨트롤러 (OpenDayLight, ONOS 등) 와 통신해 원격 컨트롤러에서 계산된 포워딩 테이블 엔트리를 수신하고, 라우터의 입력 포트에 이러한 엔트리를 설치하도록 한다.

포워딩 유형

  • 목적지 기반 포워딩: 기본적인 목적지 기반 포워딩으로, 다음 홉에 대한 정보를 기반으로 최단 경로를 보낸다. RIP프로토콜과 같은 거리 벡터 프로토콜으로 대변되는 포워딩 방식인 듯하다.
  • 일반화된 포워딩: 최단 거리 외에도 다양한 정보 및 이해관계등을 반영하여 계산한다. 거의 모든 포워딩이 이를 기반으로 한다.

입력 포트의 검색 및 목적지 기반 전송

입력 포트에서는 검색이 수행되며, 이는 라우터 동작의 핵심이 된다. 입력 포트에서는 검색 작업을 통해 라우팅 테이블에서 longest prefix matching rule을 기반으로하는 링크 인터페이스 (각각이 출력 포트에 대응된다)를 찾아낸다. 여기서 만일 KV쌍이 발견되지 않는다면, gateway로 내보내는 작업을 진행한다.

실제 내부적으로 이는 매우 빠른 과정이 필요한데, 관련 알고리즘 이외에도 SRAM을 사용하는 등의 하드웨어 단에서의 노력도 포함되는 듯하다.

검색을 통해 패킷의 출력 포트가 결정되면, 패킷을 스위치 구조로 보낸다. 만약 모종의 이유가 있다면 패킷의 차단, 큐잉, 스케쥴링 등이 추가로 발생할 수 있다.

이외에도 버전 번호, checksum, ttl 등 무결성 검증이나 valid한 패킷인지에 대한 여부를 결정하는 과정을 진행하게 된다.

(검색을 통한 ‘매치’를 먼저 하고, 그 다음 검증을 하고, 그 다음 실제 ‘액션’을 진행한다)

이제 패킷을 올바른 출력 링크에 전달한다.

스위치 구조

스위치 구조에서는 입력 포트에서 출력 포트로의 스위칭(포워딩)이 실질적으로 일어난다. 이 과정에서 세 가지 정도의 교환 방법이 존재한다.

  • 메모리를 통한 교환

    • CPU(라우팅 프로세서)를 직접 제어해서 두 포트 간 패킷을 스위칭한다.
    • 이 경우 전통적인 IO장치처럼 동작하는데, 입력 포트가 라우팅 프로세서에서 인터럽트를 보내 패킷을 프로세서 메모리에 복사한다.
    • 올바른 출력 포트를 찾은 뒤 프로세서가 패킷을 출력 포트의 버퍼에 복사한다.
    • 메모리 대역폭이 초당 최대 B인 패킷을 다루는 경우 전체 전달 처리량은 B/2보다 작아야한다.
    • 이외에도 최근에는 공유 메모리를 사용하는 방식을 쓴다.
  • 버스를 통한 교환

    • 라우팅 프로세서 개입 없이 공유 버스를 통해 입력포트가 직접 출력 포트로 패킷을 전송한다.
    • 한 번에 하나의 패킷만 버스를 통과할 수 있어, 병목이 크게 일어날 수 있다.
    • 교환 속도가 버스 속도에 의해 제한된다.
    • 작은 기업 및 작은 네트워크에서는 사용하기 좋을 수 있다.
  • 상호연결 네트워크를 통한 교환

    • 공유 버스 구조를 교차하여 각 교차점을 컨트롤하여 패킷을 제어하는 방식.
    • 여러 패킷을 병렬로 전달 가능하다.
    • 그러나 특정 버스에 대해서는 한 번에 하나의 패킷만 이동 가능하므로, 동일한 목적지 출력 포트로 여러 패킷이 이동해야하는 경우 병목이 발생할 수 있다.