谷歌协议缓冲区-误码的概率和减少它们的方法



我通过TCP在互联网上通过无线VPN传输了相当大量的google协议缓冲区消息,我觉得我得到了相对较高的错误率(例如布尔字段从false切换到true或类似的东西)。在一万分之一到五万分之一之间。

这可能吗?Wikipedia指出,TCP有一个弱校验和,但这通常在底层协议中是固定的:

TCP校验和是现代标准下的弱校验。具有高误码率的数据链路层可能需要额外的链路纠错/检测功能。在TCP和IP下面的第2层,通常使用CRC或更好的完整性检查来部分补偿弱校验和,例如在PPP或以太网帧中使用。

有谁知道预期错误率应该是多少吗?如果可能的话,建议/最简单的修复方法是什么?复制字段?发送两次信息?或者还有其他方法可以提高可靠性吗?

谢谢

不,这是不可能的。假设您没有遭受硬件故障(内存,网卡等),这应该很容易检查—它是否发生在多台计算机上?

更有可能的是你在应用程序代码中有一个无效的内存访问或类似的,或者你发送的数据根本不是你想要的。试着在valgrind或类似的目录下运行代码。

将复制字段作为正常操作的一部分的想法似乎很荒谬:基本上没有人在野外这样做,你也不应该需要这样做。在您的系统中有多层保护来防止静默数据损坏,因此它很可能是一个简单的(或者可能不那么简单的)应用程序错误。

John Zwink的回答是正确的,因为你的结果是不合理的,在应用层修复是一个错误。

如果网卡引入那么多错误,VPN(假设是SW层)会发疯并失去连接。

按照建议,试试Valgrind,看看你的软件是否正在破坏缓冲区。

此外,如果"易于检查"内存似乎不是这样,一个不错的选择是memtest86, http://www.memtest86.com,您可以将其粘贴在USB驱动器或CD上,并让其运行过夜或周末。

最新更新