CS/Network

[Network]네트워크 계층의 포워딩

frog-in-well 2022. 7. 30. 13:42

0. 들어가기 전에

네트워크 계층의 근본적 역할은 매우 단순하다. 송신 호스트에서 수신 호스트로 패킷을 전달한다. 네트워크 계층의 기능은 라우터에 패킷이 도착하면 적절한 출력 링크로 전달하는 포워딩과 적절한 경로를 찾는 라우팅이다.

전송 계층을 다루며 인터넷 네트워크 계층은 최선형 서비스를 제공한다고 말했다. 최선형 서비스는 패킷을 보내는 순서대로 수신됨을 보장할 수 없고, 목적지까의 전송 자체도 보장될 수 없다. 종단 시스템 간 지연 또한 보장되지 않는다. 이러한 이유로 TCP가 패킷의 유실과 손상에 대한 대처를 철저하게 하는 것이다.

1. 라우터의 구조

  • 입력 포트
    • 입력 링크의 물리 계층 기능을 수행한다.
    • 입력 링크의 반대편에 있는 링크 계층과 상호 작용을 하는 링크 계층 기능을 수행한다.
    • 포워딩 테이블을 이용해 적절한 출력 포트를 찾는 검색 기능을 수행한다.
  • 스위칭 구조
    • 라우터의 입력 포트와 출력 포트를 연결한다.
  • 출력 포트
    • 스위칭 구조에서 수신한 패킷을 저장하고 출력 링크로 패킷을 전송한다.
  • 라우팅 프로세서
    • 라우터의 포워딩 테이블을 계산한다.
    • SDN 라우터에서는 원격 컨트롤러와 통신하여 라우터의 입력 포트에 라우팅 테이블을 설치한다.

1.1 입력 포트

입력 포트에서 수행되는 검색 기능은 라우터 동작의 핵심이다. 라우터는 도착한 패킷이 스위칭 구조를 거쳐 어떠한 출력 포트로 전달될 지 검색한다. 이 때 라우팅 프로세서에서 계산된 포워딩 테이블이 이용된다. (SDN 컨트롤러에서 수신되기도 함)

  • 32비트 IP 주소를 사용하는 네트워크 시스템에서는 약 40억 개의 주소가 존재한다. 이러한 상황에서 라우팅 테이블의 엔트리를 만든다면 40억 개의 데이터가 필요한가?

당연히 아니다. 라우터에서는 목적지 IP 주소의 프리픽스를 테이블의 엔트리와 대응시킨다. 예를 들어 패킷의 목적지 주소가 1101 1101 이고 포워딩 테이블에 1101 1 에 해당하는 엔트리가 있다면 앞의 5개의 비트가 대응하므로 해당 링크 인터페이스로 패킷을 전달하면 된다.

만약 존재하는 엔트리와 대응하지 않는 주소라면 최장 프리픽스 매칭 규칙을 적용한다. 테이블에서 가장 긴 대응 엔트리를 찾고 이와 연관되는 링크 인터페이스로 패킷을 전달한다.

입력 포트에서는 검색 기능이외에도 물리 및 링크 계층 프로세싱, 패킷의 버전 번호, 체크섬 및 TTL 필드 확인, 네트워크 관리에 사용되는 카운터 수 업데이트 등을 구현한다.

1.2 스위칭 구조(변환기)

스위칭 구조는 실제로 패킷이 입력 포트에서 출력 포트로 전달되는 곳이다.

메모리를 통한 교환, 버스를 통한 교환, 인터커넥션 네트워크를 통환 교환으로 나뉜다.

1.3 출력 포트

출력 포트는 출력 포트의 메모리에 저장된 패킷을 가져와서 출력 링크를 통해 전송한다.

1.4 큐잉

패킷이 입력 포트에서부터 출력 포트로 나가기 위해서는 스위칭 구조의 속도와 회선 속도가 중요하다. 만약 이들의 속도가 느리다면 라우터에 도착한 패킷이 대기할 장소가 필요하다. 패킷 큐는 입력 포트와 출력 포트 모두에서 형성될 수 있다. 일반적으로 네트워크에서 패킷이 손실되거나 폐기되는 곳은 바로 라우터의 큐에서 일어나는 일들이다.

