[Network] Network Layer 4 - Generalized Forwarding과 SDN

chxghee·2024년 11월 20일

Generalized Forwarding

패킷의 여러 헤더 필드 정보를 가지고 테이블에 매칭하여 테이블에 정의된 액션을 수행하는
유연하고 프로그램 가능한 방식으로 네트워크 트래픽을 처리한다.

Generalized Forwarding 에서는
각 라우터는 플로우 테이블(포워딩 테이블)을 갖고 match plus action 을 한다.

이것은 패킷이 도착하면 테이블에 매칭을 하고 그에 따른 액션을 한다는 말이다.

기존의 destination-based 포워딩에서는 IP 주소를 기반으로 포워딩 테이블에 매칭을 하여 적절한 링크로 보내는 방법을 사용하였다.

하지만 Generalized Forwarding에서는 IP 주소 외에도 MAC 주소(링크레이어), 포트 번호(트랜스포트레이어), 등등 많은 정보를 가지고 match plus action을 진행한다.

이 액션의 종류로는
1. drop (패킷을 버린다)
2. copy
3. modify (nat 기술)
4. log packet

이렇게 네 가지 액션을 할 수 있다.

Flow table abstraction

우선 플로우 라는 것은 라우터로 들어오는 트래픽을 의미한다.

이러한 플로우(트래픽)은 각각의

  1. 링크 레이어 (MAC 주소, VLAN ID.)
  2. 트랜스포트 레이어 (TCP/UDP 포트 번호)
  3. 네트워크 레이어 (IP 주소, 서브넷)

위의 여러 헤더에 정의되어 있는 필드를 확인하여 플로우를 정의하게 된다.

플로우들을 정의 했으면, 플로우 테이블을 확인하여 match plus action 을 진행하게 된다.

1. 매칭(Match)

패킷의 헤더 필드 값을 플로우 테이블의 패턴 값과 비교하여 매칭한다.

예시:
	•	헤더 필드 값: IP=192.168.1.1, Port=80
	•	플로우 테이블 매칭 규칙: IP=192.168.1.1, Port=80 → 매칭 성공.

2. 액션(Actions)

매칭된 패킷에 대해 수행할 작업이다.

  1. 드롭(Drop): 패킷을 폐기.
  2. 포워드(Forward): 특정 출력 포트로 전달.
  3. 수정(Modify): 패킷 헤더 값 변경(예: IP 주소, NAT 기술)
  4. 컨트롤러로 전달(Send to Controller): SDN 컨트롤러로 패킷을 전달하여 추가 처리를 수행.

3. 우선순위(Priority)

플로우 테이블에 매칭이 여러 엔트리에 될 때,
우선순위가 높은 엔트리를 선택하는 것이다.

4. 카운터(Counters)

