Merge branch 'branch-xdl' into 'branch-wudi'

修改文档忘记添加了,重新提交

修改文档忘记添加了,重新提交

See merge request !9
tmp/0ae72bb9d4f0d92a47c99832b0a9add1/head
夏竟 4 years ago
commit e9eab4d95e

@ -110,13 +110,13 @@
\graphicspath{{../figure/appendixes/ensp/}}
\input{../data/appendix/ensp}
% 可编程网络平台-操作手册
% FAST平台介绍与操作说明手册
\graphicspath{{../figure/appendixes/openbox/}}
\input{../data/appendix/openbox}
% FAST软件编程入门指南
\graphicspath{{../figure/appendixes/fast/}}
\input{../data/appendix/fast}
% \graphicspath{{../figure/appendixes/fast/}}
% \input{../data/appendix/fast}
\backmatter
%======================================================================

@ -1,214 +1,145 @@
%# -*- coding: utf-8-unix -*-
\chapter{可编程网络平台-操作手册}
\chapter{FAST平台介绍与操作说明手册}
\label{app:openbox}
\subsection{FAST简介}
针对近年来关于工业控制网络创新技术、创新网络结构、时间敏感网络、SDN网络、FPGA硬件加速技术及下一代网络技术的研究需求由国防科大与湖南新实共同发起的开源项目——FASTFPGA Accelerated Switcing plaTform于2016年创建。截止到目前该开源项目已经服务全国多所高校和科研院所的网络实验建设和科研项目。
针对近年来关于工业控制网络创新技术、创新网络结构、时间敏感网络、SDN网络、FPGA硬件加速技术及下一代网络技术的研究需求由国防科大与湖南新实共同发起的开源项目——FASTFPGA Accelerated Switcing plaTform于2016年创建。截止到目前该开源项目已经服务全国多所高校和科研院所的网络教学实验建设和科研项目。
FAST平台的架构是一种通用多核CPU加FPGA形态的网络处理架构该平台架构主要由硬件逻辑和软件逻辑两部分组成实现软硬件耦合通信与支持软硬件可编程的网络创新实验系统。其中硬件包括平台相关的数据IO和FAST硬件逻辑。软件部分包括通用操作系统与FAST软件逻辑。FAST软件逻辑包括软件开发环境和UA程序。该平台不仅支持FAST的UA编程开发同时也支持通用APP的开发与运行。
\subsection{设备简介}
OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号产品该产品基于多核CPU加FPGA异构模型的FAST处理架构实现软件在CPU上使用C语言编程硬件在FPGA芯片上使用Verilog语言编程。全系统根据FAST架构搭建其软硬件基础运行环境内部软硬件用户逻辑支持所有FAST架构开发的应用、标准的网络协议栈与通用网络应用。平台软硬件逻辑代码开源免费支持用户二次开发。
FAST开源项目的诞生与发展深受斯坦福大学Nick Mckeown教授在NetFPGA项目、OpenFlow项目和P4等项目的影响其目标是为计算机网络的科研与教学提供一个开源和开放的软硬件全功能可编程交换平台。其主要特点如下
\begin{enumerate}
\item \textbf{FPGA}FAST实现的核心载体是可编程FPGA是用Verilog语言编程实现的硬件功能。FPGA的现场可编程特性为实现用户创新的网络架构、算法、实现机制提供了极大的灵活性而且可以获得较高的性能支持在实际网络中部署运行
\subsection{设备上电检测}
用户拿到设备后,首先做个简单的上电测试,以确保硬件平台可以正常工作。
\item \textbf{Accelerated}PGA实现的不是网络处理的全部功能而是部分需要硬件加速的分组处理功能。FAST的核心是一套软硬件协同的分组处理模型用户可以通过Verilog编程实现的硬件功能的加速也可以在现有的FAST硬件平台的CPU上编程实现特定的分组处理功能
\subsubsection{设备外部接口及其配件说明}
\begin{enumerate}
\item 设备外观与接口,正面如下图所示:
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f01}
\caption{正面外部接口}
\label{fig:a:ob_f01}
\end{figure}
\item 设备外观与接口,背面如下图所示:
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f02}
\caption{背面外部接口}
\label{fig:a:ob_f02}
\end{figure}
\item 12V-1A电源线如下图所示
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f03}
\caption{设备电源线}
\label{fig:a:ob_f03}
\end{figure}
\item 串口线,如下图所示:
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f04}
\caption{设备串口线}
\label{fig:a:ob_f04}
\end{figure}
\item 设备烧录线,如下图所示:
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f05}
\caption{设备烧录线}
\label{fig:a:ob_f05}
\end{figure}
\item \textbf{Switching}AST面向的领域是网络交换领域支持各种新型交换技术如软件定义网络SDN、时间敏感网络TSN、网络安全一体化网络甚至是智能网卡的实现研究而不是支持以人工智能AI为代表的应用加速
\item \textbf{plaTform}与目前其他开源项目一样FAST提供的是一个硬件平台无关的支持用户通过软硬件编程实现其特定分组处理功能的环境。FAST通过提供标准的规范、开源的平台软硬件实现代码和demo应用支持用户基于平台进行创新的应用开发和设备原型的快速实现。
\end{enumerate}
\subsubsection{检测准备}
\subsection{FAST架构}
FAST平台的架构是一种通用多核CPU加FPGA形态的网络处理架构。通常对处理性能要求较高的分组处理功能由FPGA实现对处理性能要求较低实现复杂的功能可由CPU实现。用户既可通过扩展FPGA硬件流水线功能也可以通过CPU上编程实现对分组交换功能的扩充。该平台架构主要由硬件逻辑和软件逻辑两部分组成实现软硬件耦合通信与支持软硬件可编程的网络创新实验系统。其中硬件包括平台相关的数据IO和FAST硬件逻辑。软件部分包括通用操作系统与FAST软件逻辑。FAST软件逻辑包括软件开发环境和UA程序。该平台不仅支持FAST的UA编程开发同时也支持通用Socket APP的开发与运行。
FAST交换平台的实现不依赖特定的CPU与FPGA型号但为了更好地提供交换功能扩充能力保证软硬件协同分组处理的基本性能FAST的交换平台必须具有如下两个特点
\begin{enumerate}
\item 物品准备
\begin{table}[!htp]
\small
\centering
\caption{所需物品列表}
\label{tab:a:openbox_items}
\begin{tabular}{|c|c|} \hline
\heiti 测试项 & \heiti 所需物品 \\ \hline
上电检测 & 一台设备及电源\\ \hline
串口检测 & 一台设备及电源、一台电脑、一个micro usb 串口线\\ \hline
管理网口MGMT & 一台设备及电源、一台电脑、一个网线\\ \hline
\end{tabular}
\end{table}
\item \textbf{所有网络接口均与FPGA相连}
进入交换平台的分组首先送FPGA处理离开交换平台的分组最后由FPGA发出。这样有两个优点。一是交换平台可精确获取分组接收时间以及控制发送时间实现类似1588透明时钟的控制支持时间敏感交换二是平台可以支持各种新型的分组格式支持内容中心网络ICN等非IP交换。
\item \textbf{FPGA通过高带宽总线与CPU连接。}
与传统交换芯片通过低带宽的SPI总线、以太网或是单Lane的PCIE总线与控制CPU连接不同FAST平台中FPGA通过高带宽的总线与CPU连接提升软硬件协同分组处理的性能支持通过CPU软件对数据平面处理功能进行扩展。
\end{enumerate}
\subsubsection{上电检测}
\begin{enumerate}
\item 连接电源将电源开关拨到ON向右
\item 观察电源指示灯变化情况;
\item 电源开关拨到ON向右CFG电源指示灯会亮一下
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f06}
\caption{电源指示灯(刚接入电源)}
\label{fig:a:ob_f06}
\end{figure}
\item CFG电源指示灯过几秒后就灭了
\begin{figure}[!htp]
FAST交换平台的实现架构如图\ref{fig:a:ob_FAST-Ac}所示。
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f07}
\caption{电源指示灯(系统配置)}
\label{fig:a:ob_f07}
\includegraphics[width=11cm]{FAST-Ac}
\caption{FAST平台实现架构图}
\label{fig:a:ob_FAST-Ac}
\end{figure}
\item 等待15秒左右RUN电源指示灯常亮
平台硬件逻辑分为两部分一部分是平台相关的外围接口和与平台CPU互联的高速总线接口逻辑统称为FPGA OS。其主要实现平台相关,交换功能无关的分组处理如网络接口的接收与发送、CPU的DMA引擎以及FPGA片外或片内实现的TCAM查表功能等另一部分是用户模块逻辑UM其主要实现交换相关的网络功能每一个小的流水线模块称为硬件应用HA如分组解析、关键字提取、转发查表、动作执行和输出控制等。用户可在UM模块中扩展HA流水线实现不同的分组处理功能。
\begin{figure}[!htp]
平台软件逻辑分为三部分一是平台相关驱动由厂商实现其具体平台的硬件数据IO驱动一般包含PCIe驱动、DMA驱动和以太网驱动二是FAST分组分派模块主要实现内核应用模块、协议栈模块和用户应用UA和底层驱动的数据分派功能三是FAST分组应用主要包括在通过标准内核协议栈支持的通用SOCKET应用CA、内核编程开发的内核应用KA和基于FAST快速IO编程开发的用户应用。
FAST平台的分组处理功能分布在硬件HA和软件的KA、CA及UA各功能模块之间的转发和连接关系可由模块的ID号与下一组模块ID号关联配置实现分组数据在FAST平台的处理流水线模块排列如图\ref{fig:a:ob_FAST-Pkt-Proc}所示效果。
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f08}
\caption{电源指示灯(系统运行)}
\label{fig:a:ob_f08}
\includegraphics[width=11cm]{FAST-Pkt-Proc}
\caption{FAST分组处理流水线排列图}
\label{fig:a:ob_FAST-Pkt-Proc}
\end{figure}
\end{enumerate}
\subsubsection{串口检测}
\subsection{平台应用}
由于FAST平台架构的特征其应用开发可以是软件开发、硬件开发或软硬件结合开发具体根据平台应用场景和用户具体需求而定。
FAST项目自创立至今已经在传统网络应用、工业互联网和创新网络架构设计等方面得到了广泛应用。通过在不同领域的应用积累了大量网络教学实验案例如网络协议分析与编程、协议攻击与防护、路由器系统设计与实现、SDN交换机设计与实现、网络高精度测量、时间敏感网络设计与实现、高性能网络IO和网络应用的硬件卸载加速等。
\subsection{平台使用}
FAST是一个与平台无关的开源架构根据FAST原理和规范实现的CPUFPGA异构网络设备形态都属于FAST平台。FAST平台的CPU支持国产与非国产多种型号FPGA也可以支持国产和非国产的多种型号。下面以下湖南新实的一款专业网络实验教学设备型号OpenBox-S4为例说明如何使用FAST平台。
\subsubsection{搭建环境}
使用FAST平台开发和验证网络功能需要搭建FAST环境。FAST环境包括以下三个部分
\begin{enumerate}
\item 确保micro usb串口线连接到设备上并且设备已上电
\item 确保调试电脑已安装了PUTTY串口终端工具PUTTY软件包以及详细安装教程请自行搜索
\item 确保调试电脑已安装了CP2102驱动CP2102驱动包以及详细安装教程请自行搜索
\item 电脑的设备管理器查看设备的COM口数值。如下图设备的COM口数值为COM3不同的电脑显示的COM口数值会不同
\item \textbf{用户操作设备:}一般是一台标准的电脑可以是台式机或笔记本除了基本操作IO设备外电脑还要求至少拥有一个网口或一个USB口。该设备供用户编辑和编译软硬件逻辑代码通过网口或串口上传和下载逻辑程序和运行结果
\item \textbf{FAST平台设备}一台符合FAST规范的可编程网络开发平台。平台支持FAST开源示例应用可供用户基于平台进行软硬件逻辑功能的二次开发。平台至少提供一个串口和一个管理网口用于支持用户网络远程或本地串口线登录平台进行操作
\item \textbf{网络测试主机:}测试主机一般为支持网络功能的主机或嵌入式小型设备,如笔记本或树莓派。根据实验内容的不同,需要的网络测试主机数量及主机网络配置各不相同,具体参考相应的实验案例内容要求。
\end{enumerate}
\subsubsection{FAST平台设备}
OpenBox-S4设备是一款严格遵照FAST原理与架构设计的通用多核CPUFPGA的软硬件全功能可编程网络开发平台。适合本科和研究生的计算机网络教学和新型网络交换机制的验证。
该设备采用Zynq-7000 SOC芯片内嵌双核Cortex-A9 处理器512MB DDR3内存支持4个千兆以太网数据接口1个千兆管理以太网接口和一个管理串口。设备外观与接口说明如图\ref{fig:a:ob_f01}和图\ref{fig:a:ob_f02}所示:
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f01}
\caption{OpenBox-S4设备前端图}
\label{fig:a:ob_f01}
\end{figure}
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f09}
\caption{查看设备的COM口数值}
\label{fig:a:ob_f09}
\includegraphics[width=11cm]{f02}
\caption{OpenBox-S4设备后端图}
\label{fig:a:ob_f02}
\end{figure}
\item 打开PUTTY工具界面
在实验过程中,测试主机设备通常连接在设备的数据接口位置,用户操作管理设备时通过管理网口或串口连接。
\subsubsection{登录设备平台}
\begin{enumerate}
\item 串口方式
\begin{enumerate}
\item 连接串口线;
设备使用标准USB口和Micro USB接口的线作为串口连接线标准USB口连接在用户操作设备上Mirco USB接口与设备对应串口连接。
\item 打开并配置串口工具。
\item 先点击右边Connection type位置的serial选项
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f10}
\caption{putty软件界面}
\label{fig:a:ob_f10}
\end{figure}
\item 点击左边category栏的 serial标签
\item 在Serial line to connect to 栏填写设备管理器中看到的COM数值
\item 在Speed栏填写串口的波特率为115200
\item 在 Data bits栏。填写数据位宽为8
\item 在Flow control栏选择None。
\item 如下所示调试电脑的COM数值为COM3所以serial line栏填写为COM3。
不同电脑的COM数值可能不同请填写实际的COM数值
\begin{figure}[!htp]
在用户操作设备上打开串口工具配置好相应串口参数后打开串口即可通过串口管理设备。以putty为例其配置参数如图\ref{fig:a:ob_f11}所示:
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f11}
\caption{putty软件串口配置参数}
\caption{串口工具参数配置图}
\label{fig:a:ob_f11}
\end{figure}
\end{enumerate}
\item 点击 open 进入设备系统则串口测试OK。
\end{enumerate}
\subsubsection{管理网口检测}
\item 管理网口方式
\begin{enumerate}
\item 使用一根网线,将调试电脑与设备的管理网口连接;
\item 设备管理网口的默认ip地址为192.168.50.5所以需要将调试电脑的ip地址设置成与设备管理网口的ip地址在同一个网段下也就是192.168.50.0网段);
\item 在调试电脑的 控制面板->网络和Internet->网络设备中。点击以太网->属性->internet协议版本4TCP/IPV4进行ip地址的配置。如下所示:
\item 连接网线;
使用一根RJ45端口的网线分别连接在用户操作主机端与设备的管理网口MGMT网口出现指示灯闪烁说明连接正常。
\item 配置主机端IP信息。
\begin{figure}[!htp]
通过网连接连接设备必须确保用户操作主机与设备管理网口在相同的网段如不记得管理网口的IP可以通过串口方式查看。设备默认网段为192.168.50.0网段故用户操作主机的IP地址配置信息参考如图\ref{fig:a:ob_f12}所示:
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f12}
\caption{配置以太网的IP地址}
\caption{网口连接的主机IP配置图}
\label{fig:a:ob_f12}
\end{figure}
\item 在调试电脑的 控制面板>系统和安全>Windows Defender 防火墙>自定义设置中。关闭调试电脑的防火墙功能;
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f13}
\caption{关闭防火墙功能}
\label{fig:a:ob_f13}
\end{figure}
\item 在调试电脑的CMD终端下使用ping命令能正常与管理网口通讯则说明管理网络工作正常。
\begin{figure}[!htp]
\centering
\includegraphics[width=11cm]{f14}
\caption{ping命令测试网络连通性}
\label{fig:a:ob_f14}
\end{figure}
\end{enumerate}
\subsection{搭建环境}
\end{enumerate}
\subsubsection{测试二层交换功能}
\begin{enumerate}
\item 搭建二层交换拓扑
\begin{figure}[!htp]
二层交换实验的两台测试主机可以随意连接到设备的数据接口位置网口0到网口4均可。测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f15}所示:
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f15}
\caption{二层交换连接拓扑示意图}
\label{fig:a:ob_f15}
\end{figure}
其中主机A的IP地址设置为192.168.1.111主机B的IP地址设置为192.168.1.119。
\item 在OpenBox-S4上运行二层交换程序
 在串口登录界面或网络登录界面输入命令l2switch如下图所示:
 用串口或网线连接用户操作主机与设备通过串口登录界面或网络登录界面控制设备在界面终端输入命令l2switch如图\ref{fig:a:ob_f16}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f16}
