네트워크 계층 개요와 라우터

ksh98·2024년 6월 12일

네트워크

목록 보기
17/25

네트워크 계층은 호스트간의 논리적 연결을 지원한다.

네트워크 계층의 핵심 기능

포워딩

패킷을 인풋 링크 인터페이스에서 적절한 아웃풋 링크 인터페이스로 보내는 것

  • 데이터 평면에서 이루어진다.
  • 한 라우터 안에서 일어난다.
  • 하드웨어에서 구현된다.
  • 포워딩 테이블을 이용한다.

포워딩 테이블에는 어떤 패킷이 오면 어디로 보낼지가 담겨있다. 모든 라우터가 갖고 있다. 어디로 보낼지 모르거나 ttl이 끝나거나 큐가 꽉 차면 패킷을 포워딩하지 않고 드롭하기도 한다. 아웃풋 링크의 큐가 꽉 차도 드롭한다.

포워딩을 하며 패킷을 복제하기도 한다. 예를 들어 링크 레벨에서 재전송하고 싶은 경우나 하나의 패킷을 두 링크로 보내고 싶은 경우

라우팅

출발지부터 목적지까지의 경로를 결정하는 것

  • 가능한 여러 경로 중 하나를 결정하는 것이다.
  • 경로가 결정되면 어느 곳에서 받은 패킷을 어디로 보낼지 알 수 있다.
  • 이 정보를 이용해서 포워딩 테이블을 만든다.
  • 즉 라우팅을 통해 포워딩 테이블을 만든다.
  • 제어 평면에서 이루어진다.
  • 소프트웨어적으로 알고리즘을 돌려 구현된다.

여러 라우터가 협력해야 경로를 알 수 있으므로 네트워크 전반에 걸친 과정이다.

Logically centralized control plane

  • 라우터들이 원격 컨트롤러에게 정보를 보내고 원격에서 라우팅 알고리즘을 돌린다.
  • 중앙에서 각 라우터의 포워딩 테이블을 만들고 라우터에게 보내준다.

현재 인터넷의 서비스 구조

  • 베스트 에포트 즉 아무것도 보장하지 않는다.
  • 대역폭, 신뢰성, 타이밍, 흐름 제어 이런 것 아무것도 보장하지 않는다.

라우터 구조

데이터 평면

  • 포워딩을 담당하는 부분
  • 한 라우터에서 일어나는 일이다.
  • 포워딩 테이블을 이용한다.
  • 여러 인풋 / 아웃풋 포트가 있다.
  • 한 포트는 인풋 포트이면서 아웃풋 포트가 될 수 있다.
  • 인풋 포트와 아웃풋 포트 사이에는 스위칭 패브릭이 있다.
  • 스위칭 패브릭은 인풋 포트에서 보내준 걸 올바른 아웃풋 포트로 보내준다.
  • 만들어진 포워딩 테이블은 모든 포트 속 라인 카드에 복사된다.
  • 따라서 라우팅 프로세서에게 어디로 갈지 물어보지 않고 빠르게 포워딩할 수 있다.

제어 평면

  • 라우팅 즉 경로를 결정하는 부분
  • 라우팅 알고리즘을 돌려 포워딩 테이블을 만든다.
  • 네트워크 전반에 걸친 로직
  • 알고리즘은 라우터 안에 구현되어 있다.

제어 평면에서는 모든 라우터에서 각각 라우팅 알고리즘을 돌린다. 이때 라우터들이 서로 통신을 하며 경로를 결정한다. 알고리즘을 돌리며 포워딩 테이블을 만들어지고 이를 이용해서 데이터 평면에서 포워딩을 한다.

인풋 포트

  • 왼쪽 부분은 1 계층 기기로 신호가 오면 비트로 변환한다.
  • 가운데 부분은 링크 계층 프로토콜이 적용된 부분이다.
  • 오른쪽 부분에서 포워딩과 큐잉이 이루어지고 있다.

여기에 포워딩 테이블이 존재한다. 패킷의 헤더부를 보고 어느 아웃풋 포트로 갈지 결정한다.

인풋 포트에서는 어디로 갈지 결정하면 패킷을 스위칭 패브릭으로 보낸다. 인풋 포트는 이 과정을 패킷이 들어오는 속도를 유지한 체로 수행하고 싶어한다. 하지만 인풋 포트가 많아 스위칭 패브릭이 바쁠 수도 있다. 그래서 큐잉이 필요하다.

  • 구조를 보면 인풋 포트는 알 수 있듯이 인풋 포트는 물리 계층 링크 계층 작업도 한다.
  • 패킷의 버전, 체크섬, ttl도 확인한다. 그래서 체크섬이 잘못되거나 ttl이 만료되면 패킷을 버리기도 한다.
  • ttl은 감소하므로 라우터마다 다시 써줘야 한다.
  • ttl 같은 헤더 부분 데이터도 변했으니 체크섬도 다시 계산해서 써줘야 한다.
  • 네트워크 관리르 위해 몇개의 패킷이 왔는지 세어야 한다.

목적지 기반 포워딩

  • 패킷의 목적지 주소와 포워딩 테이블을 비교해서 포워딩한다.

