大数跨境
0
0

【星课堂】快速了解Rust语言及在网络流量解析中的使用

【星课堂】快速了解Rust语言及在网络流量解析中的使用 中新赛克
2022-01-14
0
导读:Rust在网络流量解析场景中的使用网络安全检测离不开流量的还原与解析,由于对解析代码性能有着较高的要求,目前

Rust在网络流量解析场景中的使用


网络安全检测离不开流量的还原与解析,由于对解析代码性能有着较高的要求,目前主流开源代码几乎都是使用C语言进行流量还原与协议提取,例如非常著名的suricata。但由于网络流量的多变以及C语言本身的特性,代码在使用中非常容易出现段错误,存在着较多的安全隐患。目前我们能看到越来越多的项目中使用Rust去处理网络流量,例如新版本的suricata中官方引入了Rust进行编程,并且逐步取代原有C代码,在保持高性能解析的同时,可以更安全,更少的段错误。


由于Rust的安全特点,以及与C/C++代码超高的兼容性,可以预见后面无论是网络流量处理还是其他对安全稳定性有着较高要求的场景,Rust都将逐步扩大他的使用范围。


Rust简介

Rust是一门系统编程语言,无GC(垃圾回收)且能保证内存安全、并发安全和高性能而著称。自2008年开始由Graydon Hoare私⼈研发,2009年得到Mozilla赞助,2010年⾸次发布 0.1.0 版本,⽤于Servo引擎的研发,于2015年5⽉15号发布 1.0版本。2021年2⽉9号,Rust 基⾦会宣布成⽴。华为、AWS、Google、微软、Mozilla、Facebook等科技⾏业领军巨头加⼊Rust基⾦会,成为⽩⾦成员,以致⼒于在全球范围内推⼴和发展Rust语⾔。自发布以来,Rust历经6年半的发展,已稳步上升、趋于成熟。



Rust殊荣

Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件。Rust已经连续五年(2016,2017,2018,2019,2020)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。



Rust优势

高性能。Rust内存利⽤率极⾼。没有运⾏时和垃圾回收,可以在嵌⼊式设备上运⾏。还有胶水语言的特性,可以与其它语⾔集成。

可靠性。Rust丰富的类型系统和所有权模型保证了内存安全和线程安全,在编译阶段就能消除错误。

生产力。Rust拥有出⾊的⽂档、友好的编译器和清晰的错误提⽰信息, 还集成了⼀流的包管理器和构建⼯具cargo等。



与C对比

都是硬件的直接抽象

同样的LLVM后端

Rust支持异步高并发编程

Rust消除数据竞争,天生线程安全,明显比C/C++优越的地方

Rust支持安全的编译器计算



与C++对比

都没有GC实时控制,接近底层,没有overhead。在达到同等安全性的情况下,Rust不比C++慢

Rust有足够多的语言特性保证开发效率,比C++吸收更多的现代优秀语言特性

与C++一致的Zero cost abstraction

Rust消除数据竞争,天生线程安全,明显比C/C++优越的地方

Rust杀手级的ownership和lifetime,加上现代语言的类型系统

在语言层面上Rust无疑是比C++优秀的多的一个高性能静态强类型多范式语言。



与Go对比

都易于部署和方便交叉编译,保证内存安全,天然具备高性能和高并发的能力

Go适合构建大型分布式系统,可能是更好的Java的继承者;Rust适用于对时间和空间要求严苛场景,还有构建Web Assembly,这点更类似于C++

Rust具有强大的类型系统并支持泛型,Go缺失对泛型的支持

Rust有强大的构建工具cargo,而Go相关工具还不够强大

Rust发布周期完全开放和透明


Rust使用场景

命令行工具

no-std 库

开发⼯具(测试/ debug/linting/性能检测等)

Web 编程

API 绑定(方便Rust 使⽤的特定 api 包装,⽐如 http api、ffi 相关api等)