\caption{二层交换命令启动输出图}
@ -217,9 +148,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号
\item 在PC两端进行PING测试
在主机B的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.1.111 即可测试两台主机之间的联通性。测试结果如所示:
在主机B的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.1.111 即可测试两台主机之间的联通性。测试结果如\ref{fig:a:ob_f17}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f17}
\caption{二端主机PING通结果图二层交换}
@ -233,19 +164,20 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号
\begin{enumerate}
\item 搭建三层路由拓扑
\begin{figure}[!htp]
三层路由实验的两台测试主机要根据主机端IP地址配置和网关配置分别连接到主机对应网关的接口上。连错线会导致实现失败。测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f18}所示:
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f18}
\caption{三层路由拓扑}
\label{fig:a:ob_f18}
\end{figure}
其中主机A的IP地址设置为192.168.0.111主机B的IP地址设置为192.168.2.119。
\item OpenBox-S4上运行三层路由程序
 在串口登录界面或网络登录界面输入命令l3router如下图所示:
 用串口或网线连接用户操作主机与设备通过串口登录界面或网络登录界面控制设备在界面终端输入命令l3router如图\ref{fig:a:ob_f19}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f19}
\caption{运行三层路由程序}
@ -254,9 +186,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号
\item 在PC两端进行PING测试
在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试跨路由功能。测试结果如所示:
在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试跨路由功能。测试结果如\ref{fig:a:ob_f20}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f20}
\caption{端主机PING通结果图三层路由}
@ -270,30 +202,31 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号
\begin{enumerate}
\item 搭建SDN交换拓扑
\begin{figure}[!htp]
SDN交换实验的两台测试主机可以随意连接到设备的数据接口位置网口0到网口4均可SDN控制器主机的网线一定要连接在设备的管理网口MGMT。控制器主机和测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f21}所示:
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f21}
\caption{SDN交换拓扑}
\label{fig:a:ob_f21}
\end{figure}
其中主机A的IP地址设置为192.168.2.111主机B的IP地址设置为192.168.2.119。
\item 在192.168.1.3的主机中启动SDN控制器
\item 在SDN控制器主机中启动SDN控制器
 在终端命令行下输入 java jar target/floodlight.jar即启动floodlight控制器。如所示:
 在终端命令行下输入 java jar target/floodlight.jar即启动floodlight控制器。如\ref{fig:a:ob_f22}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f22}