1. 입력 큐잉

만약 스위칭 구조의 패킷 전달 속도가 입력 포트에서 전달하는 속도보다 느리다면 입력 포트 어딘가에서 자신의 차례를 기다려야 할 것이다.

출력 포트가 다르다면 여러 패킷이 병렬적으로 출력 포트로 전달될 수 있을 것이다. 하지만 2개의 패킷이 같은 출력 큐로 향한다면 하나의 패킷은 차단될 것이고 해당 큐에 있는 다른 패킷들 또한 대기해야 할 것이다.

즉, 회선의 앞쪽에서 다른 패킷이 막고 있으므로 입력 큐에서 대기 중인 패킷은 사용할 출력 포트가 사용 중이지 않더라도 스위칭 구조로 가기 위해 대기해야 한다. 이러한 현상을 HOL(Head of Line) 차단이라고 한다.

2. 출력 큐잉

만약 입력 큐잉이 발생하지 않고 스위치 구조를 통해 출력 포트에 패킷이 도착한 경우에도 출력 포트는 단위 시간 당 단일 패킷만 전송할 수 있기 때문에 큐잉 현상이 발생한다. 만약 출력 포트로 들어오는 패킷을 저장할 메모리가 충분하지 않다면 도착한 패킷을 폐기하게 된다.

1.5 패킷 스케줄링

이제 출력 큐에 있는 패킷이 출력 링크를 통해 전송될 것이다. 하나의 회선으로 어떤 패킷을 먼저 밖으로 내보낼 지 결정해야 한다.

1. First-In-First-Out (FIFO)

출력 링크 큐에 먼저 도착한 패킷을 먼저 전송한다.

2. 우선순위 큐잉

출력 링크에 도착한 패킷은 우선 순위 클래스로 분류된다. 각 우선순위 클래스에는 고유한 큐가 있고 가장 우선순위가 높은 클래스에서 패킷을 전송한다.

동일한 우선순위를 가지는 패킷들은 FIFO 방식으로 선택한다.

패킷이 전송 중에 우선순위가 높은 다른 패킷이 도착했을 때, 비 선점 우선순위 큐잉에서는 우선순위가 높더라도 대기한다. 선점 우선순위 큐잉에서는 기존의 전송을 멈추고 우선순위가 높은 패킷을 전송한다.

3. 라운드 로빈과 Weighted Fair Queuing(WFQ)

라운드 로빈 큐잉에서는 클래스 간에 엄격한 서비스 우선순위가 존재하지 않으며 각 클래스에서 번갈아 가며 패킷을 전송한다. 만약 현재 차례의 클래스에서 보낼 패킷이 없다면 대기하지 않고 바로 다음 클래스에서 패킷을 보낸다. (작업 보존 큐잉에서)

일반적으로 라우터의 라운드 로빈 큐잉은 WFQ 규칙이다. WFQ는 작업 보존 큐잉이며 라운드 로빈 큐잉과 마찬가지로 순환 방식으로 작동한다. 다만 각 클래스마다 다른 양의 서비스 시간을 부여 받는다.

WFQ에서 각 클래스는 서로 다른 가중치를 받고 부여 받은 일정 시간만큼 동안은 비선점적으로 동작하게 된다.

2. 인터넷 프로토콜, IP

2.1 IPv4 데이터그램 형식

IPv4 데이터그램의 주요 필드를 살펴보자.

  • 버전 번호, 헤더 길이, 서비스 타입, 데이터그램 길이
  • 식별자, 플래그, 단편화 오프셋 : IP 단편화와 관계 있다.
  • TTL : 네트워크에서 데이터그램이 무한히 순환하지 않도록 라우터가 데이터그램을 처리할 때마다 이 값을 감소시킨다.TTL 필드가 0이 되면 라우터가 데이터그램을 폐기한다.
  • 프로토콜 : 최종 목적지에 도착했을 때 사용한다. 목적지의 전송 계층의 프로토콜을 명시한다.
  • 헤더 체크섬 : 라우터가 수신한 IP 데이터그램의 비트 오류를 탐지한다. 항상 TCP/UDP와 IP 계층을 함께 사용하는 것이 아니며, IP는 TCP/UDP로 전달되지 않는 데이터를 전달할 수 있다.
  • 출발지, 목적지 IP 주소
  • 옵션
  • 데이터(페이로드) : 가장 중요한 필드, 데이터 그램이 존재하는 이유이다.

