## sdn - 初步分析基于OpenFlow的SDN网络控制功能


题目要求:
1、下发流表项实现 h1 和 h2,h2 和 h3 不能互通、h1 和 h3 可互通。
2、结合捕获的 SDN 相关协议(例如 OpenFlow 协议)报文,分析其报文结构, 并简要描述该类报文的作用。(一种即可,限 500 字)
3、说明在相同的网络拓扑中传统分布式网络如何实现要求 1,并分析与 SDN 实 现之间的差别。

### 第一题
#### 分析
题目已经说的很明白了,现在问题是怎么样去实现。
基于我现在所了解的sdn的知识,在sdn网络中,有一个网络拓扑,里面有各种路由器和主机,同时还有控制器连接着路由。在说控制器之前,先说一下路由。
在路由中, 有着流表,其中的作用就是当网络中的包经过路由,路由就会根据流表进行匹配,从而进行对应的操纵。
现在就有问题了,当一个包出现不匹配任何流表,路由应该怎么办呢。
这时,路由器就会找到控制器,控制器会就可以根据情况下发对应的流表,告诉路由器怎么处理。
以上是简单的对sdn的理解,所以要处理这题就是要给路由添加一条流表,把进入h2或从h2出来的包丢弃就好了。
#### 实现
因为内容比较简单,可以不考虑控制器下发流表的做法,直接使用mininet控制台使用ovs命令进行控制。
另外要求的是ping通h2。
ping是应用层直接使用icmp的回送请求与回送回答报文,就意味着,h1 ping h2 时,h1发送请求后,h2要回报给h1。所以只要限制了h2的发送,外界就无法ping通h2,并且h2也无法ping通其他主机了。

#### 代码
##### topo结构如下:

<code>
class MyTopo(Topo):

def __init(self):
Topo.__init__(self)

h1 = self.addHost('h1')
h2 = self.addHost('h2')
h3 = self.addHost('h3')
s1 = self.addSwitch('s1')
s2 = self.addSwitch('s2')

self.addLink(h1, s1)
self.addLink(h2, s1)
self.addLink(h3, s2)
self.addLink(s1, s1)

topos = { 'mytopo' : (lambad:MyTopo() ) }
<code/>

##### 启动mininet

<code>
sudo mn --custom mytopo.py --topo mytopo --mac
<code/>

##### 手动添加流表

<code>
sh ovs-ofctl add-flow s1 priority=12,in_port=2,action=drop
<code/>

##### 上一条作用就是把从口2进入的包给丢弃,并且这条流表的优先级为12
##### 关于流表的一些简单的知识,来源<a href="http://blog.csdn.net/zhongbeida_xue/article/details/54945496">这里</a>
每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分
1.基本字段包括生效时间duration_sec、所属表项table_id、优先级priority、处理的数据包数n_packets,空闲超时时间idle_timeout等,空闲超时时间idle_timeout以秒为单位,超过设置的空闲超时时间后该流规则将被自动删除,空闲超时时间设置为0表示该流规则永不过期,idle_timeout将不包含于ovs-ofctl dump-flows brname的输出中。
2.条件字段包括输入端口号in_port、源目的mac地址dl_src/dl_dst、源目的ip地址nw_src/nw_dst、数据包类型dl_type、网络层协议类型nw_proto等,可以为这些字段的任意组合,但在网络分层结构中底层的字段未给出确定值时上层的字段不允许给确定值,即一条流规则中允许底层协议字段指定为确定值,高层协议字段指定为通配符(不指定即为匹配任何值),而不允许高层协议字段指定为确定值,而底层协议字段却为通配符(不指定即为匹配任何值),否则,ovs-vswitchd 中的流规则将全部丢失,网络无法连接。
3.动作字段包括正常转发normal、定向到某交换机端口output:port、丢弃drop、更改源目的mac地址mod_dl_src/mod_dl_dst等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。

##### 结果

### 第二题

##### 分析具体的openflow1.0协议

#### 1.Hello


##### 控制器与交换机之间的OpenFlow协议是应用于TCP传输层上,所以解析应用层。他们首先发送hello消息,建立初始化连接
##### 1.Version:OpenFlow版本,低位为版本号
##### 2.Type:OpenFlow消息类型
##### 3.Length:消息总长度,包含头部
##### 4.Xid:事件ID,同一件事件的ID号一致。如feature_request和对应的feature_reply就使用同一个Transaction id,但是两个hello消息的Transaction id并不相同,不过据两个id一般是两个相邻的数字。并且packet_in的transaction id都为0。