\caption{启动floodlight控制器}
\label{fig:a:ob_f22}
\end{figure}
\item可编程网络平台上运行SDN交换程序
\item设备平台上运行SDN交换程序
 在串口登录界面或网络登录界面输入命令xofp -4 192.168.1.3 i obx0,obx1,obx2,obx3 连接Floodlight控制器。如所示:
 在串口登录界面或网络登录界面输入命令xofp -4 192.168.1.3 i obx0,obx1,obx2,obx3 连接Floodlight控制器。如\ref{fig:a:ob_f23}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f23}
\caption{运行SDN交换程序}
@ -302,9 +235,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号
\item 访问floodlight控制器首页
 在控制器主机打开浏览器在浏览器地址栏输入127.0.0.1:8080/ui/index.html 访问floodlight控制器首页。界面如所示:
 在控制器主机打开浏览器在浏览器地址栏输入127.0.0.1:8080/ui/index.html 访问floodlight控制器首页。界面如\ref{fig:a:ob_f24}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f24}
\caption{访问floodlight控制器首页}
@ -313,9 +246,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号
\item 在PC两端进行PING测试
在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试两台主机之间的联通性。测试结果如所示:
在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试两台主机之间的联通性。测试结果如\ref{fig:a:ob_f25}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f25}
\caption{端主机PING通结果图SDN交换}
@ -324,5 +257,12 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号
\end{enumerate}
\subsection{FAST开源社区}
由于FAST架构设计的独特优势用户无需关心平台的分组网络IO、存储和加速方法只专注于创新架构的设计和核心技术研究极大的加快网络创新技术的落地与应用。来自全国的近100家的高校、科研院所和设备厂商单位都加入的FAST开源社区。FAST开源社区致力于网络领域的基础网络技术分析与实现热门网络技术跟踪研究与原型实现和未来网络技术探索与研究。更多的网络前沿技术及FAST的实现方法以及FAST的编程开发方法请关注FAST社区公众号及相关服务网站。
\begin{figure}[H]
\centering
\includegraphics[width=5cm]{fast-w}
\caption{FAST公众号}
\label{fig:a:ob_fast-w}
\end{figure}
FAST官网http://www.fastswitch.org

