SDN的特征
集中控制:集中控制使得全局優化成為可能,比如流量工程、負載均衡。集中控制使得整個網絡可以當作一台設備進行維護,設備零配置即插即用,大大降低運維成本。
開放接口:應用和網絡的無縫集成,應用告訴網絡如何運行才能更好地滿足應用的需求,比如業務的帶寬、時延需求,計費對路由的影響等。用戶可以自行開發網絡新功能,加快新功能面世周期。理論上NOS和轉發硬件的開放標准接口使得硬件完全PC化。
網絡虛擬化:邏輯網絡和物理網絡的分離,邏輯網絡可以根據業務需要配置、遷移,不受物理位置的限制。多租戶支持,每個租戶可以自行定義帶寬需求和私有編址。
SDN關鍵技術體系:
SDN南向接口
SDN南向接口的關鍵技術是轉發面開放協議,該協議允許網絡控制器控制交換機的配置以及相關轉發行為。
Openflow是ONF定義的一個轉發面控制協議,它將轉發面抽象為一個由多級流表組成的轉發模型,網絡控制器通過Openflow協議下發Openflow流表到具體交換機,從而定義、控制交換機的具體行為。
OpenFlow是一整套軟件應用程序接口,OpenFlow 控制器可以通過規范與支持OpenFlow 交換機溝通配置信息,決定數據轉發平面的轉發表,控制器與交換機間通過SSL 加密傳輸。
OF-CONFIG (OpenFlow配置和管理協議)由ONF控制和管理工作組制定和維護,是OpenFlow協議的同伴協議,是在包含OpenFlow交換機的運營環境下,除OpenFlow協議之外的接口配置和管理協議規范,目前采用NETCONF協議進行傳輸。
Openflow以及OF-Config提供了靈活、開放的手段,但是也有許多尚待改進的地方:
1.現有轉發面硬件芯片無法在所有Openflow流表中支持協議中定義的匹配字段,導致Openflow協議靈活性大打折扣,也為網絡控制器控制異構Openflow交換機增加了難度;
2.Openflow協議中僅僅支持了部分現有網絡封包格式,后續對於協議的擴展也會存在類似標准化周期過長的問題。
SDN北向接口
SDN控制層將網絡能力封裝為開放的REST API,供上層業務調用。
ONF當前只定義了OpenFlow作為南向API,而回避了北向API標准化問題,因此不同的控制器具備有不同的北向API集合。
安裝jdk
在jdk官網下載jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
mkdir /usr/lib/jvm
tar -xzvf jdk-8u251-linux-i586.tar.gz -C /usr/lib/jvm
添加環境變量 $ sudo vi ~/.bashrc 加入如下內容: export JAVA_HOME=/usr/lib/jvm/java export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 執行如下命令,使生效 source ~/.bashrc
配置jdk版本
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/bin/java 300 update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/bin/javac 300 update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java/bin/jar 300 update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/java/bin/javah 300 update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/java/bin/javap 300
update-alternatives --config java
[root@host-10-10-18-131 ~]# java -version -bash: /usr/lib/jvm/java/bin/java: No such file or directory [root@host-10-10-18-131 ~]# ls /usr/lib/jvm/java/bin/java /usr/lib/jvm/java/bin/java [root@host-10-10-18-131 ~]# type -path java /usr/lib/jvm/java/bin/java [root@host-10-10-18-131 ~]#
原因是java下載出錯,重新下載個jdk-8u251-linux-x64.tar.gz 安裝
tar -xzvf jdk-8u251-linux-x64.tar.gz -C /usr/lib/jvm
二、 安裝onos
$ git clone https://gerrit.onosproject.org/onos 1.2 配置ONOS環境變量 $ sudo vi /etc/profile 加入如下內容: export ONOS_ROOT=~/onos source $ONOS_ROOT/tools/dev/bash_profile 執行如下命令,使生效 source /etc/profile
4 安裝Karaf和Maven
下載Karaf和Maven
$wget http://archive.apache.org/dist/karaf/3.0.5/apache-karaf-3.0.5.tar.gz
$wget http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.g
tar -zxvf apache-maven-3.3.9-bin.tar.gz -C ~/apache/
tar -zxvf apache-karaf-3.0.5.tar.gz -C ~/apache/
export KARAF_ROOT=/root/apache/apache-karaf-3.0.5/ "/etc/profile" 88L, 2198C written [root@host-10-10-18-131 downloads]# source /etc/profile
export JAVA_HOME=/usr/lib/jvm/java export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH export ONOS_ROOT=/root/onos source $ONOS_ROOT/tools/dev/bash_profile export KARAF_ROOT=/root/apache/apache-karaf-3.0.5/ export MAVEN_ROOT=/root/apache/apache-maven-3.3.9/ export PATH=$JAVA_HOME/bin:$MAVEN_ROOT/bin:$KARAF_ROOT/bin:$PATH ~ ~ ~ "~/.bashrc" 21L, 567C written [root@host-10-10-18-131 onos]# source ~/.bashrc [root@host-10-10-18-131 onos]# mvn clean install -DskipTests [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.120 s [INFO] Finished at: 2020-06-20T07:09:15+00:00 [INFO] Final Memory: 5M/102M [INFO] ------------------------------------------------------------------------ [ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/root/onos). Please verify you invoked Maven from the correct directory. -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException [root@host-10-10-18-131 onos]#
[root@host-10-10-18-131 onos]# env | grep JAVA_HOME JAVA_HOME=/usr/lib/jvm/java [root@host-10-10-18-131 onos]#
[root@host-10-10-18-131 onos]# mvn clean install -X switch Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00) Maven home: /root/apache/apache-maven-3.3.9
[root@host-10-10-18-131 onos]# mvn -version Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00) Maven home: /root/apache/apache-maven-3.3.9 Java version: 1.8.0_251, vendor: Oracle Corporation Java home: /usr/lib/jvm/java/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "4.18.0-147.3.1.el8_1.x86_64", arch: "amd64", family: "unix" [root@host-10-10-18-131 onos]#
當前目錄沒有pom.xml,進入
/root/onos/tools/build
[root@host-10-10-18-131 build]# pwd /root/onos/tools/build [root@host-10-10-18-131 build]# mvn clean install -DskipTests
下載與安裝bazel 下載:wget https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-7/vbatts-bazel-epel-7.repo (wget 與后面鏈接一起輸入命令行) 再移動到 /etc/yum.repos.d/目錄下 :mv vbatts-bazel-epel-7.repo /etc/yum.repos.d 或者復制:cp vbatts-bazel-epel-7.repo /etc/yum.repos.d 安裝:yum install bazel
[root@host-10-10-18-131 ~]# bazel version WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown". Build label: 1.2.1 Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar Build time: Tue Nov 26 00:00:00 2019 (1574726400) Build timestamp: 1574726400 Build timestamp as int: 1574726400 [root@host-10-10-18-131 ~]#
yarn報錯error An unexpected error occurred: "https://registry.yarnpkg.com...connect ETIMEDOUT...
yum install -y nodejs
[root@host-10-10-18-131 build]# node -v v10.19.0 [root@host-10-10-18-131 build]# npm -v 6.13.4 [root@host-10-10-18-131 build]# npm config set registry https://registry.npm.taobao.org [root@host-10-10-18-131 build]# npm config set disturl https://npm.taobao.org/dist [root@host-10-10-18-131 build]#
yum -y install gcc
yum -y install gcc-c++
yum install -y nodejs
An error occurred during the fetch of repository 'remotejdk11_linux': java.io.IOException: Error downloading [https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-linux_x64.tar.gz] to /root/.cache/bazel/_bazel_root/548916f1c2f50851181f393ea08eaba4/external/remotejdk11_linux/zulu11.2.3-jdk11.0.1-linux_x64.tar.gz: connect timed out