Junos OS를 실행하는 디바이스의 OpenFlow 플로우 및 필터 이해
OpenFlow 흐름은 다양한 요소에 의해 정의됩니다. 표 1에는 OpenFlow v1.0 및 OpenFlow v1.3.1의 플로우 요소에 대한 지원이 요약되어 있습니다. OpenFlow 버전에서 지원하는 요소는 흐름을 고유하게 식별합니다.
플로우 엘리먼트 |
OpenFlow v1.0에서 지원됩니까? |
OpenFlow v1.3.1에서 지원됩니까? |
---|---|---|
일치 조건 |
예 |
예 |
작업 집합 |
예 |
아니요 |
흐름 지침 |
아니요 |
예 |
플로우 우선순위 |
예 |
예 |
플로우 타임아웃 정보 |
예 |
예 |
플로우 쿠키 및 쿠키 마스크 |
아니요 |
예 |
플로우 항목은 정확한 일치가 필요하지 않은 필드에 대해 와일드카드 일치 조건을 지정합니다. 플로우 항목에 모든 일치 조건에 대한 와일드카드가 포함된 경우, 모든 패킷이 해당 플로우 항목과 일치합니다.
OpenFlow 플로우 기반 포워딩을 구현하기 위해 Junos OS를 실행하는 디바이스는 필터를 사용합니다. OpenFlow에 참여하도록 구성된 각 논리 인터페이스에 대해 단일 필터가 생성되어 입력 방향으로 논리 인터페이스에 적용됩니다. 필터 이름은 논리적 단위 번호와 내부적으로 할당된 가상 스위치 ID(예: ge-1/1/0.0_0)를 포함한 인터페이스 이름의 연결입니다.
자동 생성된 OpenFlow 필터 이름 또는 필터 용어 이름과 충돌하는 필터 이름 또는 필터 용어 이름을 수동으로 구성하는 경우, Junos OS는 commit check
. 충돌이 있는 경우 커밋은 성공하지만 필터 또는 필터 용어 중 하나는 수신된 순서에 따라 거부됩니다.
필터는 일치 조건이 있는 하나 이상의 용어와 작업(OpenFlow v1.0의 경우) 또는 지침(OpenFlow v1.3.1의 경우)으로 구성됩니다. OpenFlow 흐름은 필터 용어에 매핑되며, 흐름을 추가, 삭제 및 수정하기 위한 OpenFlow 컨트롤러 요청으로 인해 필터에서 용어가 추가, 삭제 또는 수정됩니다. OpenFlow 컨트롤러가 플로우 수정 요청을 보내면 수신 포트에 대한 플로우 항목 일치 조건에 따라 업데이트되는 논리 인터페이스 필터가 결정됩니다. OpenFlow 흐름 우선 순위는 필터의 항 순서를 결정하며, 여기서 우선 순위가 높은 항이 우선 순위가 낮은 항 위에 설치됩니다. 플로우 일치 조건은 필터 용어 일치 조건에 매핑되고, 플로우 작업 또는 지침은 필터 용어 then
문에 매핑됩니다. 플로우 작업 또는 명령에 따라 문에는 then
패킷을 다음 홉 또는 OpenFlow 컨트롤러로 전달하거나 패킷을 폐기하는 작업이 포함될 수 있습니다.
OpenFlow 컨트롤러가 흐름 수정 요청을 보냈지만 조건과 일치하는 흐름 항목이 없는 경우 OpenFlow v1.0은 흐름 테이블에 흐름에 대한 항목을 추가합니다. 그러나 동일한 상황에서 OpenFlow v1.3.1은 이 흐름을 흐름 테이블에 추가하지 않으며 오류가 기록되지도 않습니다.
각 OpenFlow 플로우 항목은 필터 용어에 해당합니다. 그러나 각 플로우 항목은 수신 포트의 일치 조건에 따라 하나 이상의 필터에서 용어에 매핑될 수 있습니다. 수신 포트가 와일드카드와 일치하는 경우, 플로우 항목은 해당 OpenFlow 가상 스위치에 대한 모든 인터페이스 필터에 용어로 표시됩니다. 예를 들어, OpenFlow 컨트롤러가 수신 포트 필드에 대해 와일드카드 일치를 사용하여 새 흐름 항목을 추가하라는 요청을 보낸다고 가정해 보겠습니다. 이 경우, 해당 가상 스위치 아래에 구성된 모든 OpenFlow 논리적 인터페이스에 대한 새 필터 용어로 플로우가 추가됩니다.
Junos OS를 실행하는 디바이스는 플로우 수정 및 삭제를 위한 strict 및 non-strict flow mod 명령을 모두 지원합니다. OpenFlow 컨트롤러 strict-modify 및 strict-delete flow mod 요청은 와일드카드 및 우선순위를 포함한 모든 헤더 필드에 대한 설명과 정확히 일치하는 흐름만 수정하거나 삭제합니다. 엄격하지 않은 흐름 수정 및 삭제 mod 요청은 요청과 정확히 일치하거나 요청보다 더 구체적인 흐름을 수정하거나 삭제합니다.
OpenFlow v1.3.1은 이미 설명한 기능 외에도 플로우 테이블에 플로우가 설치될 때 OpenFlow 컨트롤러가 지정할 수 있는 식별자인 플로우 쿠키를 지원합니다. 이 쿠키를 통해 OpenFlow는 흐름 수정 및 삭제 작업을 위해 선택한 흐름을 필터링할 수 있습니다.
플로우 항목 drop
에서 일치하지 않는 패킷에 대한 기본 작업을 패킷을 폐기하는 , 또는 packet-in
패킷을 수락하고 컨트롤러로 전달하는 로 구성할 수 있습니다. 기본 작업은 OpenFlow 가상 스위치에만 해당되며 해당 가상 스위치와 연결된 모든 필터에서 동일합니다. 기본 작업을 명시적으로 구성하지 않으면 기본값은 packet-in
입니다.
논리적 인터페이스를 사용할 수 없게 되는 경우, 해당 논리적 인터페이스와 연관된 필터가 패킷 전달 엔진에서 제거됩니다. 필터가 제거되더라도 라우팅 엔진은 OpenFlow 타이머에 대한 응답으로 플로우가 제거될 때까지 수신 포트로 논리적 인터페이스와 일치하는 플로우를 유지합니다. OpenFlow 타이머에 대한 자세한 내용은 Junos OS를 실행하는 디바이스의 OpenFlow 엔트리 타이머 이해하기를 참조하세요. 플로우가 제거되기 전에 논리적 인터페이스를 사용할 수 있게 되면 해당 시점에서 라우팅 엔진이 유지하는 필터와 모든 플로우가 하드웨어에 다시 설치됩니다.
마찬가지로, 논리적 인터페이스를 사용할 수 없게 되면, 해당 논리적 인터페이스를 작업 집합 또는 명령에서 유일한 활성 송신 인터페이스로 갖는 플로우는 유효하지 않은 것으로 간주됩니다. 잘못된 플로우는 패킷 전달 엔진에서 제거되지만 다양한 OpenFlow 타이머에 대한 응답으로 플로우가 제거될 때까지 라우팅 엔진에 의해 무기한 유지됩니다. 또는 작업 집합 또는 명령에서 논리적 인터페이스를 여러 활성 송신 인터페이스 중 하나로 포함하는 흐름은 여전히 유효합니다. 이 경우 플로우는 패킷 전달 엔진에 남아 있지만 멀티캐스트 다음 홉이 업데이트되어 해당 논리적 인터페이스가 유효한 송신 인터페이스로 제거됩니다.