@ -5,7 +5,6 @@
本单元实验使学生能初步使用可编程网络设备开发平台进行路由器基本功能的设计与实现,通过程序来实现路由器中最基本的三个功能:包括二层交换功能、三层路由功能及组网功能。深入理解路由器的基本工作原理与分组处理流程,从而培养学生对网络设备使用和研发的能力。
可编程网络设备开发平台是一款基于FAST架构的软硬件软件在CPU上使用C语言编程硬件在FPGA芯片上使用Verilog语言编程全可编程的网络实验教学平台平台的软硬件逻辑代码开源免费支持用户二次开发。其基本使用方法与编程开发方法见附录\ref{app:openbox}:《可编程网络平台-操作手册》
和附录\ref{app:fast}《FAST编程入门指南》。
可编程网络设备开发平台的具体设备型号为OpenBox-S4在案例文档中简称为“可编程网络平台”在实验图中的图标LOGO为FAST节点名称为OpenBox-S4。
可编程网络设备开发平台是一款基于FAST架构的软硬件软件在CPU上使用C语言编程硬件在FPGA芯片上使用Verilog语言编程全可编程的网络实验教学平台平台的软硬件逻辑代码开源免费支持用户二次开发。其基本使用方法见附录\ref{app:openbox}《FAST平台介绍与操作说明手册》。
基于FAST架构的可编程网络设备开发平台的具体设备型号为OpenBox-S4在案例文档中简称为“可编程网络平台”在实验图中的图标LOGO为FAST节点名称为OpenBox-S4。

