SDN入门学习
一 SDN概念理解
软件定义网络SDN(Software Defined Network)起源于2006年斯坦福大学的Clean State研究课题。2009年,Mckeown教授正式提出了SDN概念。
SDN是一种网络设计理念,或者一种推倒重来的设计思想。只要网络硬件可以集中式软件管理,可编程化,控制转发层面分开,则可以认为这个网络是一个SDN网络。所以说,SDN并不是一个具体的技术,不是一个具体的协议,而是一个思想、一个框架。狭义的SDN是指的“软件定义网络”,广义的SDN的概念还延伸出了:软件定义安全、软件定义存储等等。可以说,SDN是一个浪潮,席卷整个IT产业。
SDN时代,网络工程师/网络运维/IT运维人员对网络部署的方式,需要从“作坊式”的“手码”配置,慢慢变成采用脚本语言/编程语言等方式对网络进行“编程式”部署,更快更好的响应业务需求。
需要了解的一些概念:
OpenFlow是属于数据链路层的一种网络通信协议,能够控制网络设备的转发平面(forwarding plane),改变网络数据包所走的网络路径。OpenFlow网络由OpenFlowswitch(OpenFlow交换机)、FlowVisor(网络虚拟化层)和Controller(控制器)三部分组成。OpenFlow交换机进行数据层的转发;FlowVisor对网络进行虚拟化,将物理网络划分成多个逻辑网络,从而实现虚网划分,它为管理员提供了通过定义流规则,而不是调整路由器和交换机配置的方式来管理网络,是openflow交换机和控制器之间的一个透明代理;Controller对网络进行集中控制管理,实现控制层的功能
NFV(network function virtulization,网络功能虚拟化)是指一种操作框架,目的是为了将部署在COTS硬件上的、在虚拟基础架构中的VNF软件设备编排和自动化起来,然后进行VNF设备的全生命周期管理。VNF(virtualized network function)通常是指路由器、防火墙、负载均衡等网络设备的软件化。大多数时候,VNF是作为虚机被部署在基于Linux命令行KVM虚拟机上,或者部署在基于VMware vSphere hypervisor的商用现成(COTS)的硬件上。PNF(physical network function,物理网络功能)是指在专用硬件上的传统网络设备。CNF(cloud-native network function,云原生网络功能)是指容器化的VNF和可以成为微服务中的容器网络和服务网格。欧洲电信标准化协会(ETSI)和Linux基金会(LF)都在积极地开发和培育NFV框架的参考架构和标准体系。ETSI管理下的OSM(Open Source MANO)和LF管理下的ONAP(Open Network Automation Platform)是目前由服务运营商和网络厂商们所支持的、最重要的开源NFV项目。在ETSI NFV架构中,NFV MANO提供核心操作功能,并由四个部分组成:NFV编排器(VNF Orchestrator)、VNF管理器(VNF Manager)、虚拟化基础设施管理器(VI Manager,Virtualized Infrastructure Manager)以及这些功能模块与其他操作系统之间的互通。
NFV框架示意图如下所示:
二 SDN组织
ONF:Open Networking Foundation 开放网络联盟,2011年成立,是最早的SDN组织,创始成员主要是Google、Facebook、微软等互联网成员,旨在推动SDN标准化,制定并发布Openflow技术标准。
ODL:Opendaylight成立于2013年4月,由Cisco、IBM、juniper、Vmware、Intel等发起,成员主要是网络厂商,旨在打造一个开源的SDN平台框架,提供开源的网络操作系统,目前核心就是做了行业默认标准的Opendaylight控制器。
ONOS:Open Network Operating System 开放网络操作系统,2014年11月成立,创始成员主要是AT&T、NTT、华为等,成员主要是运营商,旨在为运营商用户提供一个开源的网络控制器,目前核心就是做了面向运营商的ONOS控制器,与ODL竞争。
NFV:Network Function Virtualization网络功能虚拟化,成立于2012年10月,有AT&T、英国电信、德国电信、中国移动等成员提出,成员主要来自运营商,该组织致力于IT设备虚拟化,以提高运营能力降低运维成本等。
SDN组织发展过程,由互联网成员发起、网络厂商排斥、运营商观望,变成现在互联网成员积极探索协议开发、网络厂商主动拥抱开发SDN控制器、运营商逐步介入参与研究。
三 SDN案例
SDN网络的标杆,最成功案例google B4网络,2010年开始实施,2012年初步完成,该网络架构充分利用了SDN的核心思想,引入openflow交换机,采用分布式控制器架构,将流量环境密集复杂的数据中心之间的WAN链路利用率从30%提高接近100%。该项目谷歌充分发挥了极强的软件能力,使用自研的交换机为物理基础,架设在数据中心出口搭建起SDN平台,然后将流量引入SDN平台进行集中管理(旧的TE平台仍然保留,如果出现SDN平台出现问题,流量则切换到旧平台),展示出了全球数据中心流量拓扑,进行集中管控,相比SDN概念,该工程同时也是一个庞大的流量工程。谷歌的成功案例使得到当前2020年SD-WAN依旧是网络潮流方向。
SDN发展初期,ONF过于理想化态度,试图推翻所有网络协议的导致走了很多弯路。现阶段ONF开始注重于OpenFlow协议的研发;网络厂商主动拥抱SDN理念,关注用户需求,逐步开放IT设备接口,研发SDN控制器;
IEEE、IEIF、SDN等标准组织去除了与OpenFlow的必然联系,扩展出了SDN广义概念,泛指基于开发接口实现软件可编程的各种基础网络架构,进而将具备控制转发分离、逻辑集中控制、开放API3个基本特征的网络。
四 SDN测试环境
为了加深SDN认知,搭建一套SDN测试环境,了解Openflow+ODL一些基本功能。
基于Ubuntu+Mininet+Opendaylight的SDN测试环境。
一、安装的操作系统版本是16.04.1-Ubuntu 64位
二、安装mininet
参考Mininet官方:http://mininet.org/download/
选择源码安装mininet:
1)首先安装git
#apt-get update
#apt-get install git
2)获得mininet的源码
#git clone git://http://github.com/mininet/mininet
3)打开mininet文件夹,选择其中一个版本安装
#cd mininet
#git tag #查看可用版本
#git checkout -b 2.3.0d6 #选择一个2.3.0d6版本
4)开始安装
#cd util #进入mininet里的util文件夹
#install.sh –a #选择全部安装
5)测试
#mn –test pingall
安装成功。
三、安装opendaylight
ODL官网https://www.opendaylight.org,我们选择Carbon版本进行安装测试。ODL的karaf环境运行在java上,选择java version “1.8.0_261″。目前最新的ODL版本Magnesium需要安装java11。
1)下载ODL(Carbon)
#wget https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/0.6.4-Carbon/distribution-karaf-0.6.4-Carbon.tar.gz
2)解压压缩包
#tar –zxvf distribution-karaf-0.6.4-Carbon.tar.gz
3)修改一些参数
#cd distribution-karaf-0.6.4-Carbon/etc
#vim org.apache.karaf.management.cfg
修改:
rmiRegistryHost=127.0.0.1
rmiServerHost = 127.0.0.1
4)进入karaf,安装一些功能组件
#cd distribution-karaf-0.6.4-Carbon/bin
#./karaf
按顺序安装以下功能组件
feature:install odl-testconf
feature:install odl-l2switch-switch-ui
feature:install odl-mdsal-apidocs
feature:install odl-dluxapps-applications
5)通过Web界面进入opendaylight
打开浏览器,输入网址:http://<yourMachineIP>:8181/index.html
用户名和密码都是admin
四、通过python自定义网络拓扑配置,关联ODL。
Python编写拓扑的范例在/mininet/examples目录下,比如可以通过在目录下搜索 #grep -r bandwidth 查询带宽的编写配置方法。
(1)python文件放在这个目录下
#cd mininet/custom
(2)示例编写了个双数据中心的交换网络:
root@wyq:/usr/local/mininet/custom# cat topo-qjcd.py
#!/usr/bin/python
#build topo
“””Custom topology example
mn –custom /usr/local/mininet/custom/topo-qjcd.py –topo mytopo –controller=remote,ip=127.0.0.1,port=6633 –switch ovsk,protocols=OpenFlow10
Adding the ‘topos’ dict with a key/value pair to generate our newly defined
topology enables one to pass in ‘–topo=mytopo’ from the command line.
“””
from mininet.topo import Topo
from http://mininet.net import Mininet
from mininet.node import RemoteController,CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo( Topo ):
“Simple topology example.”
def __init__( self ):
“Create custom topo.”
# Initialize topology
Topo.__init__( self )
L1 = 2
L2 = L1 * 2
L3 = L2
c = []
a = []
e = []
# add core ovs
for i in range( L1 ):
sw = self.addSwitch( ‘c{}’.format( i + 1 ) )
c.append( sw )
# add aggregation ovs
for i in range( L2 ):
sw = self.addSwitch( ‘a{}’.format( L1 + i + 1 ) )
a.append( sw )
# add edge ovs
for i in range( L3 ):
sw = self.addSwitch( ‘e{}’.format( L1 + L2 + i + 1 ) )
e.append( sw )
# add links between core and aggregation ovs
for i in range( L1 ):
sw1 = c[i]
for sw2 in a[i/2::L1/2]:
self.addLink(sw2, sw1, bw=10, delay=’5ms’, loss=10, max_queue_size=1000, use_htb=True)
self.addLink( sw2, sw1 )
# add links between aggregation and edge ovs
for i in range( 0, L2, 2 ):
for sw1 in a[i:i+2]:
for sw2 in e[i:i+2]:
self.addLink( sw2, sw1 )
#add hosts and its links with edge ovs
count = 1
for sw1 in e:
for i in range(2):
host = self.addHost( ‘h{}’.format( count ) )
self.addLink( sw1, host )
count += 1
topos = { ‘mytopo’: ( lambda: MyTopo() ) }
(3)执行该配置,并调用本地的ODL控制器环境
#mn –custom /root/mininet/custom/topo-qjcd.py –topo mytopo –controller=remote,ip=127.0.0.1,port=6633 –switch ovsk,protocols=OpenFlow10
(4)打开浏览器,输入网址:http://<yourMachineIP>:8181/index.html,登录到ODL,可以看到定义的网络拓扑结构、节点配置等相关信息。
五 SDN学习小结
1、学习到的知识
(1)SDN是什么,SDN历史发展至现状如何?
(2)Mininet、Opendaylight、Onos是什么,用来干嘛,如何使用?
(3)openflow、NVF、VNF是什么?两者有什么区别?
2、现阶段SDN对于企业应用
现阶段SDN发展趋于平稳,市场细分领域SD-WAN和NVF这两块较为活跃。SD-WAN得益于谷歌B4的成功案例,试图推翻MPLS技术,同时大型互联网企业、运营商基本都有流量工程的需求。NVF得益于近几年云服务、云计算的大力发展(服务器经过虚拟化后集中管理、快速恢复故障等,网络设备为何不可)。Openflow和Opendaylight则依然任重道远。
相对企业而言,如果没有多数据中心流量工程或者大规模云服务需求,则基本不会用到SDN相关技术。但可以学习SDN的一些思维理念,加强自动化运维能力,提高运维效率。
参考文档
谷歌B4网络论文《B4 Experience with a Globally-Deloyed Softwar Defined WAN》
解析Google基于SDN的B4网络https://zhuanlan.zhihu.com/p/263564058
Mininet实验指导https://www.cnblogs.com/a1164520408/p/9628916.html
HREF=”https://blog.csdn.net/wuliangtianzu/article/details/82689347″
HREF=”https://xiaoer.blog.csdn.net/article/details/105230800″
HREF=”https://blog.csdn.net/weixin_39490421/article/details/80621960″
HREF=”https://blog.csdn.net/muyuxiaoxiang/article/details/79238959″
HREF=”https://blog.csdn.net/louiey/article/details/77583028″
HREF=”https://docs.opendaylight.org/en/stable-magnesium/getting-started-guide/index.html”
HREF=”https://www.sdnlab.com/15128.html”
HREF=”https://docs.opendaylight.org/en/stable-carbon/getting-started-guide/common-features/dlux.html#”
HREF=”https://www.opennetworking.org/”
SDN实验工具
mininet
opendaylight
onos
SDN相关组织网站
http://www.opendaylight.org
http://sdnhub.org
http://www.sdnlab.com
http://mininet.org