SDN学习
https://github.com/USTC-INFINITELAB/POFSwitch
SDN
introduction
通过SDN中心化控制的交换机,实现车辆之间数据的直接线速转发,不用上大网
Project(1):
SDN,软件定义网络。整体概念:核心思想是控制平面与数据平面相分离。控制平面决定每个报文要执行的事件(action),数据层负责具体的硬件执行。通过上层的可编程,使得数据层效率提高,并且让控制层更灵活。具体实现:在传统的网络架构中,每个转发设备为了实现不同的功能,都遵守不同的协议。具体来说,比如如何转发有路由协议,安全有安全协议,地址转换有NAT协议等等,各个协议之间通过协议栈进行组合,但是这样使得协议实现错综复杂(如自己在配置路由器的时候,就纠结NAT的ACL和IPsecVPN的ACL优先匹配哪个)。并且灵活性也不高,特别是大型的网络,不可能让人工去在每一台设备上敲命令。SDN采用的流表的思想。流,是因为在互联网上的报文相邻之间大多是有关联的,因此按照同样特征去匹配,比每一个都进行掩码计算等操作更快。对新进入的报文,按照流表的优先级依次匹配下去,并按照流表的action执行(action非常灵活,转发、回复、通知高层、匹配另一套流表)。后续的流得以快速执行相应的action。而数据面可以只负责数据处理、转发等,大大提高了速率。并且SDN往往有一个controller负责数据面的管理,这使得远程配置、按照意图的网络得以实现。
Projiect(2):
说实话,当我认真读完之后,由于之前先入为主了,有一点点失望。因为这篇文章所提到的技术,实际上是对于POF流表管理的改进,和车联网并没有很强的关系,Fig1的图将下层的网络换成需要一个私有协议的物联网一样能够适用。
刚才提到,SDN基于流表的匹配,实现控制面的可编程,对数据包进行控制。但是这样的操作仅限在TCP/IP协议栈,对于一些私有协议,除非硬件改动否则无法支持(这一点我在读Ryu文档的时候也发现了,支持的报文类型就那么几种)。但是随着车联网、无线网络、物联网的发展,对于私有协议的支持又是很必要的,因此有了POF——数据面的可编程,老师所使用的ATCA我更愿意理解成一个FPGA,通过一些已有的指令集实现对数据平面的精确到比特的控制。这样一种可以自定义所匹配比特的方法,自然支持了私有协议。
而本文就在POF思想的基础上,对流表的管理方式以及更新算法进行了设计,实现在大流量下能够线性转发,更重要的是能够支持私有协议了。
文章中冷热表的想法认为挺巧妙,利用不同匹配方法实现最优化,很像cache的思想。但是在Fig(5)中提到的例子,我在想,是不是设置第二次排序,在每个相同优先级内部按照热度进行排序,就可以避免按热度排序打乱按照优先级排好的顺序呢?在老师提出的未来改进:使用多线程进行改进,也比较感兴趣,在我的博客上也刚刚发表关于python并发编程的内容(链接)。在文章最后的测试,能够说明理论上的可行,如果条件允许的话,实际车联网环境中的测试可能会更好。