[네트워크/Network] 라우터의 입력 포트 처리 및 목적지 기반 전달
kindof
·2021. 10. 9. 15:36
0. 들어가면서
이전 포스팅에서 OSI 7계층에 대해 공부했었습니다.
OSI 7계층은 애플리케이션 계층 → 프레젠테이션 계층 → 세션 계층 → 트랜스포트 계층 → 네트워크 계층 → 링크 계층 → 물리 계층으로 이루어져 있었는데요.
네틍워크 계층의 근본적인 역할은 송신 호스트에서 수신 호스트로 패킷을 전달하는 것이며, 이를 위해 포워딩(Forwarding)과 라우팅(Routing)이라는 기능이 네트워크 계층에서 중추적인 역할을 하게 됩니다.
본문에서는 네트워크 계층에서 포워딩과 라우팅이 무슨 차이인지에 대해 설명하고, 라우터의 입력 포트 처리 및 목적지 기반 전달 방법에 대해 설명해보도록 하겠습니다.
조금 이해하기 까다로울 수 있어서 최대한 잘 풀어서 설명해보겠습니다.
1. 포워딩과 라우팅
포워딩은 패킷이 라우터의 입력 링크에 도착했을 때 그 패킷을 적절한 출력 링크로 이동시키는 과정을 말하며, 라우팅은 송신자가 수신자에게 패킷을 전송할 때 패킷이 이동하는 경로를 결정하는 과정을 말합니다. 그리고 이러한 경로를 계산하는 알고리즘을 라우팅 알고리즘이라고 합니다.
일반적으로 포워딩 과정은 매우 짧은 시간 단위를 갖기 때문에 하드웨어에서 실행되는 반면, 라우팅은 네트워크 전반에 걸쳐 출발지부터 목적지까지 데이터그램의 종단간 경로를 결정하는 과정이기에 더 긴 시간이 소요되고, 소프트웨어에서 실행됩니다.
포워딩과 라우팅의 개념을 비유해보자면, 서울에서 부산까지 운전을 해서 갈 때 매 순간 만나는 교차로에서 방향을 결정하는 것이 포워딩이고 서울에서 부산까지 여행을 계획하는 전체적인 과정이 라우팅이라고 할 수 있는 것이죠.
네트워크 라우터에서 가장 중요한 요소 중 하나는 포워딩 테이블(Forwarding Table)입니다. 라우터는 도착하는 패킷 헤더의 필드 값을 조사하여 패킷을 포워딩하는데요. 포워딩 테이블 엔트리에 저장되어 있는 헤더의 값은 해당 패킷이 전달되어야 할 라우터의 외부 링크 인터페이스를 나타냅니다.
이 부분에 대한 설명은 아래 라우터의 입력 포트 처리 및 목적지 기반 전달에서 설명하도록 하겠습니다.
2. 라우터의 구조
먼저 라우터의 구조에 대해 살펴보겠습니다.
라우터는 위 그림과 같이 크게 입력 포트, 스위칭 구조, 출력 포트, 라우팅 프로세서로 구성됩니다.
그림에서 초록색 상자로 표시된 녀석들은 라우터로 들어오는 입력 링크의 물리 계층 기능을 수행하고, 가운데 있는 파란색 상자는 입력 링크의 반대편에 있는 링크 계층과 상호 운용하기 위해 필요한 링크 계층 기능(캡슐화 등)을 수행합니다. 마지막으로 빨간색으로 표시된 상자에서는 입력 포트의 검색 기능을 통해 포워딩 기능을 수행하게 됩니다.
그런데 그림을 유심히 보시면, 출력 포트는 스위칭 구조에서 수신한 패킷을 저장하고 필요한 링크 계층 및 물리적 계층 기능을 수행하여 출력 링크로 패킷을 전송하는 일을 하는데요. 이 때, 링크가 양방향 트래픽을 전달할 수 있다면, 출력 포트가 동일한 링크의 입력포트 역할을 하기도 합니다. 위 그림에서 화살표 방향을 반대로 그려보면 이해가 되실 것 같습니다.
위에서 설명한 내용을 이해하기 위해 라우터의 입력 포트 부분만 자세히 확대한 그림입니다. 여기까지 이해가 되셨나요?
3. 입력 포트 처리 및 목적지 기반 전달
앞에서 언급했듯이 입력 포트의 회선 종단 기능(초록 상자)과 링크 계층 처리(파란색 상자)는 라우터의 개별 입력 링크와 관련된 물리 계층 및 데이터 링크 계층을 구현합니다.
한편, 입력 포트에서 수행되는 검색이 라우터 동작의 핵심이라고 볼 수 있는데요. 라우터는 포워딩 테이블을 사용하여 도착 패킷이 스위칭 구조를 통해 전달되는 출력 포트를 검색하게 됩니다. 포워딩 테이블은 라우팅 프로세서에서 계산되거나 원격 SDN 컨트롤러에서 수신됩니다.
자, 그럼 이제 실제로 포워딩 테이블을 이용해서 어떻게 출력 포트를 결정하는지 그 과정을 살펴보겠습니다. 출력 포트의 주소는 각 패킷의 대상 주소를 기반으로 한다고 해보겠습니다. 예를 들어 32비트 IP 주소의 경우, 포워딩 테이블을 억지로 구현한다면 모든 가능한 목적지 주소마다 하나의 엔트리가 필요하다고 했을 때 약 40억개의 가능한 주소가 존재하죠. 그런데 어떻게 40억 개의 엔트리를 일일이 확인하여 출력 포트를 결정할까요? 불가능에 가까운 얘기겠죠?
따라서 라우터는 아래와 같이 '범위'를 기반으로 계산을 하기 시작합니다.
위 그림에서 왼쪽은 목적지의 주소 범위를 나타내고 오른쪽 빨간색으로 쓴 숫자는 링크 인터페이스를 의미합니다. 그러니까 첫번째 줄에서 (11001000 00010111 0001000 00000000 ~ 11001000 00010111 00010111 11111111) 범위 안에 있는 목적지 주소는 0번 링크 인터페이스로 우선 보내겠다는 뜻이죠.
따라서 라우터의 포워딩 테이블은 40억 개의 엔트리 대신에 아래와 같은 프리픽스(Prefix) 기반 포워딩 테이블을 갖게 됩니다.
이 형식의 포워딩 테이블에서 라우터는 패킷 목적지 주소의 Prefix를 테이블의 엔트리와 대응시킵니다. 대응하는 엔트리가 존재하면 라우터는 패킷을 그 대응에 연관된 링크로 보내죠.
예를 들어 패킷의 목적지 주소가 '11001000 00010111 00010110 10100001'이면 어떤 링크 인터페이스로 가게 될까요? 이 주소의 앞 21개의 비트 프리픽스가 테이블의 첫번째 엔트리와 대응하므로 라우터는 이 패킷을 링크 인터페이스 0번으로 보냅니다.
그런데 만약 위에서 정의한 3개의 엔트리와 대응하지 않는 목적지 주소가 존재한다면, 최장 프리픽스 매칭 규칙(Longest Prefix Matching Rule)을 적용해야 합니다. 즉, 테이블에서 가장 긴 대응 엔트리를 찾고, 여기에 연관된 링크 인터페이스로 패킷을 보내는 것이죠.
이제 검색을 통해 패킷의 출력 포트가 결정되면 패킷을 스위칭 구조로 보내게 됩니다. 스위칭 구조는 맨 위에서 보여드렸던 라우터 구조 그림에서 가운데 커다란 빨간 박스를 말합니다.
4. 스위칭 구조(변환기)
입력포트에 대한 설명만 하고 글을 마치려다가 변환기까지는 이어지는 내용이라서 설명을 해보겠습니다.
위 입력포트에서 목적지 기반으로 패킷이 전달되면 스위칭 구조를 통해 패킷이 입력 포트에서 출력 포트로 실제로 스위칭됩니다. 따라서 스위칭 구조 역시 패킷을 실제로 스위칭한다는 점에서 굉장히 중요한 역할을 한다고 볼 수 있죠. 참고로 스위칭 구조는 위의 맨 처음 그림에서 가운데 커다란 빨간 박스를 말합니다😀
한편, 스위칭은 아래와 같이 크게 세 가지 방법으로 이루어질 수 있는데요.
왼쪽 위 그림의 방식을 메모리, 오른쪽을 크로스바, 아래를 버스 기반 스위칭 기술이라고 합니다.
1) 메모리를 통한 교환: 메모리를 통한 교환은 가장 단순한 방법입니다. 옛날 라우터들은 CPU(라우팅 프로세서)를 직접 제어해서 입력 포트와 출력 포트 사이에서 패킷을 스위칭하는 전통적인 컴퓨터를 사용했는데요. 이 방식에서는 패킷이 도착하면 입력 포트는 라우팅 프로세서에게 인터럽트를 보내 패킷을 프로세서 메모리에 복사합니다. 그 다음 라우팅 프로세서는 헤더에서 대상 주소를 추출하고 포워딩 테이블에서 적절한 출력 포트를 찾은 다음 패킷을 출력 포트의 버퍼에 복사합니다. 입력 포트와 출력 포트가 마치 I/O 장치처럼 운영체제에서 동작하는 것이죠.
2) 버스를 통한 교환: 버스 교환에서 입력 포트는 라우팅 프로세스의 개입 없이 공유 버스를 통해 직접 출력 포트로 패킷을 전송합니다. 이 때 미리 준비된 입력 포트 스위치 내부 라벨(헤더)이 로컬 출력 포트를 나타내는 패킷에게 전송되거나 버스에 패킷을 전송합니다. 그림에서 볼 수 있는 것처럼 모든 출력 포트에 패킷이 수신되지만 라벨과 일치하는 포트만 패킷을 유지하는데요. 라벨은 스위치 내에서 버스를 통과하기 위해서만 사용되므로 출력 포트에서 제거됩니다. 한편, 모든 패킷이 하나의 버스를 건너가야 하므로 라우터의 교환 속도는 버스 속도에 의해 제한되죠.
3) 크로스바 교환: 방금 전에 말한 공유 버스의 대역폭 제한을 극복하기 위해 크로스바 교환은 N개의 입력 포트를 N개의 출력 포트에 연결하는 2N 버스 구성을 통해 이루어집니다. 각 수직 버스 교차점에서 각 수평 버스와 교차하고 스위치 구조 컨트롤러에 의해 언제든지 열거나 닫힐 수 있죠. 한편, A에서 Y로, B에서 X로 패킷이 전달되어야 한다고 생각하면 메모리나 버스를 통한 교환과는 달리 패킷들이 서로 다른 입출력 버스를 사용해 동시에 전달될 수 있습니다. 그러나 두 개의 서로 다른 입력 포트에서 나오는 두 개의 패킷이 동일한 출력 포트로 보내지면 하나의 패킷만 특정 버스에서 전송될 수 있기 때문에 기다려야 하는 현상은 동일하게 일어날 수 있죠.
이번 포스팅에서는 라우터의 구조와 입력 포트에서의 목적지 기반 전달 방법, 그리고 실제로 패킷을 전달하는 역할을 하는 스위칭 구조까지 살펴봤습니다.
감사합니다.
'CS > Network' 카테고리의 다른 글
[네트워크/Network] 라우터의 패킷 지연과 패킷 스케줄링 방법 (0) | 2021.10.11 |
---|---|
[네트워크/Network] HTTP 스트리밍 및 대시(DASH) 기술 (0) | 2021.10.10 |
[네트워크/Network] TCP 혼잡제어에 대한 정리 (0) | 2021.10.08 |
[네트워크/Network] 웹 캐시(Web Cache; 프록시 서버)를 통한 응답 속도 향상 원리 이해하기 (0) | 2021.09.29 |
[네트워크/Network] TCP는 어떻게 신뢰적인 데이터 전달을 할까? (0) | 2021.09.13 |