Skip to content

[理论上的bug] Kindling 不能正确处理TCP 长连接的两个场景 #435

@LambertZhaglog

Description

@LambertZhaglog

Describe the bug

参见这里 对connection, stream, message 的定义。在一个TCP connection上,Kindling不能正确处理下面两种类型的通信场景

case1: 两个流的response message 逆序

case2: client发起的流包裹 server 发起的流

图示如下
kindling-issue-response-interleaving
case1: Client 连续向Server发送两个请求request1 和 request2,Server先响应了response2,后响应response1。 按照当前 Network.ConsumeEvent的处理逻辑:request2 报文会被merge到request1的尾部(即request2被隐藏),response1 会被丢弃,request1 和response2会被错误的配对在一起,进行 NetworkAnalyzer.distributeTraceMetric分析

kindling-issue-stream-inline

case2: Client 首先向Server发送request1,Server收到request1 没有立即响应,而是向Client发送了request2, Client响应了response2 后,Server才响应response1。 按照当前 Network.ConsumeEvent 的处理逻辑:request1 和response2 会被配对,进行NetworkAnalyzer.distributeTraceMetric分析,response2 和response1 也会被配对,进行NetworkAnalyzer.distributeTraceMetric分析。错误的配对,必然导致解析失败

Additional context

这两个case,是我用kindling解析公司自研协议观察到的,我设计了对这个问题的解决方案,正在编码实现。本周我会把解决方案提交成proposal

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions