论文阅读: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, ...
随机推荐
- Eclipse中格式化代码
Eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法 格式化代码的时候,右键 --> Source --> Format 能够起效,但 Ctrl+Shift+F不好使. ...
- Charlie's Change POJ - 1787
Time limit 1000 ms Memory limit 30000 kB description Charlie is a driver of Advanced Cargo Movement, ...
- nginx+gunicorn/uwsgi+python web 的前世今生
我们在部署 flask.django 等 python web 框架时,网上最多的教程就是 nginx+gunicorn/uwsgi 的部署方式,那为什么要这么部署呢,本文就来系统地解释这个问题. 必 ...
- 首探:Ruby on Rails 简单了解
一. 安装 Ruby安装:https://ruby-china.org/wiki/rvm-guide 注:安装了RVM和Gem后 安装rails: gem install rails -v 5.1.4 ...
- BM求线性递推模板(杜教版)
BM求线性递推模板(杜教版) BM求线性递推是最近了解到的一个黑科技 如果一个数列.其能够通过线性递推而来 例如使用矩阵快速幂优化的 DP 大概都可以丢进去 则使用 BM 即可得到任意 N 项的数列元 ...
- solr学习笔记-入门
solr学习笔记 1.安装前准备 solr依赖java 8 运行环境,所以我们先安装java.如果没有java环境无法启动solr服务,并且会看到如下提示: [root@localhost solr- ...
- Alibaba开源组件-分布式流量控制框架sentinel初探
Alibaba开源组件-分布式流量控制框架sentinel初探 2018年12月09日 18:23:11 SuperPurse 阅读数 1965更多 分类专栏: J2EE 版权声明:本文为博主原创 ...
- JavaScript的数组方法(array)
数组方法: 1. concat() 合并数组 2. join() 将数组的元素拼接成字符串,并指定分隔符 3. push() 往数组末尾添加一个元素,并返回新的数组的长度 4. reverse( ...
- scrapyd使用教程
1. 安装服务器: pip install scrapyd 启动: scrapyd 访问:127.0.0.1:6800 2. 安装客户端 pip install scrapyd-client 3. 进 ...
- linux无界面模式安装selenium+chrome+chromedriver并成功完成脚本(亲测可用)
环境:docker centos 7.4 能通外网 写好的selenium脚本. 具体步骤: 一:安装selenium 这是最简单的 直接利用 pip3 install selenium 二 安装c ...