首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪和检测一系列缺失数据的技术(例如安全日志数据)

跟踪和检测一系列缺失数据的技术(例如安全日志数据)
EN

Stack Overflow用户
提问于 2012-05-12 16:31:01
回答 3查看 184关注 0票数 2

我有一个数据表,它用一个不断增加的索引(n++)发送数据。其中一些数据有可能无法正常发送、丢失或需要重新传送。

示例

  1. 假设我有一个由我的应用程序监视的安全日志文件。对于一个坏人来说,有可能抑制或阻止少数条目的传播。
  2. 还假定这些数据可能会被发送到日志记录器中。

似乎这种逻辑无处不在,我不想重新发明轮子,做一些效率不高的事情。

问题

我应该如何实现(或存在什么引用实现),以便跟踪按顺序接收到的数据,并可能在序列中包含丢失的数据?

(也感谢你协助标注这一问题)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-13 13:24:34

好吧,我是用链表做的。一定要有个事先的工作.不管是哪种方式,这都是针对一个输入序列进行优化的,该系列的性质或多或少在增加。

如果您看到任何bug,或者我可以做的增强,请告诉我。

代码语言:javascript
复制
    public class ContiguousDataValue
    {
        public int UpperInt { get; set; }
        public int LowerInt { get; set; }

        public override string ToString()
        {
            return "Upper" + UpperInt + " Lower" + LowerInt; 
        }
    }


public class ContiguousData 
{
    LinkedList<ContiguousDataValue> ranges = new LinkedList<ContiguousDataValue>();

    public void AddValue(int val)
    {
        for (LinkedListNode<ContiguousDataValue> range = ranges.Last; range != null; range = range.Previous)
        {
            if (val > range.Value.UpperInt)
            {
                // increment current node if applicable 
                if (val == range.Value.UpperInt + 1)
                    range.Value.UpperInt = val;
                else
                    ranges.AddAfter(range, new ContiguousDataValue() { UpperInt = val, LowerInt = val });
                return;
            }
            else if (val < range.Value.LowerInt)
            {
                if (val == range.Value.LowerInt - 1)
                {
                    range.Value.LowerInt = val;
                    return;
                }
                else
                {
                    continue;
                }
            }
        }
        // Anything that reaches this line is either a very new low value, or the first entry
        ranges.AddLast(new ContiguousDataValue() { UpperInt = val, LowerInt = val });
    }
 }
票数 1
EN

Stack Overflow用户

发布于 2012-05-12 16:39:53

您在OQ: TCP中提到了规范实现。所以通过TCP发送数据会带来一些可喜的后果,

无论何时(如果任何时候)数据不按顺序到达,您都可以安全地假设,您的发送或接收过程都是misbehaving.

  • Whenever数据在序列中丢失了,您可以假设相同的

  • 对于确认也是一样的,因此您的发送过程有一个完美的最后一个-一直都很好。--

我强烈建议您只使用TCP作为传输,并且(如果这不是可直接实现的)只需将TCP数据报封装到其他网络流中即可。

简而言之:使规范实现成为您的实现。

票数 0
EN

Stack Overflow用户

发布于 2012-05-12 19:53:39

首先,如果你有一个潜在的比赛条件,你应该修复它。

TCP通过等待克服了无序数据的问题.如果数据包6在数据包4之后到达,TCP将等到数据包5到达。如果数据包5在一段时间内没有到达,TCP将要求重新传输数据包5,这将导致数据包5的重新发送。

(注意-我知道TCP/IP计数字节,而不是数据包,这里不相关)

如果你可以要求你的‘哑巴嵌入式设备’重传,你可以使用同样的技术。我打赌你做不到,所以你需要另一种机制。它可以类似于TCP所做的事情。你只需要决定你要等多久,直到你决定一个条目丢失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10565487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档