Junos OS를 실행하는 디바이스의 OpenFlow 컨트롤러에 대한 가상 스위치 연결 이해
주니퍼 네트웍스 Junos 운영 체제(Junos OS)를 실행하는 디바이스에서 각 OpenFlow 가상 스위치는 컨트롤러와 독립적인 연결을 설정하며, 관리 포트 MAC 주소와 내부적으로 할당된 가상 스위치 ID로 구성된 고유한 런타임 데이터 경로 ID로 표시됩니다. 컨트롤러와 가상 스위치는 관리부에서 TCP/IP 연결을 사용하여 서로 연결됩니다. 따라서 컨트롤러에서 관리하는 OpenFlow 지원 디바이스는 관리 네트워크에 연결되어야 하며(예: me0, fxp0, em0 또는 em1 관리 포트를 사용하여 연결됨) 컨트롤러 IP 주소에서 연결할 수 있어야 합니다.
컨트롤러와 연결되면 스위치와 컨트롤러는 발신자가 지원하는 최신 OpenFlow 프로토콜 버전을 지정하는 hello 메시지를 교환합니다. 스위치에서 수신한 첫 번째 패킷이 OFPT_HELLO 메시지가 아닌 경우 스위치는 연결을 종료하고 컨트롤러와 새 연결을 설정하려고 시도합니다. 또한 컨트롤러와 스위치가 당사자 중 하나가 지원하지 않는 OpenFlow 프로토콜 버전을 협상하면 OFPET_HELLO_FAILED 오류 유형 및 OFPHFC_INCOMPATIBLE 코드를 나타내는 오류 메시지와 함께 연결이 종료됩니다.
세션은 스위치와 컨트롤러가 Hello 메시지를 성공적으로 교환하고 OpenFlow 프로토콜 버전을 협상할 때 설정됩니다. 세션을 설정한 후 컨트롤러는 스위치에 스위치에서 지원하는 기능을 요청하는 기능 요청 메시지를 보냅니다. 스위치는 가상 스위치 데이터 경로 ID 필드의 로컬 MAC 주소를 포함하는 기능 응답 메시지로 응답합니다. 로컬 MAC 주소를 사용할 수 없는 경우 스위치가 연결을 종료합니다.
세션을 설정한 후 컨트롤러와 가상 스위치는 에코 요청 및 회신 메시지를 keepalive 메커니즘으로 교환합니다. 가상 스위치 또는 컨트롤러가 에코 응답 또는 패킷을 수신하면 keepalive 타이머가 재설정됩니다. 에코 요청은 다른 메시지가 없는 유휴 기간 동안 10초마다 전송됩니다. 스위치가 120초 동안 컨트롤러로부터 에코 응답 또는 기타 메시지를 수신하지 않으면 연결이 끊어진 것으로 간주되고 스위치는 10초 동안 연결 재설정을 시도합니다. 연결을 설정할 수 없는 경우 스위치는 OpenFlow v1.3 사양에 정의된 대로 비상 모드로 들어갑니다. 비상 모드에서 스위치는 정상적인 플로우 엔트리를 삭제하고, 30초 후에 하드웨어에 설치된 플로우 엔트리를 제거합니다.
세션이 설정된 후 어느 시점에서든 수신자가 잘못된 OpenFlow 버전을 지정하는 OpenFlow 메시지를 수신하면 수신자는 OFPET_BAD_REQUEST 유형 및 OFPBRC_BAD_VERSION 코드를 나타내는 오류 메시지로 응답합니다. 스위치가 TCP 버퍼에 있는 OpenFlow 패킷의 버전 및 유형을 처리할 수 없거나 스위치가 컨트롤러에 OpenFlow 메시지를 보내지 못하는 경우 스위치는 연결을 종료합니다.
가상 스위치 구성을 수정, 삭제 또는 비활성화하면 컨트롤러 연결에도 영향을 미칩니다. 기존 가상 스위치 구성을 수정하는 경우 가상 스위치는 컨트롤러에 대한 기존 연결을 종료하고 업데이트된 구성 정보를 사용하여 새 세션을 설정합니다. 기존 가상 스위치 구성을 삭제하거나 비활성화하면 가상 스위치와 컨트롤러의 연결이 자동으로 끊어집니다.
요약하자면, 다음과 같은 상황에서 스위치와 컨트롤러의 연결이 끊어집니다.
스위치가 컨트롤러로부터 수신하는 첫 번째 패킷은 Hello 메시지가 아닙니다.
스위치는 지원되지 않는 OpenFlow 버전의 hello 메시지를 수신합니다.
로컬 MAC 주소는 기능 응답 메시지에 포함할 수 없습니다.
스위치는 120초 동안 컨트롤러로부터 에코 응답 또는 기타 메시지를 수신하지 않습니다.
기존 가상 스위치 구성이 삭제되거나 비활성화됩니다.
기존 가상 스위치 구성이 수정됩니다. 이 경우 컨트롤러에서 연결을 끊은 후 스위치는 새 연결 및 세션 설정을 시도합니다.
스위치가 TCP 버퍼에 있는 OpenFlow 패킷의 버전 및 유형을 처리할 수 없습니다.
스위치가 컨트롤러에 OpenFlow 메시지를 보내지 못하며, 이는 작동하지 않는 TCP 소켓 연결로 처리됩니다.