第一部分:选题背景
随着网络的不断发展和人民生活水平的提高,同时接入多个运营商网络的家庭越来越多,但对同时多个出口网络接入情况下的利用率并不高且无法按照实际需求选择合适的网络出口。
例如在高校中,会有很多人同时接入教育网和运营商网络;往往教育网会对使用流量有所限制,但在浏览知网等需要教育网环境访问的资源时又不得不手动切换到教育网。切换校园网环境后忘记切换回运营商网络而导致流量配额大量消耗的情况时有发生。
又如常见的游戏场景,国内目前中国电信的游戏体验要优于中国移动,但资费相同的情况下中国移动一般能提供更大的网络带宽。
虽然部分需求可以在客户端上利用修改路由表等方式达到一定的效果但操作繁琐且需要对每一台设备进行操作。
需要通过SDN技术实现路由的智能选择;根据访问目标实现网络流量的灵活调度
第二部分:系统功能
选拔赛阶段:
- 搭建基于SDN的网络拓扑,模拟部分路由线路禁止访问目标资源
- 开发基于SDN应用程序,设计正确的流表使得
挑战赛阶段:
- 完善网络拓扑,模拟出不同线路不同网络延迟等更复杂的差异化网络
- 完善选拔赛阶段的SDN应用,通过该应用动态感知网络流量状态,智能选择路由策略,下发流表实现流量的灵活调度
第三部分:设计思想
首先搭建一个简易的拓扑结构模型入下图所示:
H1代表通过SW1同时接入多条线路的用户;该网络环境中有两个网络出口SW2和SW3;
同时使用限制访问服务器和公网服务器分别代表部分网络环境下才能访问的服务器和没有限制的服务器,他们分别接入了SW4和SW5
由于实际环境下两台服务器都和公网连通,使用均与SW2和SW3接通;但在SW4上对来自SW3的数据流进行拦截,达到禁止访问的目的。
最后只需要对SW1的流表进行配置,使得访问30.0.2.10的流量被转发到SW2即可
第四部分:成果展示
在完成网络拓扑搭建后,在控制器端下发各个交换机的初始流表。添加流表的方式可以经由python脚本实现,或者通过shell脚本实现,演示时采用shell脚本直接修改流表实现。
controller登录后确认OpenDaylight已开启,可查看完整网络拓扑。
初始化的流表项保证了要访问受限制的服务器无法通过含有sw3的链路。实现方法为:从sw3发往sw4的数据包将被全部丢弃,只开放sw4的eth2;将从sw5处发往目的地址为受限服务器ip的数据包全部丢弃。
完成初始化流表下发后,可以看到尝试连通受限服务器时,经由sw3转发的数据包全部被丢弃,连接失败,连接不受限服务器则成功,初始化流表有效。
当需要访问受限制的服务器时,由controller下发一条流表,使数据包可以经由sw1直接转发至sw2,从而开放h1->sw1->sw2->sw4->受限访问服务器的链路。
通过这种即可方式完成对受限服务器的访问控制。开放效果如下: