北瓜 (@chunhui_true)网络流量处理中的协议解析七: Protolens 中发帖

接:https://linux.do/t/topic/576730/13 
实现
综合前面几篇文章,流重组+协议解码的所有环节都已经没有问题。可以据此实现一个完整的协议解析库:Protolens。
我们把这个库限定在这样的使用场景之下:

作为一个库,被通常的多线程流量处理引擎调用。
但库本身没有必要跨线程使用,也就是说流量处理引擎的每个线程都有自己的协议解析库的实例。
每个五元组会话,也就是通常所说的流节点都有一个解码器。解码器针对每条连接解码。
解码器本身不具备协议识别能力。协议识别能力由流量处理引擎提供。协议解析和协议识别看似很接近,但这两个功能如果搅合在一起,显然是个错误的思路。
解码器的输入是数据包,输出是解码后的协议数据。
解码器通过回调函数把协议数据返回给用户。

此外,作为一个库,应该尽量利用用户程序的功能,不要重复做功。比如对数据包的解码(ip地址,tcp,udp,端...