네트워크 - OpenFlow(2)

2021-01-08

컴퓨터 네트워크를 공부하면서 정리를 한 내용들 입니다.

-참고 K-mooc 부산 대학교 유영환 교수님 : 컴퓨터 네트워크 강의


OpenFlow의 메시지들을 자세하게 살펴 보도록 하겠습니다.

OpenFlow Protocol: Controller-to-Switch Messages

컨트롤러가 스위치한테 주는 메시지들에는

첫 번째, Configuration

스위치의 configuration에 관련한 정보를 요구 한다던지

아니면 설정 하라는 query 메시지를 컨트롤러가 보낼 수 있습니다.

두 번째, read-state 입니다.

스위치들은 각각 컨트롤러가 전달 해 준 flow table을 갖고 있습니다.

주어진 flow table을 가지고 거기에 따라서 데이터그램을 전달 하는데

컨트롤러 입장에서는 잘 전달이 되었는지, 성공률은 얼마인지에 대한

통계 정보가 필요하므로 보내는 메시지 입니다.

세 번째, modify-state 입니다.

기존에 있는 openflow flow tableentry추가, 삭제, 수정과 같은

이런 식의 메시지를 각각 스위치한테 전달 할 수 있습니다.

그것을 통해 각 스위치의 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 planedata plane이 상호 작용을 하는지

한 가지 예를 가지고 살펴 보도록 하겠습니다.

이 그림에서 보면 네 개의 스위치가 있고,

s1s2 사이에 어떤 데이터가 흐르고 있었습니다.

그런데 s1s2 사이의 이 링크가 끊어진 것을 s1 스위치가 발견 했습니다.

그래서 port status라는 메시지를 가지고

이 스위치는 컨트롤러한테 링크가 끊어짐을 알려 줍니다.

그러면 이 컨트롤러는 그렇게 끊어졌다는 정보를

link-state 정보가 변경 되었기 때문에 link-state info에 기록을 하고,

바뀌었음을 상부에 있는 라우팅 알고리즘에 전달을 합니다.

그렇게 하면 Dijkstra’s link-state routing 알고리즘

지금 수정 된 이 정보를 기반으로 새로운 길을 찾고

그것을 기반으로 flow table을 새로 만듭니다.

새로 만들어진 flow tableopenflow modify state 메시지를 통해서

스위치들 한테 전달이 됩니다.

그렇게 되면 링크가 끊어짐으로써 영향을 받는 스위치들에

이런 정보를 전달 함으로써 끊어진 링크 대신에

다른 곳으로 가게하거나, 테이블을 새로 만들어서 전달을 해 주게 됩니다.