论文阅读:ClickNF: a Modular Stack for Custom Network Functions
摘要:
网络功能虚拟化最近允许用等效的软件实现代替专用设备, Click路由器是朝这个方向迈出的第一步,它定义了用于通用数据包处理的模块化平台。 尽管Click具有重大影响,但它不提供本机L4实现,而仅使用非阻塞I / O,从而将其范围限制为L2-L3网络功能。 为了克服这些限制,我们引入了ClickNF,它为中间盒和服务器端网络功能的开发提供了模块化的传输和应用程序层构建块。 我们对ClickNF进行评估,以突出其最先进的性能,并通过从简单元素组成复杂功能来展示其模块化。 ClickNF是开源的,并且是公开可用的。
背景/问题:
网络功能虚拟化(NFV)引发了用于部署灵活网络功能的新方法,范围从虚拟机到新的数据包处理框架,网络功能可以结合对状态传输逻辑的了解,将数据包转发和简单的标头重写结合在一起,并有可能执行复杂的应用层操作。
模块化的L2-L7数据平面将为开发新的网络功能提供多个优势,例如,解耦状态和数据包处理,细粒度协议行为的可扩展性,模块重用以及简化跨层协议优化和调试的功能。在现有方法中,Click由于其模块化和可扩展性,可以说是此类架构的最佳起点。
但是Click仍然缺少一些功能,无法成为具有网络功能的全栈模块化数据平面:
首先,它缺乏L4本机实现,因此无法进行跨层优化和堆栈自定义
其次,它不支持阻塞I / O原语,迫使开发人员使用更复杂的异步非阻塞I / O
第三,Click应用程序必须诉诸操作系统堆栈,这会导致严重的I / O瓶颈
最后,尽管有最近的改进,但Click不支持硬件卸载和高效的计时器管理,从而使其无法在特定情况下高速扩展
解决方法:
在本文中,我们介绍ClickNF,该框架克服了Click的限制,并允许在Click中进行L2-L7模块化网络功能开发,通过传统的Click元素,ClickNF使开发人员可以根据需要检查整个网络堆栈。
首先,它引入了模块化TCP实现,该实现支持选项,拥塞控制和RTT估计
其次,它引入了阻塞的I / O支持,从而为应用程序提供了不间断运行的幻觉
第三,它公开了标准的套接字,零复制和套接字多路复用API,以及基本的应用程序层构造块
最后,为了提高可扩展性,ClickNF集成了Fastclick 中首次引入的I / O加速技术,例如数据平面开发套件(DPDK)和批处理,以及对硬件加速的额外支持以及改进的Click的计时器管理系统
ClickNF可用于部署大量网络功能,对于中间盒,拆分TCP,L7防火墙,TLS / SSL代理,HTTP缓存等需要TCP终止。在网络边缘,ClickNF可以用于使用套接字多路复用基元来处理I / O的高速模块化L7服务器。作为证明,我们组成了一个HTTP缓存服务器,该服务器具有可选的SSL / TLS终止和SOCKS4代理,我们展示了ClickNF在提供L2–L7模块化的同时,可以提供与现有用户空间堆栈相同的性能和可伸缩性。
具体结构:
在讲ClickNF之前要说一下Click:
Click中的路由器由一组细粒度的数据包处理模块,元素构建而成,可实现简单的功能(例如IP路由)。一个配置文件将这些元素连接成一个有向图,有向图的边缘指定了数据包应经过的路径,根据配置,用户可以实现任意复杂度的网络功能(例如,交换机)。
每个元素可以定义任意数量的输入和输出端口以连接到其他元素,端口以推或拉模式运行。在推式连接上,数据包从源元素开始,向下游移动到目标元素,在拉连接上,目标元素从上游请求一个数据包,上游将返回数据包,否则返回空指针。除了推动或拉动之外,端口还可能是不可知的,并且根据其所连接的端口而表现为推动或拉动。
在其基础实施中,Click使用任务队列和计时器优先级队列,无限循环按顺序运行任务,并在到期时运行计时器。任务是元素定义的功能,需要CPU调度,并启动一系列的入栈或出栈请求,但是大多数元素不需要它们自己的任务,因为它们的推和拉方法是由预定任务调用的。计时器回调函数类似于任务,在特定时间安排。
ClickNF的目的是通过提供用于构建模块化L2-L7网络功能的框架,使开发人员不受限制地访问整个堆栈,而无需担心其行为的正确性或事件驱动的特定于域的API所添加的约束。 ClickNF的设计将Click的模块化和灵活性与高速数据包I / O和现成的用于传输和应用程序层功能的协议构建块相结合。
图1将ClickNF设计与传统OS和用户空间堆栈进行了比较:
与其他将网络堆栈的复杂性隐藏在一个整体的包中或未在所有层引入模块化的其他方法不同,我们将整个L2–L7堆栈分解为几个简单的元素,可以通过重新连接配置文件来分别替换,修改或移除它们,提供其他解决方案无法提供的灵活性。另外,可以在需要时将元素聚合到单个宏元素中以隐藏复杂性。
这种细粒度分解的原理是双重的。首先,简单的元素允许修改和控制网络协议的各个方面和机制,这使得模块可以在其他情况下重用,例如回收现有的拥塞控制策略以实施新协议(如QUIC )或新策略(如BBR 或DCTCP)。其次,这种方法有助于解耦协议状态管理和数据包处理,简化复杂的任务,例如服务器之间或跨异构硬件(例如,CPU和智能NIC之间)的完整状态迁移。
论文阅读:ClickNF: a Modular Stack for Custom Network Functions的更多相关文章
- [论文阅读笔记] Community aware random walk for network embedding
[论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...
- [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding
[论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 ...
- [论文阅读] RNN 在阿里DIEN中的应用
[论文阅读] RNN 在阿里DIEN中的应用 0x00 摘要 本文基于阿里推荐DIEN代码,梳理了下RNN一些概念,以及TensorFlow中的部分源码.本博客旨在帮助小伙伴们详细了解每一步骤以及为什 ...
- 论文阅读(Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)
白翔的CRNN论文阅读 1. 论文题目 Xiang Bai--[PAMI2017]An End-to-End Trainable Neural Network for Image-based Seq ...
- BITED数学建模七日谈之三:怎样进行论文阅读
前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...
- 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...
- 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...
- Deep Reinforcement Learning for Dialogue Generation 论文阅读
本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...
- 论文阅读笔记 Word Embeddings A Survey
论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...
随机推荐
- IDEA Git回退到指定历史版本
1.找到要回退的版本号(右击项目--> Git --> Show History -->选中要回退的版本-->Copy Revision Number): 2.打开idea的T ...
- P3376 网络流-最大流模板题(Dinic+当前弧优化)
(点击此处查看原题) Dinic算法 Dinic算法相对于EK算法,主要区别在于Dinic算法对图实现了分层,使得我们可以用一次bfs,一次dfs使得多条增广路得到增广 普通的Dinic算法已经可以处 ...
- Java后端技术面试汇总(第三套)
1.基础题 • 怎么解决Hash冲突:(开放地址法.链地址法.再哈希法.建立公共溢出区等)• 写出一个必然会产生死锁的伪代码:• Spring IoC涉及到的设计模式:(工厂模式.单利模式..)• t ...
- JAVA网络编程入门
JAVA网络编程入门 软件结构 C/S结构 B/S结构 无论哪一种结构,都离不开网络的支持.网络编程,就是在网络的条件下实现机器间的通信的过程 网络通信协议 网络通信协议:通信双方必须同时遵守才能完成 ...
- 使用xpath爬取猫眼电影排行榜
最近在学习xpath,在网上找资料的时候,发现一个新手经常拿来练手的项目,爬取猫眼电影前一百名排行的信息,很多都是跟崔庆才的很雷同,基本照抄.这里就用xpath自己写了一个程序,同样也是爬取猫眼电影, ...
- 判断页面是在移动端还是PC端打开的
$(function () { var curWwwPath = window.document.location.href; var pathName = window.document.locat ...
- python-装饰(高阶函数)
python-装饰(高阶函数) 高阶函数 1.把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码) 2.返回值 中包含函数名 高阶函数实现1的功能 def bar(): print(&qu ...
- Beacon
1.Beacon技术指的是通过使用低功耗蓝牙技术(Bluetooth Low Energy,也就是Bluetooth 4.0或者Bluetooth Smart),Beacon基站便可以自动创建一个信号 ...
- c++ 简单的动态银河星空绘制(类应用)
话不多说直接贴代码: #include <graphics.h> #include <time.h> #include <conio.h> #define MAXS ...
- C与汇编混合编程
C中调用汇编,要把汇编定义为全局的,加.global C内嵌汇编 __asm__( :汇编语句部分 :输出部分 :输入部分 :破坏描述部分 ); 用C内嵌汇编的方式:实现LED的点亮 //#defin ...