1. 개념
Software Defined Network 의 약자로 직역하면 소프트웨어로 정의된 네트워크를 의미한다. 기존의 네트워크 장비(ex. router, L3 switch…) 들은 제어부(Control Plane)과 전송부(Data Plane)가 같이 존재하며 각각의 장비들이 기능들을 수행하여 네트워크를 구성하였다. SDN 기술에서는 두 Plane 을 분리하며 특히 Control Plane 의 역할 수행에 중점을 둔 기술이다. Data plane 의 경우 패킷들을 forwarding 시키는 역할을 수행하게 된다. 그리고 이 패킷들을 forwarding 시키기 위해 경로를 정하는 것이 Control plane 의 역할 즉, routing 을 수행하게 된다. SDN 에서는 이 Control plane 을 하나의 network controller 에서 제어 범위에 속하는 장비들의 routing 을 수행하는 논리적 중앙집중형 방식으로 기능을 한다.
2. 구조
SDN 은 세부적으로 3개의 계층으로 이루어져 있다.
2-1. Application Layer
계층 이름에서도 알 수 있듯 응용프로그램들로 구성되어 있으며, 이 응용프로그램들은 중간 계층인 control layer와의 통신으로 network controller 를 운용하게 된다.
2-2. Control Layer
3계층 중 중간 계층으로 패킷들이 forwarding 하게 될 경로를 정하는 routing 과정을 수행하는 계층이다. Application Layer 와 API 통신을 통해 서로 상호작용을 하며 Infrastructure Layer 와는 표준 통신 규격들을 이용하여 서로 상호작용한다. 이 분리된 3가지의 계층이 서로 통신을 하기 위해서 특정 API 를 사용한다. Application Layer 와의 API 통신을 northbound, Infrastructure Layer 와의 API 통신을 southbound 라 칭한다. 이러한 통신, 상호작용들을 수행하기 위해서 network controller 가 존재한다.
2-3. Infrastructure Layer
최종적으로 패킷들이 forwarding 과정을 거쳐 이동하게 되는 계층이다. 이 forwarding 을 수행하기 위해 네트워크 장비들로 구성되어 있다.
2-4. SDN 구조의 핵심
Control Layer 에서는 위에서 설명했듯 network controller 가 범위내의 각 네트워크 장비들을 중앙에서 제어하게 된다. 즉, 기존의 per-router 방식과는 달리 제어부가 분리되어 논리적으로 중앙집중화된 logically centralized control 방식으로 수행한다.
3. 기존 방식의 단점
SDN 이라는 기술이 개발되기 위해 기존 네트워크 방식의 문제에 어떤 것이 있었는지 알아보아야 한다.
위의 사진은 기존의 네트워크 구성 방식이다. 각각의 네트워크 장비들마다 제어부와 전송부가 공존했고 각각 routing 과 forwarding 을 직접 수행했어야 했다.
점점 네트워크가 발전하고 규모가 커지면서 이를 뒷받침하기 위해서는 제어부와 전송부의 성능이 반드시 발전되어야만 했다. 결국 네트워크 장비들은 더욱 복잡한 기술들을 탑재하여 가격이 비싸질 수 밖에 없었다. 또한, 이 과정에서 “Cisco” 사가 독점적으로 네트워크 장비들을 공급하는 문제도 발생했었다. 그러나 이렇게 비싼 비용을 들여 네트워크를 구축하여도 실제로 이 네트워크 장비들의 성능을 항상 100% 사용하는 것은 아니다. 결국 비용에서 불필요한 지출이 발생하는 것이다.
기존의 방식에서 또 다른 문제도 발견된다. 제어부와 전송부가 각각의 장비마다 같이 구성되어 있기에 네트워크 관리자, 엔지니어들은 모든 장비들을 일일이 관리해주어야 한다. 앞서 말했듯, 네트워크는 시간이 지날수록 규모가 커지고 점점 발전해오고 있다. 그리고 이 규모와 발전을 따라잡기 위해서 관리자, 엔지니어들은 그만큼의 노동력을 많이 투자할 수 밖에 없다. 네트워크 장비들의 유지 및 보수하고 발전하는 기술들을 따라잡고 변화하는 네트워크 구조에 맞는 관리방법의 변화 등이 바로 그 노동력들의 원인이 된다. 그러나 이는 네트워크의 발전하고 규모가 커져가는 속도에 비해 충분하지 않았고 그만큼 이슈들이 발생하게 되는 것이다.
마지막으로 위의 두 문제들로부터 하나의 문제점을 또 도출해낼 수 있다. 제어부와 전송부가 각 장비들마다 존재하는 만큼 routing, forwarding 과정들을 일일이 장비들마다 수행하여 패킷들을 움직일 수 밖에 없었다. 급변하고 성장하는 현대 네트워크에서는 이 수행들에서 딜레이가 일어날 수 밖에 없다. 현재에는 많은 대형 ISP 들이 생겨났고 그에 따라 트래픽량은 계속해서 증가해오고 있다. 그렇기에 특정 장비들에는 과부하가 걸릴 수 있고 이러한 관리를 위해서는 특히 routing 의 기능이 중요한데 이를 관리하기 위해서는 관리자들이 일일이 관리해야하는 어려움이 발생하고 이 어려움 속에 결국 문제가 생겨 대체가 필요한 장비들이 발생하면 다시 불필요한 지출을 발생시켜 새로운 장비들로 대체시킬 수 밖에 없게되는 것이다.
4. 장점
기존의 네트워크 구조의 문제들을 중심으로 SDN 이 가지는 장점들을 알 수 있다.
SDN 에서는 제어부가 분리되면서 네트워크 장비들은 전송부만을 가질 수 있게 된다. 이는 곧 강제적인 사양의 증가로 무리한 고액의 장비를 살 필요가 없어졌다는 것이다. 분리되어있는 제어부에서 각 장비들의 사양에 맞게 프로그래밍 되어 제어할 수 있기 때문이다. 이는 장비들의 구매, 관리 비용을 줄이고 기존의 소수의 기업들이 독점하던 시장을 조금씩 변화시킬 수 있게 된다. 결국에는 네트워크 인프라를 구축하는 데에 있어 전체적으로 비용이 감소할 수 있는 장점을 가져오게 된다.
전송부와 제어부의 분리에서 가져올 수 있는 장점이 한가지 더 존재한다. 각 장비들마다 제어부와 전송부가 같이 기능을 수행하여 네트워크가 수행되던 전과는 달리 중앙집중화된 제어부에서 범위 내의 전송부들을 제어할 수 있기 때문에 갑작스러운 네트워크 상황의 변화에 대해서도 좀 더 수월하게 제어가 가능해진다. 각 장비들의 현재 트래픽 상황, 일부 네트워크의 상황, 전송 네트워크 장비 자체의 사양에 대한 상황들에 맞춰 최적화된 제어를 할 수 있다. 덧붙여, 네트워크를 확장시키는 것도 전보다 수월해질 수 있다. 또한, 이러한 장점은 결국 네트워크 장비들 자체의 관리에서도 개선을 보일 수 있다. 장비 자체의 설정, 문제 해결들과 같은 문제들을 더이상 각각의 장비들마다 수행해야만 하는 것이 아닌 중앙관리가 가능해지고 그에 따라 네트워크의 자동화와 작업 절차의 복잡도를 낮출 수 있다. 다만, 전송부 자체의 문제는 SDN 으로 해결이 모두 되지는 않는다.
5. 단점 및 의문점
SDN 은 완벽한 기술은 아니기에 당연히 단점들도 존재한다.
중앙집중화된 구조 자체에서 생각해볼 수 있는 단점이 있다. 하나의 컨트롤러가 범위 내의 네트워크 장비들을 제어하는 것이 일반적인 SDN 의 구조이다. 결국 네트워크 장비들은 라우팅 결과를 받기 위해서 컨트롤러에게 라우팅 요청을 할 수 밖에 없다. 만약 어느 한 순간에 장비들로부터 라우팅 요청이 갑자기 몰리게 된다면 결국 부하가 걸리게 되고 성능 저하로 이어질 수 있다. per-router 방식에서는 하나의 전송부가 하나의 제어부에게 요청을 하기에 발생할 확률이 매우 적은 문제가 SDN 에서는 발생할 확률이 더욱 높아지는 것이다.
다음은 제어부 소프트웨어 자체의 성능의 문제이다. 제어부가 제어하는 네트워크 장비들이 고가에 높은 사양의 장비더라 하더라도 제어부 자체의 성능이 좋지 않다면 결국 낭비가 되거나 전체 네트워크 성능의 저하를 일으키게 되는 것이다. 또한, 제어부 소프트웨어 자체의 보안이 허술하다면 외부의 공격에 따라 피해를 받는 네트워크 범위는 이전의 per-router 구조보다 더 빠른속도로 커질 수도 있다. 물론 이는 반대의 경우에도 생각해보아야 한다. 제어부 소프트웨어 자체의 성능이 매우 좋다 하더라도 네트워크 장비들 자체의 성능이 받쳐주지 않는다면 결국 의미 없는 결과를 만들게 된다.
마지막으로 SDN 의 장점이었던 자유도와 유연성에서 주의해야 하는 단점이 존재한다. 분명 SDN 은 제어부와 전송부가 분리되어 이전보다 높은 자유도, 유연성 있는 네트워크 구축이 가능해졌다. 그러나 이로인해 많은 기술들이 네트워크 내에서 너무 혼합된다면 오히려 관리자, 엔지니어들에게는 통합적인 관리가 어려워질 수 있다. 이는 결국 네트워크의 성능 저하로 이어지게 된다.
여기서 단점들과 SDN 의 구조 자체에서 생각해볼 수 있는 하나의 의문점이 생긴다. SDN 의 구조는 3개의 계층으로 분리되어 있다. 특히, 제어부와 전송부가 분리되어 동작한다. 즉, 제어부의 라우팅의 결과를 전송 네트워크 장비에게 전달해주기 위해서는 계층 사이의 정해진 통신 방법이 필요하다. 여기에서 쓰이는 통신 방법을 southbound API 라 칭한다. 정적 라우팅에서는 정해진 큰 문제가 발생하지 않지만 동적 라우팅에서는 한가지 의문점이 생긴다. 두 계층간에는 결과를 주고받기 위해 정해진 프로토콜을 통해 반복적인 통신이 필요하다. 그러나 동적 라우팅으로 인해 둘 사이의 통신이 반복적으로 발생한다면 오히려 성능이나 효율적인 면에서 기존의 per-router 방식보다 좋지 않은 상황이 발생할 수도 있지 않나 하는 의문이 든다.