Skip to content

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

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions