摘要:

网络功能虚拟化最近允许用等效的软件实现代替专用设备, 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的更多相关文章

  1. [论文阅读笔记] Community aware random walk for network embedding

    [论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...

  2. [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding

    [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 ...

  3. [论文阅读] RNN 在阿里DIEN中的应用

    [论文阅读] RNN 在阿里DIEN中的应用 0x00 摘要 本文基于阿里推荐DIEN代码,梳理了下RNN一些概念,以及TensorFlow中的部分源码.本博客旨在帮助小伙伴们详细了解每一步骤以及为什 ...

  4. 论文阅读(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 ...

  5. BITED数学建模七日谈之三:怎样进行论文阅读

    前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...

  6. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  7. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  8. Deep Reinforcement Learning for Dialogue Generation 论文阅读

    本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...

  9. 论文阅读笔记 Word Embeddings A Survey

    论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...

随机推荐

  1. Spring_four

    Spring_four 基于XML的AOP实现事务控制 坐标xml ; //2.6更新转入账户 accountDao.updateAccount(target); } } 注意:方法级别的事务会覆盖类 ...

  2. java中start()、yield、setDeamon()

    本节主要说明以下三个问题 start()的启动顺序不代表线程的启动顺序 yeild的作用 守护线程 1.start()与线程启动顺序 package foreverly.cn.chapter1; pu ...

  3. MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)

    一.动态SQL概述 以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情.通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字 ...

  4. uboot 主Makefile 分析。

    本文以uboot_1.1.6 对应的CPU是S3C2440 为例 uboot_1.1.6 根目录下的主Makefile开头: VERSION = PATCHLEVEL = SUBLEVEL = EXT ...

  5. Spring经典高频面试题,原来是长这个样子

    Spring经典高频面试题,原来是长这个样子 2019年08月23日 15:01:32 博文视点 阅读数 719   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文 ...

  6. 第二章:排序算法 及其他 Java代码实现

    目录 第二章:排序算法 及其他 Java代码实现 插入排序 归并排序 选择排序算法 冒泡排序 查找算法 习题 2.3.7 第二章:排序算法 及其他 Java代码实现 --算法导论(Introducti ...

  7. Bat批处理文件入门

    这个东西吧,感觉在使用windows时作用不是很大,毕竟在windows环境下命令行确实用的比较少,但有时候也会用到,比如测试算法程序时使用批处理+文件可以省去每次手动输入.赶巧最近对批处理也比较感兴 ...

  8. java中的异常和处理详细理解

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用System.ou ...

  9. JS常用自定义函数总结

    JS常用自定义函数总结   1.原生JavaScript实现字符串长度截取 2.原生JavaScript获取域名主机 3.原生JavaScript清除空格 4.原生JavaScript替换全部 5.原 ...

  10. 关于IDEA,多服务运行 Services -> Run Dashboard 部分服务添加变灰色,限制使用5个启动类,重启之后需要重新添加,服务在 Run Dashboard 中的显示排序问题,不显示 Services(Run Dashboard)

    我的IDEA版本为最新版本 变灰色的原因就是因为右键删除了那个启动的主配置类,然后就会显示灰色,再次打开这个醒目,就不会在Run Dashboard中显示这个主配置类了 解决方法 如果你要 调整这些服 ...