✏️ 학부 과정을 공부하면서 정리하는 과정에서 잘못된 정보가 표기될 수 있습니다. 해당 부분은 댓글을 통해 지적해주시면 감사하겠습니다.
Computer Networking: A TOP-DOWN APPROACH
책을 통해 컴퓨터 네트워크 공부를 하면서 이해한 내용을 정리하려고 한다. 이번 글에서는 Chapter 4: The Network Layer: Data Plane
네트워크 계층: 데이터 평면에 관해서 정리한다.
💡 세그먼트(segment) : 전송 계층의 데이터 단위
네트워크 계층은 전송 계층에서 오는 세그먼트(segment)를 받아 목적지 호스트까지 전달한다.
송신 측에셔 네트워크 계층은 전송 계층에서 받은 세그먼트를 데이터그램으로 캡슐화 한다. 이 데이터그램은 IP 헤더와 함께 세그먼트를 포함하며, IP 헤더에는 출발지, 목적지 IP 주소와 TTL(Time To Live)등의 정보가 포함된다.
수신 측에서 네트워크 계층은 데이터그램을 해제하여 세그먼트를 전송 계층으로 전달한다. 이 과정에서 IP 헤더는 제거되고 전송계층은 세그먼트의 내용을 처리한다.
네트워크 계층의 프로토콜은 모든 호스트와 라우터에서 실행된다. (Internet Protocol)
라우터는 자신을 통과하는 모든 IP 데이터그램의 헤더필드를 검사한다. 이를 통해 라우터는 데이터그램을 적절한 다음 경로로 전달한다.
포워딩 : 패킷이 라우터의 입력 링크로 도착하면 라우터는 해당 패킷을 다음 적절한 출력 링크로 이동시켜야한다.
라우팅 : 송신자가 수신자에게 패킷을 전송할 때 네트워크 계층은 패킷의 이동 경로를 결정한다. 이러한 경로를 계산하는 알고리즘을 라우팅 알고리즘
이라고 한다. (라우팅 = 라우팅 알고리즘 + 포워딩)
라우터의 동작원리를 이해하는 데 중요한 개념인 데이터 평면과 제어 평면이 있다. 모든 네트워크 라우터의 핵심 요소는 포워딩 테이블이라고 할 수 있다. 라우터는 도착하는 패킷의 헤더에 있는 필드 값을 검사하고 포워딩 테이블의 색인을 통해 패킷을 전달한다. 포워딩은 데이터 평면에 의해 수행되는 핵심기능이다.
라우팅 알고리즘은 라우터의 포워딩 테이블의 내용을 결정한다. 한 라우터의 라우팅 알고리즘 기능은 다른 라우터의 라우팅 알고리즘 기능과 통신하여 해당 라우터의 값을 계산한다. 즉, 제어 평면은 라우팅 알고리즘을 통해 최적의 경로를 선택하고, 그 결과를 바탕으로 포워딩 테이블을 구성하며, 이 테이블은 데이터 평면에서 패킷의 포워딩에 사용된다.
SDN은 소프트웨어 정의 네트워킹의 약자로서 여기서 네트워크는 포워딩 테이블을 계산하고 라우터와 상호 작용하는 컨트롤러가 구현된다. SDN은 프로그래밍 가능한 네트워크를 목표로 하고 중앙 컨트롤러는 API를 통해 프로그래밍 가능하다.
데이터 평면은 라우터에서 실제로 패킷을 송신, 수신 처리하는 부분이며 라우터의 입력 포트에서 패킷을 받아 적절한 출력 포트로 전달하는 역할을 한다. 데이터 평면의 중요 기능 중 하나가 포워딩이다. 이 과정은 포워딩 테이블을 참조하여 수행된다.
네트워크 서비스 모델은 네트워크 계층에서 제공 및 지원하는 서비스의 집합이다. 송신자에서 수신자까지 채널을 통한 데이터그램 전달 서비스에는 다음 몇 가지가 있다.
전달 보장(guaranteed delivery) : 출발지 호스트에서 보낸 패킷은 목적지 호스트까지 도착할 수 있도록 보장한다.
지연 제한 전달 보장 : 패킷 전달을 보장할 뿐만 아니라 지정된 호스트 간 지연 범위 내로 전달을 보장한다.
패킷 순차 전달(in-order datagram delivery) : 패킷이 전송된 순서대로 목적지에 도착하도록 보장한다.
최소 대역폭 보장 : 송신 호스트와 수신 호스트 사이의 데이터 흐름에 대해 최소한의 대역폭 할당을 보장한다.
일관된 간격 보장 : 패킷들이 일정한(일관된) 시간 간격으로 전송되도록 보장한다.
라우터는 입력 포트, 스위치 구조, 출력 포트, 라우팅 프로세서 등이 있다.
입력 포트 : 입력 포트는 라우터에 들어오는 물리적 링크이다. 입력 포트에서 수행되는 검색(lookup) 기능
은 라우터의 핵심 작업중 하나이다. 이 작업은 스위치 구조(switching pabric)을 통해 도착하는 패킷이 전달될 출력 포트를 결정되기 위해 포워딩 테이블을 참조한다. 이 과정은 각 입력 포트에서 독립적으로 수행되는데, 이를 분산화된 스위칭(decentralized switching)
이라고 한다. 이 방식은 중앙 집중식 처리의 병목 현상을 피할 수 있다.
스위치 구조(switching pabric) : 라우터 내에서 실제로 패킷이 입력포트에서 출력포트로 전달되는 곳이다. 즉, 입력 포트와 출력 포트가 연결된 곳
출력 포트 : 스위치 구조에서 수신된 패킷을 저장하고 필요한 링크 계층 및 물리 계층 기능을 수행하여 출력 링크로 전달한다.
라우팅 프로세서 : 여기서 제어 평면 기능이 수행된다. 라우팅 프로토콜을 실행하고 포워딩 테이블과 연결된 링크 상태 정보를 관리하고 포워딩 테이블을 계산한다.
입력 포트에서 분산화된 스위칭에 대해 설명을 했는데 이러한 스위칭에는 두 가지 포워딩 방식이 있다.
목적지 기반 포워딩(destination-based forwarding) : 전통적인 방법으로서 목적지의 IP 주소만을 기반으로 패킷을 전달한다.
목적지 기반 포워딩에서 Longest prefix matching
이라는 방식이 사용되는데, 다양한 서브넷 마스크를 사용하는 IP 네트워크에서 중요하다. 이는 패킷의 목적지 주소 기반으로 포워딩 테이블에서 가장 긴 접두사(prefix)가 일치하는 항목을 찾는 방법이다. 여기서 TCAMs가 사용되는데 이는 Longest Prefix Matching을 빠르게 수행하기 위한 메모리이다.
일반화된 포워딩(generalized forwarding) : 패킷 헤더의 다양한 필드 값을 기반을 패킷을 전달한다. IP 주소 외에도 다른 출발지 IP 주소, 포트 번호, 프로토콜 유형에 따라서 전달할 출력 포트를 결정할 수 있다.
스위칭구조는 라우터의 핵심이라고 할 수 있다. 이 구조를 통해 패킷이 입력 포트에서 출력포트로 전환되기 때문이다. 패킷을 전환하는 방법에는 메모리, 버스(bus), 상호 연결 네트워크(Crossbar) 등을 사용하는 전환 방법이 있다.
스위칭 과정에는 다음 개념이 포함된다.
패킷이 라우터 내에서 입력 포트의 버퍼에서 적절한 출력 포트의 버퍼로 이동하는 과정이 포함된다.
Switching Rate : 패킷이 입력에서 출력으로 전송될 수 있는 속도를 의미한다.
초기의 가장 간단한 라우터는 전통적으로 CPU의 제어하에 입력 및 출력 포트 간 전환되는 컴퓨터였다. 패킷은 입력포트에서 프로세서 메모리로 복사된 다음 라우팅 프로세서는 헤더에서 목적지 주소를 추출하고 포워딩 테이블에서 적절한 출력 포트를 찾은 다음 패킷을 출력 포트의 버퍼에 복사한다.
입력 포트가 라우팅 프로세서의 개입 없이 공유 버스를 통해 직접 출력 포트로 패킷을 전송한다. 입력 포트는 패킷이 전송되고 있는 로컬 출력 포트를 나타내는 패킷에 스위치 내부 레이블(헤더)를 추가하고 패킷을 버스로 전송한다. 이 때 레이블과 일치하는 포트만 패킷을 유지하고 출력 포트에서 레이블이 제거된다.
크로스바 스위치는 N개의 입력 포트를 N개의 출력포트에 연결되는 2N 버스로 구성된 상호 연결 네트워크다. 이전 방식과의 차이점은 여러 패킷을 병렬로 전달할 수 있다. 만약 서로 다른 두 입력 포트의 두 패킷이 동일한 출력 포트로 향하는 경우 하나는 입력에서 기다려야한다.
출력 포트의 메모리에 저장된 패킷을 가져와 출력 링크를 통해 전송한다. 이 과정에는 패킷 선택 및 대기열 해제가 포함된다.
여러 입력 포트에서 패킷이 도착했는데, 만약 같은 출력 포트로 가려고 다른 한 패킷은 버퍼에서 기다려야한다. 이 때 버퍼가 꽉 차면 패킷 손실이 생길 수 있다.
HOL(Head-of-the-Line) Blocking : 스위칭 패브릭은 특정 출력 포트에 하나의 패킷만 전송할 수 있기 때문에 두 개의 입력 큐 앞에 있는 두 개의 패킷이 동일한 출력 큐로 향하는 경우 패킷 중 하나가 차단되고 입력 큐에서 대기해야한다.
버퍼에서 어떤 패킷을 내보내야할지 계산하는 과정이 필요하다.
버퍼링 : 출력 포트에서 버퍼링은 스위칭 패브릭의 전송 속도가 입력 포트에서 패킷을 받는 속도보다 빠를 때 필요하다. 이는 여러 입력 포트에서 동시에 도착하는 패킷들이 동일한 출력 포트로 전달되어야할 때 발생하는 큐잉을 처리하기 위한 것이다.
스케줄링 : 출력 포트에서 스케줄링은 여러 입력 포트에서 도착한 패킷들 중 어떤 패킷을 먼저 전송할지를 결정하는 과정이다. 즉, 링크에 보낼 다음 패킷을 선택하는 과정이다.
패킷을 스케줄링 하는 방법에는 FIFO, 라운드 로빈 등등 다양한 메커니즘이 존재한다.
일반적으로 선입선출은 패킷이 도착한 순서대로 전송되는 방식이다. 먼저 도착한 패킷을 먼저 내보내는 것이다. 실세계에서는 용량이 한정되어 있다. 그래서 큐의 용량이 꽉 차면 저장되어 있는 패킷을 처리하거나 도착하는 패킷을 어떻게 처리하는가. tail drop, priority drop, random drop 등의 방식이 있다.
우선순위 대기열은 패킷이 도착할 때 우선순위 클래스로 분류하고 우선순위를 가진 클래스의 패킷이 먼저 전송된다. 동일한 클래스 내에서는 일반적으로 FIFO 방식으로 처리된다.
라운드 로빈은 패킷이 수선순위와 같이 클래스로 분류되지만, 엄격한 서비스 우선순위는 존재하지 않는다. 그래서 라운드 로빈 스케줄러는 클래스 간에 서비스를 번갈아가며 제공한다.
패킷을 여러 클래스로 분류를 하고 각 클래스에는 가중치를 부여한다. 일반적으로 RR 처럼 순환하며 서비스를 제공받지만, 이 가중치는 해당 클래스의 패킷의 우선순위를 결정한다. 그래서 가중치에 따라 할당 되는 서비스 시간이 다르게 결정된다.
IP, 인터넷 프로토클은 IPv4 데이터 그램 형식과 IPv6 데이터그램 형식으로 버전이 나뉜다.
위 데이터그램 형식은 IPv4 버전으로 버전 번호, 헤더 길이, 서비스 유형, 데이터그램 길이, 식별자, 플래그, 조각화 오프셋, 수명(TTL), 규약, 체크섬, 출발지, 목적지 IP, 옵션, 데이터와 같은 헤더들로 구성되어 있다.
여기서 TTL
은 Time To Live의 약자로서 해당 패킷이 라우터를 지날 때 마다 1씩 감소하는 특징을 가지고 있는데, 만약 라우터를 통과할 때 TTL이 0으로 감지를 하면 해당 패킷은 길을 잃었다고 판단하고 패킷을 폐기 처리한다.
MTU는 각 네트워크 링크에서 한번에 전송할 수 있는 데이터의 최대 크기(Max Transfer Size)를 나타낸다. 데이터그램을 실제로 전송하기 위해서는 데이터그램을 MTU 보다 작은 단위의 각각의 파편(Faragment)으로 나누고 하위 계층인 링크 계층의 프레임에 캡슐화하여 링크를 통해 전송되어져야 한다.
IPv4 주소는 각 호스트와 라우터 인터페이스에 연결되어 있다. IPv4는 A ~ E 까지의 클래스를 이용하여 서브넷을 나누는데 D와 E는 일반적으로 사용되지 않는다.
서브넷이란 여러 호스트 인터페이스와 하나의 라우터 인터페이스를 연결하는 네트워크를 의미한다. 서브넷을 구성하는 이유는 호스트를 논리적으로 구분하고 트래픽을 효율적으로 관리하기 위해서이다.
클래스 A: 0.0.0.0 ~ 127.0.0.0
클래스 B: 128.0.0.0 ~ 191.0.0.0
클래스 C: 192.0.0.0 ~ 223.0.0.0
클래스 D (멀티캐스트 주소): 224.0.0.0 ~ 239.0.0.0
클래스 E (예약됨, 실험용): 240.0.0.0 ~ 255.0.0.0