포워딩 테이블에는 예시와 같이 주소 범위에 따라 어느 인터페이스로 가라는 것이 나와있다.
otherwise는 어디로 보낼지 모르는 패킷이 올 수도 있으니 꼭 있어야 한다.

그런데 가능한 범위가 여러개일 수도 있다. 이를 위해 longest prefix matching을 사용한다.

어디로 보낼지 결정되어 스위칭 패브릭으로 보내고 싶어도 스위칭 패브릭이 너무 바쁘면 블록되거나 큐잉될 수 있다.

longest prefix matching

  • 목적지 주소와 포워딩 테이블을 비교할 때 왼쪽에서부터 가장 길게 매칭되는 것을 사용한다.
  • 매칭된 부분 즉 prefix는 와일드카를 제외하고 생각한다.

예를 들어 11001000 00010111 00011000 10101010의 경우
2번째와 3번째 모두 매칭이 되지만 3번째와 매칭되는 부분이 더 길어 2번 포트로 간다.

  • tcam을 이용해서 수행된다. tcam은 라우팅을 위해 최적화된 매우 빠른 메모리이다.
  • 주소를 입력하면 포트 번호를 상수 시간에 반환한다.

인풋 포트 큐잉

라우터에는 인풋 포트와 아웃풋 포트가 있는데 이는 논리적인 구분이고 모든 포트가 인풋 포트 아웃풋 포트가 될 수 있다. 들어오는 속도가 스위칭 패브릭의 속도보다 빠른 경우를 위해 큐잉이 필요하다.

HOL 블로킹

  • HOL 블로킹이란 큐의 맨 앞 패킷 때문에 뒤에 있는 패킷이 갈 수 있어도 못 가는 경우를 말한다.

예를 들어
첫번째 큐와 세번째 큐의 맨 앞 패킷이 모두 1번 아우풋 포트로 가야 하고 첫번째 큐에 있는 패킷이 먼저 움직인다고 하면 세번째 큐의 패킷은 기다려야 한다. 이때 세번째 큐의 초록색 패킷은 3번 아웃풋 포트로 가야하는데 3번 아웃풋 포트로 가는 패킷이 없어 널널해도 앞에 빨간색 패킷이 막고 있어서 가지 못한다.

스위칭 페브릭

  • 인풋 버퍼에서 알맞은 아웃풋 버퍼로 옮긴다.
  • 성능인 스위칭 비율은 인풋에서 아웃풋으로 가는 비율을 말한다.
  • 만약 n개의 포트가 있다면 인풋 또는 아웃풋 비율의 n배 이상이 이상적인 성능이다.

유형

메모리 기반

  • 인풋에서 아우풋 포트로 갈 때 패킷을 메모리에 복사해서 메모리의 복사본을 아웃풋에 복사한다.
  • 메모리 복사가 많아서 느리다.

버스 기반

  • 패킷이 매우 빠른 버스를 타고 통과해서 아웃풋을 간다.
  • 한 순간에 한 패킷만 버스를 이용할 수 있다.

크로스바

  • 여러 패킷이 동시에 이동할 수 있다.
  • 따라서 빠르다.

아웃풋 포트

  • 스위칭 패브릭에서 오는 속도가 나가는 속도보다 빠를 수 있으니 큐가 있다.

스케쥴링

스케쥴링 방식이란 전송을 위해 큐에서 패킷을 꺼낼 때 어느 패킷을 꺼낼지 결정하는 방법이다.

FIFO

먼저 온 패킷이 먼저 나간다.

만약 필요하다면 누구를 버려야 하는지에 관한 정책은 아래와 같은 것들이 있다.

  • tail-drop : 늦게 온 패킷을 버리기
  • priority : 우선 순위를 정하고 우선 순위가 낮은 녀석부터 버리기
  • random : 무작위로 버리기
  • red : random early detection 특정 문턱을 설정하고 이름 넘으면 큐가 다 차기 전인데도 패킷을 버릴 수 있다.

랜덤으로 버리는 것은 공평성을 위해서 필요하다. 만약 한 라우터에 a, b 둘이 연결되어 있고 a가 더 빠르면 a 패킷이 더 많이 먼저 들어오고 b는 맨날 드롭될 것이다. 이런 경우를 위해서 랜덤을 버린다.

우선 순위 스케쥴링

  • 우선 순위에 따라 큐가 있다.
  • 패킷의 우선 순위는 ip의 헤더를 보고 알 수 있다.
  • 기아 상태에 빠질 수 있다는 단점이 있다.
  • preemptive 우선 순위 스케쥴링이면 순위가 낮은 패킷을 보내다 더 우선 순위가 높은 패킷이 오면 멈추고 더 높은 우선 순위의 패킷을 보낸다.
  • non-preemptive이면 보내던 우선 순위가 낮은 패킷을 마저 보내고 우선 순위가 높은 걸 보낸다.

라운드로빈

  • 패킷을 몇개의 클래스로 구분한다.
  • 각 클래스의 패킷을 돌아가면서 하나씩 보낸다.

wfq

  • 우선 순위에 따른 큐가 여러개 있다.
  • 하지만 우선 순위가 높은 패킷을 먼저 쭉 보내는 것이 아니라 라운드 로빈으로 어느정도 돌아가면서 보낸다.
profile

0개의 댓글