#### 2.Feature

##### 会话一建立,控制器就会向交换机发送一个ofpt_feature_request消息,该消息只有of包头,如下所示。交换机会回复一条ofpt_feature_reply消息
##### ofpt_feature_request如图:


##### ofpt_feature_replyt如图:


##### 1.datapath_id : 数据通道独一无二的标识符,低48位是一个MAC地址,而高16位是自定义的。例如,用高16位代表VLAN ID区别一个物理交换机中的多个虚拟交换机
##### 2.n_buffers : 一次最多缓存的数据包数量
##### 3.n_tables : 表示交换机支持的流表数量。而每个流表可以设置不同的通配符和不同数量的流表项。控制器和交换机第一次通信的时候,控制器会从feature_reply消息中找出交换机支持多少流表,如果控制器还想了解大小、类型和流表查询的顺序,就发送一个ofpst_table stats请求,交换机必须按照数据包遍历流表的顺序把这些流表回复给控制器,并且精确匹配流表排在通配流表前
##### 4.capabilities : 所支持的功能
##### 5.actions : 该bitmask表示交换机所支持的actions,“required”action必须支持,vendor action不应该通过该bitmask显示,actions根据ofp_action_type的值决定需要左移几位。
##### 6.ports[] : 以数组的形式罗列出该系统中支持OpenFlow的物理端口。数据长度可以根据OpenFlow头部中的length推测出来

#### 3.Packet_in
当交换机碰到新数据包不知道如何处理,或者action要求发送给控制器,那么交换机就会用packet_in消息发送给控制器。一般将数据包缓存在交换机中,将有效的数据包信息(默认的128字节,如果原因是 “send to controller” action,那么长度由action_out的max_len决定;如果是原因table miss,那么长度由set_config消息中的miss_send_len决定。)和缓存id发送给控制器,不过,如果交换机不支持缓存或者内存用光了,那么就把整个数据包放在数据部分发给控制器,并且缓存id为-1

##### packet_in消息如下

##### total_len : 整个数据帧的长度
##### in_port : 接收数据帧的端口
##### reason : 将数据包发送给控制器的原因,一般有俩原因,一是没有匹配到流表项,二是动作要求发给控制器

#### 4.Packet_out

##### Packet_out如图:


当控制器希望交换机发送某个数据包,就使用packet_out消息

#### 参考链接
#### 1.流表相关 - <a href = 'http://www.sdnlab.com/15119.html'>http://www.sdnlab.com/15119.html<a/>
#### 2.openflow协议分析 - <a href = 'http://www.jianshu.com/p/e660508f1c5d'>http://www.jianshu.com/p/e660508f1c5d<a/>

转载于:https://www.cnblogs.com/UNWILL2LOSE/p/6756088.html

