spring_sunshine
Coding Blog
spring_sunshine
전체 방문자
오늘
어제
  • 분류 전체보기 (144)
    • 개발일지 (2)
    • Java (12)
      • 개념 (12)
      • 코테 (0)
    • Spring (5)
      • 개념 (5)
      • 프로젝트 (0)
    • CS (19)
      • 네트워크 (9)
      • 스터디 (6)
      • 정처기 (3)
    • SQLD (3)
    • React (27)
      • [책] 리액트를 다루는 기술 (13)
      • [강의] 만들면서 배우는 리액트 (2)
      • 개념 (11)
    • React Native (10)
      • [책] 리액트 네이티브 앱프로그래밍 (4)
      • [강의] 처음 배우는 리액트 네이티브 (4)
      • 프로젝트 (1)
    • Python (37)
      • [책] 이코테 (9)
      • [강의] 파이썬 알고리즘 문풀 (6)
      • [강의] 파이썬입문과 크롤링기초 (6)
      • 개념 (7)
      • 백준 (9)
    • Flutter (4)
      • Dart (4)
    • ML (14)
      • [책] 혼공머신 (6)
      • [강의] 딥러닝 CNN (4)
      • NumPy (4)
    • JavaScript (3)
    • 기타 (1)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
spring_sunshine

Coding Blog

라우터의 내부
CS/네트워크

라우터의 내부

2023. 12. 10. 15:09

라우터의 4가지 요소

  • 입력 포트
    • 라우터로 들어오는 패킷을 수신하는 포트
    • 입력 포트의 맨 왼쪽과 맨 오른쪽 박스는 라우터로 들어오는 입력 링크로, 물리 계층 기능을 수행한다.
    • 또한 입력 포트는 들어오는 링크의 반대편에 있는 링크계층과 상호 운용하기 위해 필요한 링크 계층 기능을 수행한다.
    • 가장 중요한 기능은 입력 포트에서 검색 기능을 수행하는 것이다. 여기서 포워딩 테이블을 참조하여 도착된 패킷이 스위치 구조를 통해 라우터 출력 포트를 결정한다.
    • 라우팅 프로토콜 정보를 전달하는 제어 패킷은 입력 포트에서 라우팅 프로세서로 전달된다.
  • 스위치 구조
    • 입력 포트에서 수신한 패킷을 출력 포트로 전달하는 방식
    • 라우터의 입력 포트와 출력 포트를 연결한다.
    • 스위치 구조는 라우터 내부에 포함되어 있다
  • 출력 포트
    • 라우터에서 출발하는 패킷을 전송하는 포트
    • 스위치 구조에서 수신한 패킷을 저장하고, 필요한 링크 계층 및 물리 계층 기능을 수행하여 출력 링크로 패킷을 전송한다.
    • 링크가 양방향인 경우, 출력 포트는 일반적으로 동일한 링크의 입력 포트와 한쌍을 이룬다.
  • 라우팅 프로세서
    • 패킷을 목적지로 전달하기 위한 경로를 결정하는 장치
    • 제어 평면 기능을 수행한다.
    • SDN 라우터에서 라우팅 프로세서는 원격 컨트롤러와 통신하여 원격 컨트롤러에서 계산된 포워딩 테이블 엔트리를 수신하고, 라우터의 입력 포트에 이러한 엔트리를 설치한다.
    • 또한, 네트워크 관리 기능을 수행한다.

입력 포트 처리 및 목적지 기반 전송

  • 입력 포트에서 수행되는 검색은 라우터 동작의 핵심이다.
  • 라우터는 포워딩 테이블을 사용하여 도착 패킷이 스위치 구조를 통해 전달되는 출력 포트를 검색한다.
  • 포워딩 테이블은 라우팅 프로세서에서 계산/갱신되거나, 원격 SDN 컨트롤러에서 수신된다.
  • 32비트 IP주소의 경우, 포워딩 테이블을 억지로 구현한다면 모든 가능한 목적지 주소마다 하나의 엔트리가 필요하고, 이는 40억개 이상의 주소가 있어야 하므로 불가능하다.
  • 이 문제의 처리를 위해 라우터 0~3의 4개의 링크가 있다고 가정해보자. 목적지 주소 범위로 포워딩 테이블을 구성할 경우 4개의 엔트리를 갖는 포워딩 테이블이면 가능하다.
  • 이런 형식의 포워딩 테이블에서 라우터는 패킷의 목적지 주소의 프리픽스를 테이블의 엔트리와 매치한다.
  • 이는 목적지 주소가 1개 엔트리 이상에 매치될 수 있는 가능성이 있음을 알 수 있고, 이러한 다수의 매치가 있을 때 라우터는 프리픽스 매치 규칙(가장 긴 매치 엔트리를 찾고 여기의 링크 인터페이스로 패킷을 보냄)을 사용한다.


