实践求真知

网络流量处理中的协议解析七: Protolens

实现 综合前面几篇文章,流重组+协议解码的所有环节都已经没有问题。可以据此实现一个完整的协议解析库:Protolens。 我们把这个库限定在这样的使用场景之下: 作为一个库,被通常的多线程流量处理引擎调用。 但库本身没有必要跨线程使用,也就是说流量处理引擎的每个线程都有自己的协议解析库的实例。 每个五元组会话,也就是通常所说的流节点都有一个解码器。解码器针对每条连接解码。 ...

网络流量处理中的协议解析六: 执行器

执行器 rust 中有很多异步执行环境。但是异步执行环境有一个问题。它有“传染性”,如果一个函数是异步的,那么它的所有调用者都必须是异步的。在前面的流量处理模型并不是异步的。所以为了不至于把协议解析部分的异步影响到流量处理模型,我们需要一个自己的执行器。这个执行器把异步操作封装起来,然后在流量处理模型中使用。尽量不影响使用者的习惯和模型,是一个库的修养。 rust 的执行器简单来说类似于前...

tmux,emacs和剪切板

因为开发环境很多时候都是在服务器上,即便在本地搭建,也虚拟机,这也相当于是远程环境。虽然本地emacs也可以访问远程文件,不过我比较习惯在服务器上安装emacs,然后ssh登陆上去在TUI下用。然后再开一个tmux保持会话。 有时候需要在emacs中copy一些内容到本地,比如一段警告需要搜一下。或者一段日志之类。这时候这段内容就需要一个穿越过程:emacs到tmux到ssh到本地终端到本...

网络流量处理中的协议解析五:async/await

async/await 回顾一下前面的解析状态机。它在每一个流表模块提供的flow_t node也就是链接上执行,当执行不下去的时候就跳出来,出让执行权限给其他的链接。看起来像是为每一个链接都实现了一个微型的执行体,使得在同一个执行路径中,让流量处理程序可以并发处理大量的链接。这其实和async/await的异步模式很像。 async/await在实现上涉及到很多概念,但简单来说,它就相...