安装Nox之后,可以通过安装Open-vSwitch连接Nox来进一步了解Nox的运行机制。
通过安装一个带图形界面的Nox destiny分支,再让简单组网的Open-vSwitch(s)连接到Nox,再通过Nox的topology应用直观地了解到Nox功能的一角。这一过程很有助于对Openflow有个初步的了解。关于如何完成这一过程,网上有相关的博客文章,可以搜索参考。
简单来说,Openflow只是SDN的一个具体实施方案,它将传统网络设备的控制平面迁移到了主机,完成网络设备的集中管控。从技术实现上来讲,带来的最直接的益处是:
1、网络的可控性更高;
2、网络设备的开发周期、开发难度降低;
3、有利于拓展新的网络方面的研究;
这三方面都直接受益于集中管控,毕竟对于完成同样一件功能,分布式计算的复杂度与集中式计算的复杂度是有较大差异的,众多传统的复杂的网络协议以及算法在纯Openflow的环境下可以不再需要了(被一些更简单的所取代)。另外,Openflow还以一种统一的、简洁的设计来定义网络核心,颇有些类似操作系统领域的微内核的风范。总的来说,SDN的设想是好的,Openflow的设计还是不错的,但是任何一项技术是不可能独立存在的,定会受到当前商业利益以及相关产业的技术条件等的外部约束,况且也不是说就没有内在的阻力。至于SDN以及Openflow的未来只好拭目以待。
下面开始转入正题(只是对本文标题而言),实际上Nox只是一个Openflow协议的Server端,同http服务器没有什么本质的差别,再加上一些进行网络控制的应用组成。后续会持续演练一下Nox的实现,这个演练可以进一步了解Openflow在做什么,顺便也可以熟悉熟悉服务器端的程序的编写。
这次先开个头,来个欢迎界面吧 ,算是来个开工仪式。
#include <cstdio>
#include <cstring>
static const char *_get_program_name(const char *exec_name)
{
const char *program_name;
if (const char *slash = strrchr(exec_name, '/'))
{
program_name = slash + 1;
}
return program_name;
}
static void _show_welcome(char *arg0)
{
printf("################### Welcome to use %s! ###################\n",
_get_program_name(arg0));
}
int main(int argc, char *argv[])
{
_show_welcome(argv[0]);
return 0;
}
书写一个简单的makefile文件,如下:
all : main
main : main.cc
g++ -g -rdynamic main.cc -o My_Nox
clean:
rm -f My_Nox
编译执行可以看到如下结果:
root@ubuntu:/home/y09002/My-Nox# make all
g++ -g -rdynamic main.cc -o My_Nox
root@ubuntu:/home/y09002/My-Nox# ./My_Nox
################### Welcome to use My_Nox! ###################