摘要:

网络功能虚拟化最近允许用等效的软件实现代替专用设备, 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. 小菜鸟之JAVA面试题库1

    四次挥手 客户端发送释放连接报文,关闭客户端到服务端的数据传输 服务端收到后,发送确认报文给客户端 服务端发送释放连接报文,关闭服务端到客户端的数据传输 客户端发送一个确认报文给服务端 ------- ...

  2. JMX jconsole 的使用

    JMX 1. JMX简单介绍 JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展.这种机制可以方便的管理正在运行中的Java程序.常用于管理线程, ...

  3. C# using用法之一(命名空间相关)

    通过using关键字可以引入命名空间 using System; using System.Collections.Generic; using System.Linq; using System.T ...

  4. Mysql学习(二)之通过homebrew安装mysql后,为什么在系统偏好设置里没有mysql

    原因 用brew install packagename是用来安装命令行工具的,一般不可能影响到图形界面. mysql官方文档是通过dmg文件安装的: The MySQL Installation P ...

  5. 分布式的几件小事(六)dubbo如何做服务治理、服务降级以及重试

    1.服务治理 服务治理主要作用是改变运行时服务的行为和选址逻辑,达到限流,权重配置等目的. ①调用链路自动生成 一个大型的分布式系统,会由大量的服务组成,那么这些服务之间的依赖关系和调用链路会很复杂, ...

  6. Js阻止冒泡,Vue中如何阻止冒泡事件

    js解决冒泡:event.stopPropagation() vue解决冒泡: 事件.stop,例如:@click.stop="" ,@mouseover.stop="& ...

  7. WPF:元素绑定

    到目前为止都在讨论如何链接两个元素的绑定.但在数据驱动的应用程序中,更常见的情况是创建从不可见的对象中提取数据绑定表达式.唯一的要求是希望显示的信息必须存储在公有的属性中.WPF数据绑定基础结构不能获 ...

  8. Linux Exploit系列之一 典型的基于堆栈的缓冲区溢出

    Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出) Note:本文大部分来自于看雪hackyzh的中文翻译,加入了一些自己的理解 典型的基于堆栈的缓冲区溢出 虚拟机 ...

  9. Mybatis常见面试题总结

    1.#{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. ...

  10. Delphi 无类型文件