스위칭

  • 스위치 구조는 패킷이 입력 포트에서 출력 포트로 실제로 스위칭되는 구조를 통과하므로 라우터의 핵심이다.
  • 메모리, 버스, 상호연결 네트워크를 사용하는 방법들로 스위칭을 수행할 수 있다.
  • 메모리를 통한 교환
    • 초기의 라우터는 라우팅 프로세서를 직접 제어해서 입력포트와 출력포트 사이에서 패킷 스위칭을 하는 전통적인 방식을 썼다.
    • 패킷이 도착하면, 입력포트는 라우팅 프로세서에게 인터럽트를 보내 패킷을 프로세서 메모리에 복사한다.
    • 라우팅 프로세서는 헤더에서 목적지 주소를 추출한다.
    • 포워딩 테이블에서 적절한 출력포트를 찾은 후, 패킷을 출력포트의 버퍼에 복사한다.
  • 버스를 통한 교환
    • 입력포트는 라우팅 프로세서의 개입 없이 공유 버스를 통해 직접 출력포트로 패킷을 전송한다.
    • 일반적으로 미리 준비된 입력포트 스위치 내부 레이블이, 로컬 출력포트를 나타내는 패킷에게 전송되거나 버스에 패킷을 전송하여 수행된다.
    • 모든 출력포트에 패킷이 수신되지만, 레이블과 매치되는 포트만 패킷을 유지한다.
    • 레이블은 버스를 통과하기 위해서만 사용되므로 출력포트에서 제거된다.
    • 동시에 여러 패킷이 다른 입력포트에 있는 라우터에 도착하면, 한번에 하나의 패킷만 통과할 수 있기 때문에 나머지 모든 패킷이 대기해야 한다.
    • 모든 패킷이 하나의 버스를 통과해야 하므로, 라우터의 교환 속도는 버스 속도에 의해 제한된다.
  • 상호연결 네트워크를 통한 교환
    • 크로스바 스위치는 N개의 입력포트를 N개의 출력포트로 연결하는 2N 버스로 구성된 상호연결 네트워크이다.
    • 각 수직버스는 교차점에서 각 수평버스와 교차하며, 스위치 구조 컨트롤러에 의해 언제든지 열거나 닫을 수 있다.
    • 이를 통해 앞의 두 방식과는 달리, 여러 패킷을 병렬로 전달할 수 있다.
    • 그러나, 2개의 서로 다른 입력포트에서 나오는 2개의 패킷이 동일한 출력포트로 보내지는 경우는 한번에 하나의 패킷만 특정 버스에서 전송될 수 있기 때문에 입력을 기다려야 한다.

출력 포트 처리

  • 출력포트 처리는 출력포트의 메모리에 저장된 패킷을 가져와서 출력링크를 통해 전송한다.
  • 여기에는 전송을 위한 패킷 선택 및 큐 제거, 필요한 링크계층 및 물리계층 전송 기능을 수행하는 것이 포함된다.

어디에서 큐잉이 일어날까?

  • 패킷 큐는 입력포트와 출력포트 모두에서 형성될 수 있다.
  • 큐의 위치와 범위는 트래픽 로드, 스위치 구조의 상대 속도 및 라인 속도에 따라서 달라진다.
  • 이 큐가 더 커지면 라우터 메모리가 결국 소모될 수 있고, 도착하는 패킷을 저장할 수 있는 메모리가 없을 때 패킷 손실이 발생한다.

입력 큐잉

  • 도착하는 모든 패킷을 전송하기에 스위치 구조에 입력라인 속도에 비해 충분히 빠르지 않으면 어떻게 될까?
    • 이 경우에는 패킷이 스위치 구조를 통해 출력포트로 전송되기 위해 차례를 기다려야 한다.
  • 이 큐잉의 결과를 살펴보기 위해 크로스바 스위치 구조를 가정해보자.
    • 1) 모든 링크의 속도는 같다.
    • 2) 입력링크가 패킷을 받는 것과 같은 속도로 하나의 패킷을 입력포트에서 주어진 출력포트로 전달한다.
    • 3) FCFS(First-Come-First-Served) 방식으로 패킷은 입력큐에서 출력큐로 이동된다.
    • 출력포트가 다르다면 여러 패킷이 병렬로 전달 가능하지만, 같다면 스위치 구조는 한번에 하나의 패킷만 지정된 출력포트로 전송이 가능하고 나머지 패은 기다려야 한다.
  • 같은 출력포트로 보내지는 2개의 패킷이 있는 경우 하나의 패킷은 기다려야 하고, 다른 출력포트임에도 앞의 패킷 때문에 대기해야 하는 HOL(Head-of-the-line)차단이 발생한다.