@ -64,8 +64,9 @@
\end{code}
\item Quagga启动配置
\begin{code}[console]
root@HNXS-FAST:/home/hnxs# vim /etc/quagga/daemons
修改Quagga的启动模块配置文件/etc/quagga/daemons主要内容如下
\begin{code}[text]
zebra=yes
bgpd=no
ospfd= yes
@ -79,93 +80,43 @@
将上述文件内容中的3个no修改为yes表示启动该功能模块。
\item RIP协议启动配置
\begin{code}[console]
root@HNXS:/home/hnxs# vim /etc/quagga/ripd.conf
\end{code}
ripd.conf配置文件示例如下
修改RIP协议模块配置文件/etc/quagga/ripd.conf在空行处添加网段信息与邻居信息。原文件其他所有内容均无需修改。ripd.conf添加内容如下
\begin{code}[text]
! -*- rip -*-
!
! RIPd sample configuration file
!
! $Id: ripd.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
!
hostname ripd
password zebra
!
! debug rip events
! debug rip packet
!
router rip
! network 11.0.0.0/8
! network eth0
! route 10.0.0.0/8
! distribute-list private-only in eth0
network obx0
network obx1
network obx2
network obx3
neighbor 192.168.3.1
!
!access-list private-only permit 10.0.0.0/8
!access-list private-only deny any
!
!log file /var/log/quagga/ripd.log
!
log stdout
\end{code}
上述文件是S4-A路由器的rip配置文件另一台配置文件与上述基本相同只是其neighbor的地址是192.168.3.2。这两台路由器是通过S4-A的一个端口IP为192.168.3.1故其neighbor为192.168.3.2和S4-B的一个端口IP为192.168.3.2)连接。
\item OSPF协议启动配置
\begin{code}[console]
root@HNXS:/home/hnxs# vim /etc/quagga/ospfd.conf
\end{code}
ospfd.conf配置文件示例如下
修改OSPF协议模块配置文件/etc/quagga/ospfd.conf添加网段与ID信息。原文件其他所有内容均无需修改。ospfd.conf添加内容如下
\begin{code}[text]
! -*- ospf -*-
!
! OSPFd sample configuration file
!
!
hostname ospfd
password zebra
!enable password please-set-at-here
!
!router ospf
! network 192.168.1.0/24 area 0
!
ospf router-id 192.168.3.1
network 192.168.0.0/24 area 0
network 192.168.1.0/24 area 0
network 192.168.2.0/24 area 0
network 192.168.3.0/24 area 0
log stdout
\end{code}
上述为S4-A路由器的配置文件另一台路由器配置文件
上述为S4-A路由器的配置文件另一台路由器配置文件添加内容如下
\begin{code}[text]
! -*- ospf -*-
!
! OSPFd sample configuration file
!
!
hostname ospfd
password zebra
!enable password please-set-at-here
!
!router ospf
! network 192.168.1.0/24 area 0
!
ospf router-id 192.168.3.2
network 192.168.4.0/24 area 0
network 192.168.5.0/24 area 0
network 192.168.6.0/24 area 0
network 192.168.3.0/24 area 0
log stdout
\end{code}
\end{itemize}
@ -182,6 +133,8 @@
\begin{code}[console]
root@HNXS-FAST:/mnt/openbox# route -n
\end{code}
\begin{code}[text]
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 obx0

