네트워크 - 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 메시지를 통해서
스위치들 한테 전달이 됩니다.
그렇게 되면 링크가 끊어짐으로써 영향을 받는 스위치들에
이런 정보를 전달 함으로써 끊어진 링크 대신에
다른 곳으로 가게하거나, 테이블을 새로 만들어서 전달을 해 주게 됩니다.