You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
p2l5wexnu/data/ch_sdn-openbox/sec_topo.tex

161 lines
8.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

%# -*- coding: utf-8-unix -*-
\section{基于OpenFlow的拓扑测量}
\label{sec:c:sdn-ob:s:topo}
\subsection{实验目的}
\label{subsec:c:sdn-ob:s:topo_object}
本实验的主要目的是让学生了解OpenFlow协议中PACKET\_IN和链路探测协议
LLDP的工作原理和网络拓扑构建方法。
\subsection{实验内容}
\label{subsec:c:sdn-ob:s:topo_content}
使用可编程网络平台及SDN交换机源码分析LLDP的工作原理。
通过PACKET\_IN消息收集网络设备节点信息。
掌握网络拓扑的构建方法。主要完成以下内容:
\begin{enumerate}
\item \textbf{打印连接主机信息:}基于SDN交换机源码在端口分组接收回调函数中添加相关逻辑解析输入分组数据提取设备MAC与IP信息打印显示其内容
\item \textbf{打印接收LLDP消息}基于SDN交换机源码在端口分组接收回调函数中添加相关逻辑解析输入分组数据打印LLDP分组的相关协议字段
\item \textbf{打印发送LLDP消息}基于SDN交换机源码在OpenFlow协议回调函数中添加相关逻辑提取SDN控制器下发的PACKET\_OUT消息且消息封装的分组协议为LLDP格式打印输出LLDP分组中的相关协议字段
\item \textbf{提取控制器链路与设备信息:}
使用REST~API接口获取SDN控制器的网络链路信息和设备连接信息
\item \textbf{构建拓扑图:}以WEB形式展示网络拓扑结构图
\item \textbf{修改网络验证:}改变物理网络拓扑结构后,
重新展示学习到的网络拓扑结构图。
\end{enumerate}
\subsection{实验原理、方法和手段}
\label{subsec:c:sdn-ob:s:topo_principle}
\subsubsection{LLDP工作原理}
LLDP是一个用于信息通告和获取的协议发送的信息通告不需要确认不能发送一个请求来请求获取某些信息也就是说LLDP是一个单向的协议只有主动通告一种工作方式无需确认不能查询、请求。LLDP帧的发送有两种触发方式一是定时器到期触发二是设备状态发生了变化触发。
LLDP协议主要完成的功能包括初始化并维护本地MIB 库中的信息从本地MIB库中提取信息并将信息封装到LLDP帧中识别并处理接收到的LLDPDU帧维护远端设备LLDP MIB 信息库当本地或远端设备MIB信息库中有信息发生变化时发出通告事件。
网络拓扑的测量是通过一些链路探测协议在各交换节点中相互收发来完成的链路的拓扑测量功能。
SDN交换机使用LLDP链路探测协议主要是通过PACKET\_OUT消息发送LLDP分组
通过PACKET\_IN接收LLDP分组通过计算获取交换机之间的连通关系和端口连接关系。
\subsubsection{SDN交换机中LLDP的分组处理流程}
\begin{enumerate}
\item 主动发送LLDP
SDN控制器主动构造特定的LLDP报文含交换机标记与输出端口信息
封装在OpenFlow的PACKET\_OUT方法中从指定的交换机各端口发送出去
\item 接收处理LLDP如果端口连接的是主机则主机会丢弃该报文
若同样是OpenFlow交换机则会通过PACKET\_IN的方式将该LLDP报文转发给控制器
\item LLDP学习控制器收到LLDP报文后
则会学习到这两个交换机之间存在一条连接链路;
\item 网络设备信息学习:主机连接到交换机后,
主机端会主动构造一些广播报文发送到网络上,
这些报文会携带上本机的MAC地址和IP地址等信息。
交换机接收到主机发送报文后,在其交换流表中找不到转发表项,
则会将该报文完整内容和其所输入的端口信息封装在OpenFlow协议的PACKET\_IN方法中
将报文送到SDN控制器控制器接收到该消息后
通过学习对比发现是一台新主机入网则会将该报文中的源MAC地址、
IP地址和接收交换机信息及输入端口信息等均记录在一张网络设备信息数据表中
\item 构建设备连接关系:
交换机之间的链路信息加上交换机与主机之间的链路信息就完整的构成了全网的拓扑连接关系。
\end{enumerate}
\begin{figure}[h!]
\centering
\includegraphics[width=10cm]{openflow-topo}
\caption{OpenFlow拓扑测量实验拓扑图}
\label{fig:c:sdn-ob_openflow-topo}
\end{figure}
\subsection{实验条件}
\label{subsec:c:sdn-ob:s:topo_requirement}
\begin{itemize}
\item 可编程网络平台两个测试主机两台SDN控制器一台。
连接拓扑如图\ref{fig:c:sdn-ob_openflow-topo}所示;
\item 串口线两根,网线五根;
\item SDN交换机框架源码。
\end{itemize}
\subsection{实验步骤}
\label{subsec:c:sdn-ob:s:topo_procedure}
\begin{enumerate}
\item 运行SDN交换机
请参考附录\ref{app:openbox}《FAST平台介绍与操作说明手册》完成。
\item 基于SDN交换机开源代码在端口分组接收回调函数中添加相应逻辑
\begin{code}[c]
int port_recv_callback(int inport,struct fast_packet *pkt,int pkt_len)
{
//解析分组字段提取LLDP分组并打印输出其相关协议字段
//解析分组字段判断帧类型为0x0800源IP为单播地址的分组打印其源MAC地址与IP地址
}
\end{code}
\begin{enumerate}
\item 解析接收数据,判断以太网帧类型,
如果帧类型为0x88CC则说明是LLDP协议分组根据LLDP协议打印相关协议字段内容
\item 解析分组提取输入帧类型为0x0800的分组
打印输出其源MAC地址与源IP地址仅输出IP地址为单播类型的条目
\end{enumerate}
\item 编译SDN交换机验证添加逻辑功能观察是否正确打印需要的消息内容
\item 分析端口接收回调函数中打印的消息内容;
\begin{enumerate}
\item 从LLDP分组中可解析得知对端交换机的某个端口发送到本交换机的某个端口
\item 从普通IPv4报文中可以获得连接到该交换机上的主机节点信息
MAC地址和IPv4地址
\end{enumerate}
\item 验证并观察SDN控制器自带的拓扑展示界面
\begin{enumerate}
\item 在控制器主机打开WEB界面输入地址
\texttt{127.0.0.1/ui/index.html}。查看浏览器界面数据;
\item 切换浏览器的拓扑显示版块,
查看网络拓扑展示效果可以看到两台交换机中间用线连接;
\item 连接上一台测试主机,刷新拓扑界面,
查看到界面新增了一台主机并显示其IP地址信息
\item 再连接上另一台主机,刷新拓扑界面,
查看到界面又新增了一台主机并显示其IP地址信息
\item 断开两台交换机之间的网线,新拓扑界面,
查看两个交换机之间的连线消失;
\item 断开一台测试主机,刷新拓扑界面,查看其对应的主机从界面消失。
\end{enumerate}
\item 使用控制器的北向REST API接口查询网络的所有链路连接关系数据
API接口为\texttt{/wm/topology/links/json}
\item 使用控制器的北向REST API接口查询全网所有设备节点信息
API接口为\texttt{/wm/device/}
\item 自己开发网络拓扑展示效果图;
\item 修改网络拓扑后验证自己开发程序的效果。
\end{enumerate}
\subsection{思考题}
\label{subsec:c:sdn-ob:s:topo_rethink}
\begin{enumerate}
\item 在网络拓扑的探测学习中,主机节点信息通过哪种协议分组学习效果最好?
\item OpenFlow交换机之间用一台普通交换机连接能学习到全网的拓扑结构信息吗
分析原因。
\end{enumerate}
\subsection{注意事项及有关说明}
\label{subsec:c:sdn-ob:s:topo_notice}
\begin{enumerate}
\item SDN控制器的WEB界面有缓存每次物理拓扑更新后要先清理浏览器历史缓存数据再刷新WEB界面。
\end{enumerate}
\subsection{考核方法}
\label{subsec:c:sdn-ob:s:topo_criterion}
完成本次实验,需要提交一份实验报告、一份程序源代码和一份程序输出日志。
\begin{enumerate}
\item 20分在规定时间内完成实验并提交实验成果
\item 20分正确打印输入与输出LLDP消息内容和连接主机信息
\item 20分通过REST API编程获取链路状态信息与设备信息并能生成拓扑关系图
\item 20分以图形界面形式展示拓扑图
\item 10分动态修改物理拓扑后程序可以及时刷新出正确拓扑图状态
\item 10分实验报告与源代码内容完整、格式规范。
\end{enumerate}