@ -24,7 +24,7 @@
\subsubsection{系统路由验证}
请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。
请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。
\subsubsection{三层路由器工作原理}
三层路由器工作于OSI模型的第3层网络层根据网络层中的目的IP地址进行查表获得分组转发的下一跳输出端口及下一跳的IP地址。更新IP层的ttl值与checksum值并在输出端口对二层数据进行重新封装二层数据后转发。路由器还具备ARP响应与请求功能支持响应请求自己IP的MAC信息与请求路由下一跳IP的MAC信息。
@ -64,11 +64,12 @@
\subsubsection{系统路由验证}
\begin{enumerate}
\item 登录可编程网络平台,启动系统自带三层路由器命令,系统输出如下信息说明已正常启动且进入工作模式。
\item 登录可编程网络平台,启动系统自带三层路由器命令,系统输出如下信息说明已正常启动且进入工作模式,已省略部分模块输出信息
\begin{code}[console]
root@HNXS-FAST:/mnt/openbox# l3router
部分模块输出信息省略…
\end{code}
\begin{code}[text]
fastU->REG Version:20180827,OpenBox HW Version:2030200722
FAST UA REG->from pid:907,state:21,mid:132
fastU->Register UA to FAST Kernel! Wait Reply......

@ -24,7 +24,7 @@
\subsubsection{平台基本使用}
请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。
请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。
\subsubsection{二层交换工作原理}
@ -66,10 +66,12 @@
\subsubsection{平台搭建与系统交换验证}
\begin{enumerate}
\item 请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成;
\item 请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成;
\item 在串口登录界面输入如下命令,启动系统自带二层交换机命令。系统输出如下信息说明已正常启动且进入工作模式。
\begin{code}[console]
root@HNXS-FAST:/mnt/openbox# l2switch
\end{code}
\begin{code}[text]
fastU->REG Version:20180827,OpenBox HW Version:2030200722
FAST UA REG->from pid:902,state:21,mid:129
fastU->Register UA to FAST Kernel! Wait Reply......
@ -127,7 +129,7 @@
\begin{enumerate}
\item 运行自己的二层交换机程序,验证交换机的功能;
\begin{code}[console]
\begin{code}[text]
root@HNXS-FAST:/home/hnxs/l2switch# ./user_l2switch
fastU->REG Version:20180827,OpenBox HW Version:2030200722
FAST UA REG->from pid:902,state:21,mid:129
@ -137,12 +139,12 @@
Create nm08_mac_aging thread OK!
aging[0]->invalid mac:0
fastU->fast_ua_recv......
后面打印以学生代码为准……
// 后面打印以学生代码为准……
\end{code}
运行当前目录下用户的可执行文件,必须在前面加上”./”
\item 二层交换机正常工作后,显示如下信息;
\begin{code}[console]
\begin{code}[text]
root@HNXS-FAST:/mnt/openbox# l2switch
fastU->REG Version:20180827,OpenBox HW Version:2030200722
FAST UA REG->from pid:902,state:21,mid:129

@ -92,6 +92,8 @@
\item 测试测量平台与被测量主机间的连接性,在测量平台\texttt{ping 192.168.1.111}
\begin{code}[console]
root@HNXS-FAST:/home/hnxs/ams# ping 192.168.1.111
\end{code}
\begin{code}[text]
PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data.
64 bytes from 192.168.1.111: icmp_seq=1 ttl=64 time=1.57 ms
64 bytes from 192.168.1.111: icmp_seq=2 ttl=64 time=1.60 ms
@ -105,6 +107,8 @@
\item 运行AMS测量命令测量服务器RTT的命令如下
\begin{code}[console]
root@HNXS-FAST:/home/hnxs/ams# ams 192.168.1.111 5 70 1000000000
\end{code}
\begin{code}[text]
fastU->REG Version:20180827,OpenBox HW Version:2030200722
FAST UA REG->from pid:1068,state:21,mid:131
fastU->Register UA to FAST Kernel! Wait Reply......
@ -129,6 +133,8 @@
\item 测试两个测量平台之间的实时网络带宽;
\begin{code}[console]
root@HNXS-FAST:/home/hnxs/ams# ams 192.168.1.111 5 100 0
\end{code}
\begin{code}[text]
fastU->REG Version:20180827,OpenBox HW Version:2030200722
FAST UA REG->from pid:1068,state:21,mid:131
fastU->Register UA to FAST Kernel! Wait Reply......
@ -141,7 +147,6 @@
测试之前要在此链路中间增加一个背景流使用iperf的UDP流大小为600Mbps
系统给测试主机发送5个100字节大小的ping报文出去默认间隔为1秒。
\item 观察带宽测试结果;
\begin{code}[text]
AMS ID PKT_SIZE BW(bps)
@ -155,6 +160,8 @@
\item 测量网线传输延时;
\begin{code}[console]
root@HNXS-FAST:/home/hnxs/ams# ams
\end{code}
\begin{code}[text]
fastU->REG Version:20180827,OpenBox HW Version:2030200722
FAST UA REG->from pid:1068,state:21,mid:131
fastU->Register UA to FAST Kernel! Wait Reply......