출력 큐잉

  • 입력포트와 출력포트의 개수가 각각 N개이고 속도가 R일 때, 스위치의 속도가 R보다 N배 빠르고 모든 입력포트의 패킷이 동일한 출력포트로 향한다고 가정하자.
  • 이때, 출력링크에서 단일 패킷을 보내는데 걸리는 시간에 N개의 새로운 패킷이 출력포트에 도착한다. 출력포트는 시간 단위에 단일 패킷만을 전송할 수 있기 때문에 N개의 도착 패킷은 출력링크를 통한 전송 큐에서 대기해야 한다.
  • 이때 큐의 공간이 충분하지 않으면, 즉 메모리가 충분하지 않을 때 도착한 패킷을 삭제하거나 이미 대기중인 하나 이상의 패킷을 제거하여 새로 도착한 패킷을 저장하기 위한 공간을 확보해야 한다.
  • 이러한 큐잉의 결과는 출력포트의 패킷 스케줄러가 전송 대기중인 패킷 중 하나를 선택하여 큐에서 제거하게 된다.

패킷 스케줄링

FIFO

  • 링크가 현재 다른 패킷을 전송 중이면, 출력링크 큐에 도착한 패킷은 전송을 기다린다.
  • 도착한 패킷을 담을 버퍼 공간이 충분하지 않은 경우, 도착 패킷의 공간을 확보하기 위해 큐의 패킷 제거 정책은 패킷 손실 여부 또는 다른 패킷을 큐에서 제거할 여부를 결정한다.
  • 이 규칙은 출력링크 큐에 도착한 순서와 동일한 순서로 출력링크에서 전송할 패킷을 선택한다.

우선순위 큐잉

  • 이 규칙에서 출력링크에 도착한 패킷은 우선순위 클래스로 분류된다.
  • 실제로 network operator는 네트워크 관리 정보를 운반하는 패킷이 사용자 트래픽보다 우선순위를 수신하도록 큐를 구성할 수 있다.
  • 전송 패킷을 선택할 때 전송 대기중인 패킷으로 차 있는 상태이고, 가장 높은 우선순위 클래스에서 패킷을 전송한다.
  • 우선순위가 동일한 패킷들 중에서는 FIFO 방식으로 선택한다.
  • 비선점 우선순위 큐잉: 낮은 우선순위의 패킷이 전송되고 있을 때, 높은 우선순위의 패킷이 도착하더라도 선점하지 않고 전송이 끝날 때까지 기다린다.

라운드 로빈과 WFQ

  • 라운드 로빈에서는 우선순위 큐잉과 같이 클래스로 분류되지만 엄격한 서비스 우선순위가 존재하지 않으며, 라운드 로빈 스케줄러가 클래스 간에 서비스를 번갈아서 제공한다.
  • 작업 보존 큐잉: 전송을 위해 큐에서 기다리는 패킷이 있다면 링크의 유휴 상태(데이터를 전송하지 않는 상태)를 허락하지 않는다.
  • 즉, 클래스에서 패킷을 찾지 못하면 시퀀스의 다음 클래스를 바로 검사한다.
  • 라우터에서 널리 구현된 라운드 로빈 큐잉의 일반화된 형태는 WFQ (Weighted Fair Queuing)이다.
    • 도착하는 패킷은 적절한 클래스별 대기 영역에서 분류되어 대기한다.
    • WFQ 스케줄러는 라운드 로빈처럼 순환 방식으로 동작한다. (클래스1 → 클래스2 → 클래스3)
    • 작업 보존 큐잉을 따르므로 빈 클래스 큐를 찾으면 서비스 순서에서 다음 클래스로 즉시 이동한다.
    • WFQ는 각 클래스마다 다른 양의 서비스 시간을 부여받는다는 점에서 라운드 로빈과 차이가 있다.
    • 각 클래스 i는 가중치 w(i)를 할당받고, 전송할 클래스 i 패킷이 있는 동안에 클래스 i는 w(i) / (전송을 위해 큐에 패킷이 있는 모든 클래스의 합) 만큼의 서비스 시간을 보장받는다.
    • 따라서 전송률 R인 링크에 대해, 클래스 i는 항상 최소한 R*w(i) / (전송을 위해 큐에 패킷이 있는 모든 클래스의 합)의 처리율을 갖는다.

 

'CS > 네트워크' 카테고리의 다른 글

인터넷 프로토콜(IP)  (0) 2023.12.10
네트워크 계층  (0) 2023.12.10
TCP  (1) 2023.11.28
파이프라이닝된 신뢰적인 데이터 전송 프로토콜  (0) 2023.11.16
신뢰적인 데이터 전송 원리  (0) 2023.11.11
    'CS/네트워크' 카테고리의 다른 글
    • 인터넷 프로토콜(IP)
    • 네트워크 계층
    • TCP
    • 파이프라이닝된 신뢰적인 데이터 전송 프로토콜
    spring_sunshine
    spring_sunshine

    티스토리툴바