网络编程

嵌⼊式开发

加密技术

异步开发

算法

科学计算(包括物理、⽣物、化学、地理、机器学习等)

除此之外,还有 WebAssembly 、编码、⽂本处理、并发、GUI、游戏引擎、可视化、模版引擎、解析器、操作系统绑定等其他分类,具体都可以在 crates.io⾸页⾥看到。


Rust语言的缺点

编译速度慢

学习曲线陡峭

IDE支持不够完善

针对某些场景生态不够完善



Rust学习曲线

学习曲线的高低,依个人水平而定。以下罗列了不同基础学习Rust应该注意的地⽅。


1)完全零基础的开发者:掌握计算机基础体系知识结构,理解Rust语⾔和硬件/OS层的抽象,理解Rust语⾔核⼼概念、以及它的抽象模式,选择Rust语⾔的某个适⽤领域进⾏实操训练,通过实践来提升Rust语⾔的熟练度和理解深度,同时掌握领域知识。
2)有C语言基础:由于C语⾔开发者对⾼级语⾔的抽象不是很理解,所以着重了解掌握Rust所有权机制,⽣命周期和借⽤检查。了解Rust语⾔的抽象模式,主要是类型和trait,以及Rust本⾝的的OOP和函数式语⾔特性。
3) 有C++基础:C++开发者对于Rust语⾔的所有权有很好的理解能⼒,主要精⼒放在Rust的抽象模式和函数式语⾔特性上。
4) 有Java/Python/Ruby基础:着重理解Rust所有权机制、抽象模式、函数式编程语⾔特性。
5) 有Go基础:Go语⾔开发者⽐较容易理Rust的类型和trait抽象模式,但Go也是GC语⾔,所以所有权机制和函数式语⾔特性是学习重点。

 


如何学习Rust

1)查阅Rust官方网站,贴出的中文官网,对于英语不好的人来说还是很有好的,网址为:https://www.rust-lang.org/zh-CN/learn/get-started,根据官方说明完成环境搭建。

2)学习周边工具,先熟悉 cargo:Rust 的项目和依赖管理工具,具体方法在见网址:https://doc.rust-lang.org/cargo/index.html

3)官方文档阅读,Rust 社区发行了一个简明的开源教程:《The Rust Programming Language》 , 推荐阅读。如果不太适应英文教材的阅读,可以看这本书的中文翻译版本:Rust 程序设计语言-中文版》。电子版都可以在Rust官网很容易找到。

4)其它文档阅读,因官方文档讲解原理性居多,有点难以理解。若想要快速学习Rust语法,可以阅读《深入浅出Rust》、《Rust编程之道》等纸质书籍。

5)案例学习,查找一些Rust开源代码进行学习,可以通过实例了解自己语法学习的薄弱环节,实现快速上手写一些Rust代码。



当前在生产环境中使用Rust公司

国内:华为、阿里巴巴、字节跳动、知乎、豆瓣、吉利等

国外:Mozilla、Google、亚马逊、Facebook、Apple、IBM、三星等



【声明】内容源于网络
0
0
中新赛克
主要产品包括宽带互联网数据汇聚分发管理产品、移动接入网数据采集分析产品、网络内容安全产品和大数据运营产品等,其中宽带互联网数据汇聚分发管理产品国内市场份额一直处于NO.1。公司重视新技术、新产品的研发,近三年研发投入占营业收入的比例均保持在20%以上。
内容 240
粉丝 0
认证用户
中新赛克 南京中新赛克科技有限责任公司 主要产品包括宽带互联网数据汇聚分发管理产品、移动接入网数据采集分析产品、网络内容安全产品和大数据运营产品等,其中宽带互联网数据汇聚分发管理产品国内市场份额一直处于NO.1。公司重视新技术、新产品的研发,近三年研发投入占营业收入的比例均保持在20%以上。
总阅读69
粉丝0
内容240