@ -53,8 +53,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
并发送OFP\_HELLO消息用以确认双方都支持的OFP协议版本信息
\item \textbf{查询或设置数据:}
控制器通过OpenFlow的具体消息协议查询或设置交换机其他相关功能的数据
如OFPT\_HELLO、OFPT\_ECHO\_REQUEST、OFPT\_PACKET\_IN、OFPT\_PACKET\_OUT、
OFPT\_FLOW\_MOD、OFPT\_PORT\_MOD、OFPMP\_DESC、OFPMP\_FLOW、OFPMP\_PORT\_STATS等
如OFPT\_HELLO、OFPT\_ECHO\_REQUEST、OFPT\_PACKET\_IN、OFPMP\_DESC、OFPT\_PACKET\_OUT、OFPT\_FLOW\_MOD、OFPT\_PORT\_MOD、OFPMP\_FLOW、OFPMP\_PORT\_STATS等
\item \textbf{处理转发分组:}当交换机接收到一个数据转发分组时,
提取分组数据中的相关字段组成查表关键字,然后在本地进行流表匹配。
如果匹配成功,则根据流表的动作处理该分组,如从其他端口转发出去;
@ -78,8 +77,8 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\begin{itemize}
\item 可编程网络平台一个,测试主机两台,
SDN控制器安装SDN控制器软件Floodlight一台。
网络配置及连接拓扑如图\ref{fig:c:sdn-ob_sdn-topo}所示;
SDN控制器安装SDN控制器软件Floodlight一台。控制器主机没有两个网口时,中间加一个普通交换机;
\item 测试主机与控制器主机的网络配置及连接拓扑如图\ref{fig:c:sdn-ob_sdn-topo}所示;
\item 串口线一根,网线三根;
\item SDN交换机框架开发源代码、流表配置Python脚本。
\end{itemize}
@ -96,7 +95,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\subsubsection{编译运行SDN交换机验证交换机基本功能}
请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。
请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。
\subsubsection{基于SDN交换机源码选择实现自己的协议功能}
@ -107,7 +106,6 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
{
int oftype = ofpbuf->header.type;
SHOW_FUN(0);
LOG_DBG("ofpbuf->header.type=%d\n",ofpbuf->header.type);
switch(oftype)
{
@ -141,6 +139,8 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\item 运行SDN交换机交换机正常工作后输出如下
\begin{code}[console]
root@HNXS-FAST:/home/hnxs/sdn# ./ user_openflow -4 192.168.1.3 -i obx0,obx1,obx2,obx3
\end{code}
\begin{code}[text]
fastU->REG Version:20180827,OpenBox HW Version:2030200722
port_name:eth0,port:0
port_name:obx0,port:0
@ -163,7 +163,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\end{code}
\item 查看控制器界面基本信息在浏览器打开控制器WEB网站http://192.168.1.3/ui/index.html控制界面如图\ref{fig:c:sdn-ob_sdn-main}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{sdn-main}
\caption{SDN主界面信息}
@ -171,7 +171,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\end{figure}
\item 查看连接交换机信息,如图\ref{fig:c:sdn-ob_sdn-switch}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{sdn-switch}
\caption{SDN交换机信息}
@ -179,7 +179,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\end{figure}
\item 查看连接测试主机信息SDN主机及连接信息如图\ref{fig:c:sdn-ob_sdn-host}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{sdn-host}
\caption{SDN主机信息}
@ -187,7 +187,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\end{figure}
\item 查看端口状态与计数信息与流表信息,端口与流表信息如图\ref{fig:c:sdn-ob_port-flowtable}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{port-flowtable}
\caption{端口状态与流表计数信息}
@ -195,7 +195,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\end{figure}
\item 查看网络拓扑信息,网络拓扑信息如图\ref{fig:c:sdn-ob_sdn-test-topo}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{sdn-test-topo}
\caption{SDN网络拓扑信息}
@ -206,7 +206,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\subsubsection{在测试主机ping的前后分别观察流表变化}
\begin{enumerate}
\item ping之前的流表信息为空如图\ref{fig:c:sdn-ob_empty-flowtable}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{empty-flowtable}
\caption{空流表信息}
@ -214,7 +214,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\end{figure}
\item ping之后的流表信息如图\ref{fig:c:sdn-ob_flowtable-ping}所示:
\begin{figure}[!htp]
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{flowtable-ping}
\caption{ping通后流表信息}
@ -227,8 +227,10 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\subsubsection{使用REST API接口查询交换机的相关功能数据}
\begin{enumerate}
\item 查询交换机基本信息
使用curl命令和对应的REST API地址查询交换机的对应信息。在命令行终端输入如下命令即可查询返回交换机的基本信息数据内容。
\begin{code}[console]
# curl http://192.168.1.3:8080/wm/core/switch/00:00:00:0a:00:00:08:01/desc/json
# curl http://192.168.1.3:8080/wm/core/switch/all/desc/json
\end{code}
\begin{code}[json]
{
@ -244,9 +246,9 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
\end{code}
\item 查询端口计数信息
\begin{code}[console]
# curl http://192.168.1.3:8080/wm/core/switch/00:00:00:0a:00:00:08:01/port/json
# curl http://192.168.1.3:8080/wm/core/switch/all/port/json
\end{code}
\begin{code}[javascript]
\begin{code}[json]
{
"port_reply": [{
"version": "OF_13",
@ -267,41 +269,20 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
"duration_sec": "4294966827",
"duration_nsec": "573987"
},
// 此处省略其他多个类似端口的统计信息
]
}]
}
}
\end{code}
端口计数统计信息返回的内容中只摘取显示了一个端口的数据显示,其他端口数据内容已经省略。
\item 查询交换机流表信息
\begin{code}[console]
# curl http://192.168.1.3:8080/wm/core/switch/00:00:00:0a:00:00:08:01/flow/json
# curl http://192.168.1.3:8080/wm/core/switch/all/flow/json
\end{code}
\begin{code}[javascript]
\begin{code}[json]
{
"flows": [{
"version": "OF_13",
"cookie": "9007199254740992",
"table_id": "0x0",
"packet_count": "5",
"byte_count": "571392",
"duration_sec": "0",
"duration_nsec": "0",
"priority": "1",
"idle_timeout_s": "5",
"hard_timeout_s": "0",
"flags": [],
"match": {
"in_port": "1",
"eth_dst": "b8:27:eb:c1:d1:39",
"eth_src": "b8:27:eb:d8:83:20",
"eth_type": "0x806"
},
"instructions": {
"instruction_apply_actions": {
"actions": "output=3"
}
}
}, {
"version": "OF_13",
"cookie": "9007199271518208",
"table_id": "0x0",
@ -326,57 +307,21 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
"actions": "output=1"
}
}
},
// 此处省略其他几条流表的信息
},
]
}
\end{code}
交换机流表信息返回的内容中只摘取显示了一条流表的数据显示,其他流表数据内容已经省略。
\end{enumerate}
\subsubsection{修改Python脚本手动配置流表观察测试主机的通信变化}
\begin{enumerate}
\item 修改流表脚本,使其转发端口错误;
\begin{code}[console]
#vim openflow_flow-test.py
\end{code}
\begin{code}[python]
import httplib
import json
class StaticFlowPusher(object):
def __init__(self, server):
self.server = server
def get(self, data):
ret = self.rest_call({}, 'GET')
return json.loads(ret[2])
def set(self, data):
ret = self.rest_call(data, 'POST')
return ret[0] == 200
def remove(self, objtype, data):
ret = self.rest_call(data, 'DELETE')
return ret[0] == 200
def rest_call(self, data, action):
path = '/wm/staticflowpusher/json'
headers = {
'Content-type': 'application/json',
'Accept': 'application/json',
}
body = json.dumps(data)
conn = httplib.HTTPConnection(self.server, 8080)
conn.request(action, path, body, headers)
response = conn.getresponse()
ret = (response.status, response.reason, response.read())
print ret
conn.close()
return ret
pusher = StaticFlowPusher('192.168.1.3')
修改openflow\_flow-test.py主要修改其流表定义内容其他位置代码无需修改。流表定义内容如下
\begin{code}[python]
flowbe0 = {
'switch':"00:00:00:0a:00:00:08:01",
"table":"0",
@ -406,10 +351,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层
"ipv4_src":"192.168.2.119", #sip
"ipv4_dst":"192.168.2.111", #dip
"actions":"output=2" #执行动作输出端口为2
}
pusher.set(flowbe0)
pusher.set(flowbe1)
}
\end{code}
\item 重启SDN控制器并停止测试主机的ping操作
\item 配置用户流表,脚本执行命令如下:

@ -71,7 +71,7 @@ SDN交换机使用LLDP链路探测协议主要是通过PACKET\_OUT消息发送LL
\item SDN交换机框架源码。
\end{itemize}
\begin{figure}[!ht]
\begin{figure}[H]
\centering
\includegraphics[width=10cm]{openflow-topo}
\caption{OpenFlow拓扑测量实验拓扑图}
@ -84,7 +84,7 @@ SDN交换机使用LLDP链路探测协议主要是通过PACKET\_OUT消息发送LL
\begin{enumerate}
\item 运行SDN交换机
请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。
请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。
\item 基于SDN交换机开源代码在端口分组接收回调函数中添加相应逻辑
\begin{code}[c]
int port_recv_callback(int inport,struct fast_packet *pkt,int pkt_len)

Loading…
Cancel
Save