2.2 IPv4 데이터그램 단편화

링크 계층 프레임이 전달할 수 있는 최대 데이터를 MTU(maximum transmission unit)이라고 한다. 이에 따라 IP 데이터그램의 길이에 제한이 생긴다. 각 라우터는 서로 다른 MTU를 가진 링크 계층 프로토콜을 갖게 된다.

하나의 링크에서 IP 데이터그램을 받게 되면 출력 링크를 결정하기 위해 전달 테이블을 검사한다. 만약 출력 링크가 IP 데이터그램의 길이보다 작은 MTU를 가지는 상황에는 어떤 일이 발생하게 되는 것일까?

IP 데이터그램의 페이로드를 2개 이상으로 분할하고 각각 캡슐화하여 출력 링크로 보내면 된다. 분할된 데이터그램을 조각(fragment, 단편)이라고 한다.

조각들은 목적지 전송 계층에 도달하기 전에 재결합되어야 한다. IPv4 설계 시 라우터가 데이터그램을 재결합하면 프로토콜을 복잡하게 만들고 성능 문제가 발생할 것을 우려하여 네트워크 라우터가 아닌 종단 시스템에서 데이터 그램 재결합을 하도록 했다. 이를 위해 IP 데이터그램 헤더에는 식별자, 플래그, 단편화 오프셋 필드가 존재한다.

  • 송신 호스트는 데이터그램을 만들며 식별자 번호를 헤더에 포함시킨다. 각 데이터그램마다 식별자 번호를 1씩 증가시키며 일련의 데이터그램을 전송한다.
  • 만약 데이터그램을 단편화시킬 필요가 있을 때, 각 조각들에는 원본 데이터그램의 식별자 정보를 포함하게 된다.
  • IP는 신뢰할 수 없는 서비스를 제공하므로 마지막 조각이 도착했다는 것을 확신하기 위해 마지막 조각의 플래그 비트만 0으로 설정한다.
  • 오프셋 필드는 원본 데이터그램에서의 조각의 위치를 명시하기 위해 사용한다.

위와 같은 정보를 통해 목적지 호스트가 같은 출발지에서 온 데이터그램들을 수신하면 원본 데이터그램의 조각인지 판단 후 재결합한다.

2.3 IPv4 주소 체계

라우터는 한 링크로부터 데이터그램을 수신하여 다른 링크로 전달한다. 라우터와 링크 사이의 경계를 인터페이스라고 하는데 IP는 인터페이스의 주소라고 할 수 있다.

IP 주소는 32비트로 표현한다. 일반적으로 호스트나 라우터에서 각 인터페이스를 분리하고 서브넷이라고 불리는 고립된 네트워크를 만들어 설계한다.

같은 서브넷에 존재하는 인터페이스의 주소를 표현하기 위해 서브넷 마스크를 사용하다. 예를 들어, 223.1.1.0/24 에서 24는 왼쪽의 24비트가 서브넷 주소라는 것을 가리킨다.


과거에는 IP 주소의 네트워크 부분을 8,16,24 비트로 제한하고 각각 A,B,C 클래스로 분류했다. 이러한 클래스 주소체계에서는 급속히 증가하는 기관의 수를 지원하기에는 문제가 있었다. 16비트 크기의 서브넷 마스크를 사용하는 클래스 B는 약 65000개의 호스트를 위한 주소 공간을 할당 받았지만 만약 이 주소를 모두 사용하지 않는다면 다른 조직에서는 사용할 수 없으므로 주소가 낭비되는 것이다.

