SDN开发实战(1)-透明HTTP代理[Openflow+floodlight]

1. SDN软件定义网络(Software Defined Network, SDN),是Emulex网络一种新型网络创新架构,是网络虚拟化的一种实现方式,其核心技术OpenFlow通过将网络设备控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能知乎解释:https://www.zhihu.com/question/20279620Openflow+floodlight
摘要由CSDN通过智能技术生成

1. SDN

软件定义网络(Software Defined Network, SDN),是Emulex网络一种新型网络创新架构,是网络虚拟化的一种实现方式,其核心技术OpenFlow通过将网络设备控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能

知乎解释:https://www.zhihu.com/question/20279620

Openflow+floodlight

Openflow是SDN实现的重要的一个技术手段,由斯坦福高性能网络实验室开发,如今已形成了Openflow论坛。在Openflow框架中(如下图),每个主机(host)连接着Openflow交换机(Openflow Switch),交换机中的流量表(flow table)由Openflow的控制器控制,通过监视并改变每个Switch中的流量表,各个主机之间的通讯能够很灵活的被Controller控制,而Controller可通过编程实现,这样就从软件层面上直接控制了网络设备中的数据转发,从而定义整个网络

这里写图片描述

Openflow框架中的控制器有很多开源库可以实现:

  • Java: Beacon, Floodlight
  • Python: POX, Ryu, NOX (Deprecated)
  • Ruby: Trema

此博客使用基于Java的Floodlight库开发控制器,用Mininet来模拟虚拟的主机和Openflow Switch,Mininet是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持,下面给出几个有用的传送门:

2. 透明HTTP代理

代理服务器的功能就是代理用户访问网络信息,代理分正向代理、反向代理、透明代理等,透明代理就是指用户并不知道代理服务器的存在,代理服务器会修改用户发送的request fields(报文),并会传送真实IP。关于代理服务器请看这里

这里,我们为了学习SDN开发,做出的透明HTTP代理应用,并不是真正意义上的透明代理,因为我们并不是注重在代理服务器本身,而是研究如何通过openflow+floodlight实现控制整个网络的转发,模拟的网络功能可以实现透明HTTP代理功能

这里写图片描述

我们将创建如上图一样的拓扑网络,具有三个虚拟交换机s1、s2、s3(使用的是Open vSwitch,而非标准的Openflow Switch),四个虚拟主机h1、h2、h3、prox,以及一个控制器c0:

  • 其中,prox为具有代理服务器的虚拟主机,10.0.0.x代表每个主机的IP地址
  • hx-eth0代表主机hx的网卡适配器,sx-ethx则代表交换机sx的第x个网卡sx-ethx
  • 控制器c0由Floodlight实现,虚拟交换机和主机由Mininet模拟,之间使用TCP通讯,端口6653

根据上面的描述,我们可以看出只有h1和h2连接着同一个交换机,prox和h3分别连接各自的交换机s2和s3,因此我们现在定义各个主机的角色和整个网络的转发策略(Policy)

  1. h1和h2代表两个用户的主机,能通过同一个交换机直接互联
  2. h3代表网站服务器,里面有h1和h2想要访问的网络资源
  3. h1和h2并不能直接访问h3,需要通过prox代理服务器转发package
  4. h1和h2并不知道代理服务器prox的存在,而且无法ping通prox
  5. 所有的连接为双向有效(bi-bridge)

3. 代码实现[Github]

3.1 Floodlight

我们使用的是最新版的v1.3版本的Floodlight (master), 请先参考Floodlight官方教程-How to Write a Module,编写一个自定义的控制器其实也就是增加一个模块,一个继承了IOFMessageListener和IFloodlightModule接口的java类,因此需要覆写接口中所有的方法。

1.我们新建一个TransHttpProxyDemo类如下:

package net.floodlightcontroller.transHttpProxy;

import java.util.Collection;
import java.util.Map;

import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFType;
import org.projectfloodlight.openflow.types.MacAddress;

import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;

public class 
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值