4.4 일반화된 포워딩 및 소프트웨어 기반 네트워크(SDN)
목적지 IP 주소를 찾은(
매치
) 후 패킷을 스위치 구조로 지정된 출력 포트로 전송(액션
)하는 두 단계의 목적지 기반 포워딩을 앞서 설명했다.프로토콜 스택의 다른 계층에서 다른 프로토콜과 관련된 여러 헤더 필드에 대해
매치
를 수행할 수 있는 일반적인 매치 플러스 액션
방법을 생각해보자.액션
은 하나 이상의 출력 포트로 패킷을 전달하고, 인터페이스에서 나가는 패킷을 로드 밸런싱(load balancing)하고 헤더값을 다시 쓰고, 의도적으로 패킷을 차단/삭제 및 추가 처리 작업을 위해 특수 서버로 패킷을 보내는 등의 작업을 수행한다.일반화된 포워딩에서는 각각의 패킷 스위치는 원격 컨트롤러에 의해 계산 및 분포된
매치 플러스 액션 테이블
을 포함하고 있다.위 그림은
매치 플러스 액션 테이블
을 보여준다.OpenFlow 1.0
명확하고 간결한 방식으로 SDN 개념 및 기능을 도입한 OPenFlow 1.0을 살펴보자.
OpenFlow의 플로우 테이블로 알려진
매치 플러스 액션 포워딩 테이블
의 각 엔트리는 다음을 포함한다.- 들어오는 패킷에 대한 헤더값들의 세트가 매치될 것이다. 하드웨어 기반 매치는 TCAM 메모리에서 가장 신속하게 수행되며, 백만 개가 넘는 목적지 주소를 동반한다. 플로우 테이블 엔트리와 매치되지 않는 패킷은 더 많은 처리를 위해 원격 컨트롤러로 전송될 수 있다.
- 패킷들에 의해 갱신되는
카운터 세트
는 플로우 테이블 엔트리들과 매치된다. 이러한 카운터는 플로우 테이블 엔트리와 마지막으로 갱신된 테이블 엔트리 이후에 매치된 다수의 패킷을 포함하고 있다.
- 패킷이 플로우 테이블 엔트리와 매치될 때 여러가지 액션이 가능해진다. 이러한 액션은 패킷을 지정된 출력 포트로 전달하고, 패킷을 삭제하고, 패킷의 복사본을 만들어 여러 출력 포트로 보내거나 선택한 헤더 필드를 다시 쓰는 것일 수 있다.
4.4.1 매치
위 그림은 OpenFlow 1.0
매치 플러스 액션
규칙에서 매치될 수 있는 11개의 패킷 헤더 필드와 수신 포트 ID를 보여준다.진입 포트는 패킷이 수신되는 패킷 스위치의 입력 포트를 나타낸다.
플로우 테이블 엔트리에는 와일드카드도 있을 수 있다. 예를 들어, 플로우 테이블의
128.119.*.*
의 주소는 128.119를 주소의 첫 번째 16 비트로 갖는 데이터그램의 해당 주소 필드와 매치된다.또한 각 플로우 테이블 엔트리에는 우선순위가 있어 여러 플로우 테이블 엔트리와 매치되면, 선별된 매치 엔트리에 해당하는 패킷이 가장 높은 우선순위가 된다.
IP 헤더의 모든 필드가 매치될 수 있는 것은 아니다.
예를 들어 OpenFlow에서는 TTL 필드 또는 데이터그램 길이 필드에 기반한 매치를 허용하지 않는다.
4.4.2 액션
플로우 테이블 엔트리는 플로우 테이블 엔트리와 매치되는 패킷 처리를 결정하는 0개 이상의 액션 목록을 갖고 있다.
여러 액션이 있는 경우 목록에 지정된 순서대로 수행된다.
가장 중요한 액션들은 다음과 같다.
포워딩
- 들어오는 패킷은 특정 실제 출력 포트로 전달되거나 모든 포트를 통해 브로드캐스트되거나 선택된 포트 세트를 통해 멀티캐스트될 수 있다.
- 패킷은 캡슐화되어 원격 컨트롤러로 전송될 수 있다.
- 컨트롤러는 새 플로우 테이블 엔트리를 설치하고 해당 패킷에 대한 조치를 취하거나 갱신된 플로우 테이블 규칙에 따라 포워딩을 위해 패킷을 장치로 반환할 수 있다.
삭제
- 아무 액션이 없는 플로우 테이블 엔트리는 매치된 패킷을 삭제해야함을 나타낸다.
필드 수정
- 패킷이 선택된 출력 포트로 전달되기 전에 10개의 패킷 헤더 필드의 값을 다시 쓸 수 있다.
4.4.3 매치 플러스 액션 작업의 OpenFlow 예
위 그림의 상황을 가정하고 다음 예시들을 보자.
첫 번째 예: 간단한 포워딩
아주 간단한 예로 포워딩 동작이 h3 또는 h4로 예정된 h5 또는 h6 패킷이 s3에서 s1으로 전달된 다음 s1에서 s2로 전달된다고 가정한다.
위 상황에서 s1의 플로우 테이블 엔트리는 다음과 같다.
s3에 플로우 테이블 엔트리가 필요하므로 h5 또는 h6에서 전송된 데이터그램은 인터페이스 3을 통해 s1으로 전달된다.
마찬가지로, s1에 도착한 데이터그램을 호스트 h3 또는 h4로 전달할 수 있도록 s2에 플로우 테이블 엔트리가 필요하다.
위를 바탕으로 직접 채워보길 바란다.
두번째 예: 로드 밸런싱
두 번째 예로 h3에서
10.1.*.*
로 향하는 데이터그램이 s2와 s1 사이의 링크를 통해 전달되는 반면, h4에서 10.1.*.*
로의 데이터그램은 s2와 s3 사이의 링크를 통해 전달되는 로드 밸런싱 시나리오를 고려해보자.이 동작은 IP의 목적지 기반 포워딩으로 수행될 수 없다.
이 경우 s2의 포워딩 테이블은 다음과 같다.
s2에서 수신한 데이터그램을 h1 또는 h2로 전달하려면 s1에서 플로우 테이블 엔트리가 필요하다.
인터페이스 4에서 수신한 데이터그램을 s3에서 인터페이스 3을 통해 s1로 전달하려면 s3에서 플로우 테이블 엔트리가 필요하다. s1및 s3에서 이러한 플로우 테이블 엔트리를 파악할 수 있는지 확인하자.
세번째 예: 방화벽
s2가 s3에 연결된 호스트에서 보낸 트래픽만 수신하려고 하는 방화벽 시나리오를 생각해보자.
s2 플로우 테이블에 다른 엔트리가 없으면
10.3.*.*
의 트래픽만 s2에 연결된 호스트로 전달된다.매치 플러스 액션
플로우 테이블은 제한된 형태의 프로그래밍 가능성이다.데이터그램의 헤더값과 매치 조건 사이의 매치를 기반으로 라우터가 데이터그램을 전달하고 조작하는 방법을 명시한다.
따라서 더 풍부한 형태의 프로그래밍 가능성을 상상할 수 있다.