A Study of Software Defined Wireless Mesh Test-bed
Abstract
네트워크와 관련된 실험을 위해서 네트워크 토플로지를 적절하게 제어하는것이 필요한데, 이는 그동안 물리적 링크제어나 시뮬레이션으로 주로 해결되었다. 본 연구에서는 유무선 메쉬 네트워크로 구성된 테스트 베드상에서 SDN기법을 이용해 가상의 토플로지를 구성하는 기법에 대하여 소개한다. 이를 통해 사용자 또는 네트워크 관리자는 네트워크를 원하는 시간에 원하는 모양으로 구성하여 사용할 수 있으며, 이를 여러 사용자가 동시에 이용할 수 있도록 한다. 이를 바탕으로 공공 테스트 베드를 구현하거나 실험을 위한 복잡한 표준 토플로지 구성 등을 간단하게 수행할 수 있을 것으로 기대한다.
Introduction
최근 무선 인터넷이 발전하면서 Mobile Ad-hoc Network (MANET) 환경에 대한 관심이 높아지고 있다. 이러한 네트워크는 복잡한 Mesh의 형태를 띄고 있으며, 무선 링크라는 특징으로 인하여 링크를 일일히 제어하기가 매우 어려운데, 이러한 환경에서 동작하는 어플리케이션이나 라우팅 프로토콜을 개발하기 위해서는 동일한 환경을 재현하고, 유지하는것이 매우 필수적이다. 따라서 이러한 환경을 구축 할 수 있도록 여러가지 방법의 테스트 베드 구축이 있었고, 대표적으로 Mininet과 같은 하나의 워크스테이션에서 구동하는 소프트웨어 기반의 시뮬레이션 방식과, 직접적인 하드웨어 제어 또는 GENI testbed와 같이 이미 구성된 하드웨어를 이용하는 방식의 테스트 베드 방식이 존재한다. [1] [2]
소프트웨어 기반의 시뮬레이션 방식은 일관성있는 환경을 구축할 수 있다는 장점이 있지만, 실제 무선신호를 이용한 시뮬레이션이 아니므로 어느정도 한계를 가지며, 하드웨어를 이용하는 방식은 설비를 설치하기 위하여 비용이 많이 들거나, 이를 공용으로 쓸수 있도록 구축하여도 동시에 1사람 밖에 이용할 수 없다는 단점을 가진다.
따라서 본 연구에서는 위의 두 방식을 적절히 혼합하여 동시에 여러사람이 이용할 수 있는 테스트 베드를 구축하는 기법에 대하여 제안하고자 한다. 3절에서는 표준 프로토콜을 제안하여 사용자가 직접 topology와 실험 제약조건을 설계하였으며, 4절에서는 이를 본격적으로 구현하기 위하여 필요한 문제 정의와 이를 해결하기 위한 알고리즘을 소개하고자 한다.
Software Defined Network Tools
Open vSwitch
Open vSwitch는 범용성 컴퓨터가 switch의 역할을 수행할 수 있도록 하는 프로그램으로써, 특히 switch의 behavior를 사용자가 직접 조작할 수 있도록 고안된 소프트웨어이다. [3]우리가 위와 같은 툴을 사용한 이유는, Wireless mesh network 상에서는 링크 연결이 매우 복잡하며 눈으로 볼 수 없다는 특징이 있기 때문에 네트워크의 형태를 쉽게 관리할 수 없다. 이러한 사례에 적용할 수 있는
대표적인 해결책이 Software defined network (SDN) 이며, 이의 대표주자로써 Open vSwitch를 선택하였다.
실제로 네트워크 사업자 (특히 이동통신 사업자)의 경우에 어떠한 링크는 데이터플레인으로만 이용되어야 하고, 반대로 어떠한 링크는 Control Plane만을 구성하기 위하여 이용되어야 하는데, 이러한 구성이 단순 수십개의 노드가 아닌 수백 수천개의 장비와 연결되어야 하며 동시에 손쉽게 유지보수 할 수 있어야 한다. 하지만 물리적으로 이렇게 구성된 데이터 센터는 유연하지 못하므로, 물리적 연결을 통한 제어가 아닌 소프트웨어 적으로 정의하여 사용하는 Software Defined Network (SDN) 중심의 구현 방식이 최근 주목받고 있다.
따라서 우리의 해결하고자 하는 목표중 하나인 reusability over one environment에 잘 부합한다고 할 수 있으며, 실제 본 연구에서 link를 제어하고, 이웃으로 직접 연결되지 않은노드가 직접 연결되어 있는것 처럼 에뮬레이션 하기 위해서 Open vSwitch를 사용하고 있다.
Traffic Control (linux-tc)
linux-tc는 linux환경에서 traffic shaping을 도와주는 오픈소스 라이브러리로써 loss나 delay를 에뮬레이션 하거나, QoS를 구현하는데에 주로 사용된다. [4]
무선 네트워크 환경에서는 delay나 loss가 발생할 수 있는데, 이러한 환경에 맞는 라우팅 알고리즘을 개발하기 위해서는 필연적으로 delay또는 loss를 emulate 할 필요 성이 있다. 따라서 본 연구에서는 linux-tc를 사용하여 사용자가 직접 링크에 loss, delay, bandwidth limit를 걸 수 있도록 하였다.
또한, linux에서는 하나의 interface에 가상으로 여러 주소를 부여할 수 있도록 virtual interface 기능을 제공하고 있다.
모든 사람들이 하나의 자원을 모두 동시에 이용하면서 각기 다른 traffic shaping을 지원하기 위해서는 이러한 interface 가상화가 필수적인데, 본 연구에서 모든 테스트케이스는 고유한 virtual interface가 할당되며, 실제 물리적 연결과 상관없이 추상적으로 내가 구성한 topology와 link 속성을 바탕으로 네트워크 통신이 가능하도록 해준다.
Software Defined Wireless Mesh Testbed
Wireless Mesh Testbed는 Wireless Mesh를 바탕으로 노드들이 상호 연결되어 Wireless Mesh에 관련된 routing, 성능측정, application test등을 수행할 수 있는 환경을 뜻한다. 이러한 테스트배드는 무선환경이기 때문에 위에서 설명한것처럼 물리적인 조건을 제한하기 힘들다. 따라서 본 연구에서는 테스트에 참여하는 mesh node를 제어하고 관리할 controller가 존재하여야 하며, controller는 아래에서 정의할 각종 모델을 가지고 있으며, 해당 모델을 바탕으로 실제 test case environment들을 구현하게 된다.
Testbed Definition
물리적 테스트배드 정보는 일반적으로 한번 정의되면 잘 변경되지 않는다. 이러한 정보를 JSON을 이용하여 아래와 같은 정보를 가진 모델로써 controller에 저장한다.
- Node name alias
- Node's IP address (for control)
- ssh user id
- ssh user pw (credential file name)
Node's interface info
Node's interface info
Node's interface info
아래는 하나의 노드의 정의 예시이다.
"node1": {
"ip": "192.168.1.1",
"ssh": {
"user": "root",
"key": "~/node1.pem"
},
"interface": {
"wlan0": {"ssid": "mesh1", "channel": 6}
}
}
이렇게 구성된 정보는 controller에 위치하게 되며, 위의 정보를 바탕으로 다음의 과정을 통해 실험 환경을 물리적으로 구성한다.
- 해당 ip와 ssh정보로 노드에 접근 가능한지 살펴본다.
- 접근이 가능하다면 해당 interface에 mesh link를 구성한다.
- 해당 interface들을 Open vSwitch에 할당해준다.
- Open vSwitch를 외부에서 제어할 수 있도록 control port를 open한다.
이렇게 구성된 실험용 interface는 "br0"라는 이름으로 구성되어진다.
Test Case Definition
정의된 테스트배드는 여러가지 다른 환경으로 정의되어 사용할 수 있는데, 이러한 정의된 환경을 본 연구에서는 "test case model" 이라고 칭한다. 이러한 테스트 환경을 정의한 test case model은 앞서 정의한 "testbed model"을 바탕으로 각 노드간의 연결정보 (link)와, 연결옵션 (option)를 JSON으로 기술하게 된다. 연결관계는 크게 Simplex 연결과 Duplex 연결로 나뉠 수 있는데, 이는 각각 아래와 같이 정의된다.
Simplex connection
{
"node1": ["node2"],
"node2": []
}
Duplex connection
{
"node1": ["node2"],
"node2": ["node1"]
}
링크 옵션의 경우 loss와 bandwidth, delay에 대한 정보를 가지고 있으며, 각각 probability (0-1), mbps, ms 단위를 가진다. 이러한 옵션은 alias로 지정하거나 직접 입력하여 아래와 같이 사용할 수 있다.
Connection with apply link options
{
"node1": [{"node2": {"loss": 0.1, "bandwidth": 0.5, "delay": 100}}],
"node2": ["node1"]
}
Link options with alias
{
"options": {
"option1": {"loss": 0.1, "bandwidth": 0.5, "delay": 100}
},
"links": {
"node1": [{"node2": "option1"}],
"node2": ["node1"]
}
}
또한 테스트배드를 구성시에
만약 실제로는 여러 노드를 거쳐서 도달해야 하는 상황이지만 tunnel을 지정하여 사용하고 싶은경우, testcase apply 과정에서 automatically 하게 터널을 구성하지만, 만약 그렇지 않고, 꼭 특정 노드를 거쳐서 가도록 하고싶다면 아래와 같이 지정할 수 있다.
{
"links": {
"node1": [{"node2": {"path": ["node2"]}}],
"node3": [{"node1": {"path": ["node2"]}}]
}
}
이때 path는 왼쪽에서 오른쪽 순서로 현재 노드부터 목적지 노드까지 프레임이 운반되며, 인접한 중간 노드끼리는 서로 neighbor여야 하며, path가 반복되거나, 자기자신 또는 목적지를 포함할 수 없다.
Test Cases Projection on to Test-bed
테스트케이스가 테스트베드에 투영되기 위해셔는 테스트베드의 모델이 정의된 이후에, 이를 각각의 개별 노드 설정에 맞게 쪼개주고, 인터페이스의 실제 mac address를 대입하여 openflow 스크립트를 작성해줄 필요가 있다. 따라서 test case가 실제 test bed에 projection되는 순간 open vswitch의 virtual interface (예: ovs0.100)을 할당해주고, mac address를 수동으로 매핑 해준다. (예: 1번 테스트케이스의 10번노드 : 00:00:00:01:00:0a) 이러한 과정을 통해서 linux-tc에 traffic shaping rule를 추가해주며 openflow를 이용하여 link control을 수행해준다.
Algorithm 1. Test case projection
Input the testbed model
Evaluate the model from real hardware
Mapping virtual interface and mac address
Collect virtual mac address from all test nodes
Write open flow rules from test case model
Write tc rules from test case model
Algorithm 2. Link control
if addr_dst is neighbor and allowed addr_src then ACCEPT
else if addr_dst is not neighbor but allowed addr_src then FORWARD_NEXT
else DROP
이때 egress 과정에서 l2 frame이 forwarding 될때 source addr과 dest addr이 수정되지 않도록 관리되어야 한다. 특히 l3 이상의 network 장치 (switch, router, wireless ap 등)에는 자신의 mac address를 기반으로 잘못된 packet을 filtering하여 전달되지 않도록 하거나, 자신의 주소로 override 하는 경우가 존재하므로 ad-hoc을 이용한 연결 또는 hub 를 바탕으로 한 유선연결이 test-bed 구성에 권장 되어 진다.
이러한 flow는 동시에 여러 testcase가 돌아갈 수 있도록 가상 인터페이스에 할당이 되어지는데, 아래와 같은 과정을 거쳐 가상 인터페이스를 할당한다.
- ovs의 가상인터페이스를 새로 할당한다.
- 할당된 가상인터페이스의 번호 "ex : br0.100" 을 기억해두고 할당한다.
- 할당된 인터페이스에 할당된 번호에 맞는 mac address를 할당한다. (ex : 0:0:0:0:100:0 ~ 0:0:0:0:100~20)
- 해당 mac address에 맞춰 open flow rule 을 가상 인터페이스에 적용시킨다.
Evaluation
본 연구에서 사용된 테스트 베드는 17개의 raspberry pi 3를 이용하여 유선 연결을 control plane으로, 무선 연결을 data plane으로 사용하였다. 각각의 노드는 Fig. 5. 와 같은 인터페이스 구성을 가지고 있으며, 모든 노드들을 Ad-hoc 모드로 연결되어 fully connected mesh topology를 띄고 있다.
위와 같이 구성된 환경에서 Linear topology, Star topology, Ring topology를 각각 br0.1 (192.168.0.x), br0.2 (192.168.1.x), br0.3 (192.168.2.x)에 구현하였고, 각각의 ping test 결과는 다음과 같다.
PING 172.31.0.1 (172.31.0.1): 56 data bytes
64 bytes from 172.31.0.1: icmp_seq=0 ttl=255 time=0.833 ms
64 bytes from 172.31.0.1: icmp_seq=1 ttl=255 time=0.822 ms
64 bytes from 172.31.0.1: icmp_seq=2 ttl=255 time=1.014 ms
64 bytes from 172.31.0.1: icmp_seq=3 ttl=255 time=0.972 ms
tc #1 (Linear Topology)
ping 192.168.0.17
ttl:
Conclusion