네트워크 - OpenFlow(2)
컴퓨터 네트워크를 공부하면서 정리를 한 내용들 입니다.
-참고 K-mooc 부산 대학교 유영환 교수님 : 컴퓨터 네트워크 강의
OpenFlow
의 메시지들을 자세하게 살펴 보도록 하겠습니다.
OpenFlow Protocol: Controller-to-Switch Messages
컨트롤러가 스위치한테 주는 메시지들에는
첫 번째, Configuration
스위치의 configuration에 관련한 정보를 요구 한다던지
아니면 설정 하라는 query 메시지를 컨트롤러가 보낼 수 있습니다.
두 번째, read-state 입니다.
스위치들은 각각 컨트롤러가 전달 해 준 flow table
을 갖고 있습니다.
주어진 flow table
을 가지고 거기에 따라서 데이터그램을 전달 하는데
컨트롤러 입장에서는 잘 전달이 되었는지, 성공률은 얼마인지에 대한
통계 정보
가 필요하므로 보내는 메시지 입니다.
세 번째, modify-state 입니다.
기존에 있는 openflow flow table
에 entry
를 추가
, 삭제
, 수정
과 같은
이런 식의 메시지를 각각 스위치한테 전달 할 수 있습니다.
그것을 통해 각 스위치의 flow table
을 갱신 해 나갈 수 있게 됩니다.
마지막으로 send-packet입니다
Flow table
을 줘서 그것을 기반으로 스위치화 하는 것이 아니라
아예 컨트롤러가 특정한 패킷은 무조건 특별한 포트로
강제로 보내는 기능을 합니다.
OpenFlow Protocol: Switch-to-Controller Messages
이번에는 반대로 스위치에서 컨트롤러로 어떤 메시지를 보낼 수 있는가 살펴 보겠습니다.
첫 번째, Flow-removed
스위치에서 어떤 특정한 플로우가 삭제가 됐다는 정보를 컨트롤러에 전달합니다.
두 번쨰, Port status
스위치의 특정한 포트에 어떤 문제(끊김)에 대한 정보를 컨트롤러에 전달 합니다.
마지막으로 Packet-in
어떤 패킷을 받았는데 가지고 있는 flow table
을 기반으로도
전달 할 수가 없다면 컨트롤러 측에 전달해서 컨트롤러가 패킷 받아서
어디로 전달 할 지를 지시 할 수 있게 해줍니다.
이렇게 하는 이유는 일단 이 패킷을 마음대로 보내게 되면
패킷이 돌아 다녀서 전체 네트워크에 영향을 줄 수도 있고
또 하나의 목적은 새로운 flow의 데이터그램을 발견 했다
는 것을
컨트롤러한테 알려주는, 보고하는 그런 기능이 있습니다.
Control/Data Plane Interaction thru OpenFlow
Openflow 컨트롤러
와 스위치
가 주고 받는 메시지들이 어떻게 실제로 동작 하는지,
그것을 토대로 어떻게 control plane
과 data plane
이 상호 작용을 하는지
한 가지 예를 가지고 살펴 보도록 하겠습니다.
이 그림에서 보면 네 개의 스위치가 있고,
s1
과 s2
사이에 어떤 데이터가 흐르고 있었습니다.
그런데 s1
과 s2
사이의 이 링크가 끊어진 것을 s1 스위치
가 발견 했습니다.
그래서 port status
라는 메시지를 가지고
이 스위치는 컨트롤러한테 링크가 끊어짐
을 알려 줍니다.
그러면 이 컨트롤러는 그렇게 끊어졌다는 정보를
link-state 정보
가 변경 되었기 때문에 link-state info
에 기록을 하고,
바뀌었음을 상부에 있는 라우팅 알고리즘에 전달
을 합니다.
그렇게 하면 Dijkstra’s link-state routing 알고리즘
은
지금 수정 된 이 정보를 기반으로 새로운 길을 찾고
그것을 기반으로 flow table
을 새로 만듭니다.
새로 만들어진 flow table
이 openflow modify state
메시지를 통해서
스위치들 한테 전달이 됩니다.
그렇게 되면 링크가 끊어짐으로써 영향을 받는 스위치들에
이런 정보를 전달 함으로써 끊어진 링크 대신에
다른 곳으로 가게하거나, 테이블을 새로 만들어서 전달을 해 주게 됩니다.