각 플로우 테이블의 각 항목(엔트리)에 패킷이 매칭된 횟수를 센다.

  1. 패킷 수 (#packets): 매칭된 패킷의 총 개수.
  2. 바이트 수 (#bytes): 매칭된 패킷의 총 바이트 크기.

이렇게 기록한 횟수는 네트워크 성능 모니터링 및 트래픽 관리에 활용된다.

OpenFlow 플로우 테이블 엔트리

플로우 테이블의 엔트리는 다음과 같이 구성된다.


도착 패킷에 따른 match plus action 예제

match plus action의 추상화는 네트워크 장치의 동작을 단순화하고 통합한다.

다음은 다양한 네트워크 장치에 따라 정의된 match plus action이다.

  1. 라우터

    • match : Longest destination IP perfix matching
    • action : 적절한 포트로 포워딩
  2. 스위치

    • match : 목적지 MAC 주소를 통해 매칭
    • action : 특정 포트로 포워딩 / MAC 주소를 모르는 경우 플러드(flood) 수행
  3. 방화벽

    • match : IP주소 + TCP/UDP 포트 번호를 통해 매칭
    • action : 허용(permit)하거나 차단(deny)한다.
  4. NAT

    • match : IP주소 + 포트 번호를 통해 매칭
    • action : IP 주소와 포트 번호를 재작성(rewrite)

이러한 Generalized ForwardingSDN 방식을 사용하기 때문에,
외부 컨트롤러에서 유연하게 플로우 테이블을 구성하여 네트워크의 설정을 할 수 있다.

<Generalized Forwarding 정리>
1. 매치 플러스 액션
	- 많은 필드값을 참고하여 테이블과 매칭한다.
    - 매칭된 테이블에 따라 여러 액션이 존재한다.
2. 프로그래밍 가능한 네트워크
	- 외부 컨트롤러를 통해 플로우 테이블을 구성하여 여러 액션을 지정 가능하다.
    - 그저 포워딩만 했던 이전 방식에서 액션을 설정할 수 있어 더욱 유연하게 데이터그램의 처리가 가능하다.

Middleboxes

출발지 호스트와 목적지 호스트 사이의 데이터 경로에서 패킷을 단순히 전달하는 IP 라우터의 기능과는 별도로 추가적인 기능을 수행하는 것이다.

일반적인 IP 라우터는 포워딩과 라우팅이라는 기능을 한다.

하지만 Generalized Forwarding같이 추가적인 기능을 하는 것을 미들 박스라고 한다.

미들 박스에는 다믕의 종류가 있따.

  1. NAT 변환
    NAT 박스는 사설 네트워크 주소체계를 구현하여 데이터그램 헤더 IP 주소 및 포트 번호를 다시 작성한다.(modify)

  2. 방화벽과 IDS
    방화벽은 헤더 필드 값을 기준으로 트래픽을 차단하거나 DPI(Deep Packet Inspection) 같은 추가 처리를 위해 패킷을 리다이렉션한다.
    침입 탐지 시스템(IDS)은 미리 결정된 패턴을 탐지하고 그에 따라 패킷을 필터링할 수 있다.

  3. 부하 분산
    서비스를 제공하는 서버 집합 중 하나에 대한 요청이 몰리지 않게 로드 밸런싱을 하는 주체다.

  4. Application-specific
    특정 어플리케이션에 맞는 네트워크 구성(서비스 제공자, 기관 CDN)

  5. 캐싱
    캐싱을 제공한다. (서비스 제공자, 모바일, CDNs)


Network Functions Virtualizatio 네트워크 기능 가상화

초기 미들박스는 하드웨어로 구성되었다.
하지만 점점 지원할 서비스가 고도화 되고 많아지면서 이를 하드워어적으로 관리하는 비용이 커졌다.
그래서 소프트웨어의 형태로 구현하는 것으로 발전 하였는데 이를 네트워크 기능 가상화라고 한다.

이전에는 위와 같이 유일한 네트워크 레이어 프로토콜인 IP 프로토콜을 통해
상위 하위 레이어의 다양한 프로토콜을 연결해 주었다.

이제는 미들박스를 추가해서 기본적인 기능인 라우팅과 포워딩을 포함하여,
다양한 기능을 네트워크 레이어에서 지원한다.


네트워크 레이어에서 다양한 지능적 기능을 수행해도 될까?

RFC 1958에 따르면
네트워크 레이어의 목표는 IP 프로토콜은 인터넷의 연결성을 보장해 주어야 하고,
다른 지능적이고 복잡한 서비스를 지원하는 것은 엔드 시스템에서 지원해야 한다.
(어플, 트랜스포트 계층)


Q. 왜 이런 규약이 생겼을까?

앞서 배웠듯이 엔드시스템에는 어플리케이션, 트랜스포트 레이어 스택이 포함된다.
때문에 통신시, 트랜스포트 레이어가 기능중 하나인 rdt를 지원한다.

하지만 미들박스를 통해 네트워크 레이어에서더 rdt를 아래의 그림과 같이 지원할수 있게 기능을 구현할 수 있다.

하지만 엔드 포인트가 아닌 네트워크 레이어 에서 rdt를 지원하게 되면
엔드 포인트에서 패킷 loss가 생겼을 때를 처리하지 못한다.

때문에 다른 지능적이고 복잡한 서비스를 지원하는 것은 엔드 시스템에서 지원해야 한다. 라는 규칙이 생긴 것이다.

그래서 요즘은 다양한 인터넷 서비스가 개발되면서
엔드 포인트에서는 물론, 네트워크레이어에서도 지능적이고 복잡한 서비스를 지원하는 형태로 발전하고 있다.


추가

IPv4의 Fragmentation/Reassembly

라우터와 라우터 사이 링크는 MTU(max.transfer size)가 존재하여
1. 라우터에서 패킷을 보낼 때 MTU를 넘지 않게 나눠 보내고 (Fragmentation)
2. 목적지에 도착하면 Reassemble해야 한다.

  • 각각의 링크들은 다른 MTU를 갖는다.

  • 패킷의 Reassembly는 목적지에서만 이루어 진다.

  • 데이터그램이 Fragmentation될 때 각각의 나뉜 패킷에 헤더를 붙여야 한다.

  • 헤더에는 나뉜 데이터그램을 다시 조립할 때 필요한 필드들이 정의되어 있다.
    1. 길이 - 헤더를 포함하여 MTU를 넘으면 안됨.
    2. 식별자 ID - 이를 통해 같은 fragments인 것을 확인 가능
    3. fragflag - 마지막 데이터그램 fragment를 표시할 수 있다.
    4.순서 offset - 페이로드의 시작 바이트를 표시한다.

Fragmentation/Reassembly 예시

4000 바이트의 데이터그램을 1500MTU의 제약 상황에서 Fragmentation을 진행하면 각 패킷의 크기가 커지기 때문에 해보자.

Fragmentation을 진행하면 각 fragments 마다 헤더가 붙기 때문에 전체 데이터의 크기는 커진다. (오버헤드 발생)

profile
다 같이 화이팅! 🙋‍♂️

0개의 댓글