현재는 CIDR(Class Interdomain Routing)이라고 불리는 인터넷 주소 할당 방식을 사용한다. 서브넷 주소체계로서, 32비트 주소를 a.b.c.d/x로 표현하고 x는 주소의 네트워크 프리픽스라고 부른다. 일반적으로 x는 기관 네트워크 외부의 라우터에 의해 결정된다. 즉 외부 기관의 라우터는 목적지 주소가 내부 기관인 데이터그램을 전달할 때, 앞의 x 비트만 고려한다. 이를 통해 기관 라우터들에게 포워딩 테이블의 크기를 상당히 줄여줄 수 있다.

2.4 동적 호스트 구성 프로토콜 (Dynamic Host Configuration Protocol, DHCP)

그렇다면 서브넷에 새로 들어온 호스트는 어떻게 주소를 갖게 될까?

한 기관은 ISP로부터 주소 블록을 휙득한다. 개별 IP 주소를 기관 내부의 호스트와 라우터 인터페이스에 할당하면 된다. 네트워크 관리자는 호스트가 네트워크 접속하고자 할 때마다 동일한 IP 주소를 받거나 매번 다른 임시 IP 주소를 할당할 수 있도록 동적 호스트 구성 프로토콜(DHCP)을 설정한다.

DHCP는 호스트의 IP 주소 할당외에도, 서브넷 마스크, 첫 번째 홉 라우터(게이트웨이) 주소, 로컬 DNS 서버 주소 같은 정보를 얻게 해준다.

DHCP는 클라이언트-서버 프로토콜이다. 상호동작의 과정은 다음과 같다.

  1. DHCP 서버 발견 : 서브넷에 새롭게 도착한 호스트(클라이언트)는 DHCP 발견 메시지를 UDP 패킷에 담아 67번 포트로 보낸다. UDP 패킷은 IP 데이터그램으로 캡슐화된다. 그런데 목적지의 IP 주소를 알 수가 없다. 클라이언트는 목적지 IP 주소를 255.255.255.255(브로드캐스트)로 설정하고 출발지 IP 주소를 0.0.0.0 으로 설정한다. 서브넷에 연결된 모든 노드(라우터+호스트)들에게 브로드캐스팅 될 것이다.
  2. DHCP 서버 제공 : DHCP 발견 메시지를 받은 서브넷 상의 DHCP 서버는 발견 메시지의 트랜잭션 ID, 할당해줄 주소, 네트워크 마스크, IP 주소 임대 기간이 담긴 DHCP 제공 메시지를 클라이언트로 응답한다. 이 때 목적지 IP 주소를 68번 포트로 브로드캐스트한다.
  3. DHCP 요청 : 클라이언트는 서브넷에 존재하는 하나 이상의 DHCP 서버들 중 가장 최적의 위치에 위치하는 서버로부터 받은 주소를 선택할 것이다. 선택한 서버에게 DHCP 요청 메시지를 응답한다.
  4. DHCP ACK : 서버는 요청 메시지에 대하여 DHCP ACK 메시지로 응답한다.

2.5 네트워크 주소 변환 (NAT)

IPv4 주소는 총 40억개의 다른 주소를 표현할 수 있다. 40억은 물론 큰 숫자이지만 급격하게 늘어나는 네트워크 장치를 모두 감당할 수는 없다.

DHCP에 의해 특정 서브넷에서 할당 받은 IP 주소는 해당 서브넷에서만 유효하다. 외부 네트워크 세계에서는 NAT가 가능한 라우터 내부의 세계를 볼 수 없다. 단지 하나의 IP 주소를 갖는 하나의 네트워크 장비로 보여질 뿐이다.

WAN에서 같은 목적지 IP 주소를 갖는 NAT 라우터에 많은 데이터그램이 도착하면, 라우터는 내부의 호스트 들에게 적절하게 데이터그램을 전달해주어야 한다. 이 때, NAT 라우터의 NAT 변환 테이블을 사용해야 한다. 이 테이블에는 IP 주소와 포트 번호를 포함한다. NAT 라우터는 변환 테이블에 없는 모든 출발지 포트 번호를 선택하여 새로운 출발지 포트 번호를 생성할 수 있다.

포트 번호의 필드가 16비트로 길기 때문에 NAT 프로토콜은 라우터에 대한 WAN 측의 하나의 IP 주소에 대하여 6만개 이상의 동시 접속을 지원할 수 있다.