Sdn - 基础题试水相关推荐

  1. 2020年7月B组C++蓝桥杯真题试水

    哇!刚刚突然发现我的那篇扩展欧几里得达到了500+的阅读量,开森森~ 看起来努力就是有回报的嘛!用心写的文章和不用心写的文章相信广大程序员萌都一眼看得出来撒~ 快乐!你们的关注和点赞是我最大的动力嗷! ...

  2. C语言基础编程题——喝水问题,译码问题

    C语言基础编程题--喝水问题,译码问题 有这样一道智力题:"某商店规定:三个空汽水瓶可以换一瓶汽水.小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?"答案是5瓶,方法如下:先用9 ...

  3. 211已经毕业工作一年了,腾讯试水一面连环50问,瞬间傻眼了,太难了。

    背景 211毕业至今刚好一年,我曾做过两三个月的测试感觉不是很合适,后面选择从事后端开发,还挺香.现在已经进入秋招的提前批了,想着去大厂试试水,就去了腾讯,整个一面下来我整个人都傻了,表示怀疑人生.. ...

  4. 专访阿里云AI科学家闵万里:AI试水电力调度是道让人兴奋的题目

    "用电之痛"是全国千万用电及售电企业的大难题.业内人士预测,2017年我国电力生产行业资产规模将达到86852亿元.据悉,仅2016年全社会用电量达59198亿千瓦,其中3.5%是 ...

  5. 985毕业工作一年,腾讯试水一面连环50问,瞬间表示怀疑人生了.

    背景 985毕业至今刚好一年,我曾做过两三个月的测试感觉不是很合适,后面选择从事后端开发,还挺香.现在已经进入秋招的提前批了,想着去大厂试试水,就去了腾讯,整个一面下来我整个人都傻了,表示怀疑人生.. ...

  6. 水下自动循迹机器人_水下避碰!国内首艘自主航行系统实验船试水

    智能航运技术创新与综合实验基地演示海上航行无人驾驶新成果 国内首艘自主航行系统实验船"试水" 青岛日报/青岛观/青报网讯 5月16日,国内首艘无人驾驶自主航行系统实验船--&quo ...

  7. 【号外】联手腾讯故宫试水“互联网+”

    朱元璋戴墨镜说Rap.妃子在宫内用VR眼镜玩游戏,这并非某个穿越剧内容,而是故宫和腾讯宣布合作的创意H5,该页面发布后迅速"席卷"朋友圈. 转发这条H5的微信用户中,还包括腾讯董事 ...

  8. 60秒Dapp快讯 | 全球公有链技术评估:以太坊在应用性上排第一;蚂蚁金服区块链试水医疗电子票据

    本文由微信公众号DappVision原创首发,转载请联系授权 [赛迪全球公有链技术评估:以太坊在应用性上排第一] 今日,在区块链赋能实体经济推动计划-"链锁反应IV"发布会上,赛迪 ...

  9. 微软携手联想来酷试水渠道共享,打造创新销售通路

    在疫情常态化背景下,众多企业加快了企业信息化.数字化转型等进程.基础不稳,地动山摇,企业在IT领域的各项转型创新都离不开稳定的基础设施架构.微软和联想作为IT基础设施领域的领先企业,始终坚持携手合作, ...

最新文章

  1. LeetCode简单题之汇总区间
  2. 自定义函数_自定义函数,让你的表格为所欲为
  3. 12日疯人认证百度云_百度云智峰会12月17日召开,央视财经对话现场要做一场高端访谈...
  4. 7、Java Swing JTextArea:文本域组件。 JScrollPane:滚动窗口
  5. python贪婪与非贪婪_python 贪婪 非贪婪 匹配
  6. “git pull” 强制覆盖本地文件
  7. mysql create database to_MySQL中CREATE DATABASE和CREATE SCHEMA区别(转)
  8. 【Pytorch神经网络实战案例】13 构建变分自编码神经网络模型生成Fashon-MNST模拟数据
  9. LeetCode MySQL 185. 部门工资前三高的所有员工(dense_rank)
  10. zabbix3.2学习笔记(四):设置sendEmail告警动作
  11. Linux 小知识翻译 - 「GCC」
  12. 用Java实现一个学生管理系统(附源码)
  13. crackme005
  14. flutter-可拖动悬浮按钮
  15. mac上解决Resource temporarily unavailable
  16. 四川一度智信:电商平台商品关键词优化技巧
  17. java 跳出递归_java中途强制跳出递归
  18. Photoshop%e5%bf%ab%e6%8d%b7%e9%94%ae%e5%ae%8c%e6%95%b4%e7%af%87
  19. LeetCode55跳跃游戏//力扣55跳跃游戏(贪心)
  20. 人脸检测--传统方法

热门文章

  1. flutter中Future.delayed延迟任务
  2. 安卓嵌入H5的方式 腾讯人脸识别核身 身份验证 点击开始录制按钮 没有反应 鸿蒙系统
  3. 程序员12星座性格分析,猜猜哪个星座最适合IT行业?
  4. 【转载】蒙哥马利幂模运算 - 简介
  5. 如今区块链在企业级应用中的尴尬, 只因没看懂这4大主链2大场景……
  6. 阿里数据技术专家的数据平台实战笔记
  7. 【免积分】斯坦福大学2021年度AI指数报告PDF完整版
  8. 计算机主机ip地址题,(完整版)IP地址划分测试题
  9. 2011年10月高等教育国际金融全国统一命题考试
  10. 计算机专业新生研讨课总结报告,大学新生研讨课心得体会