1

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

那可能吗?维基百科指出 TCP 的校验和很弱,但这通常在底层协议中是固定的:

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

有没有人有任何经验应该是预期的错误率?如果上述速率是可能的,那么推荐/最简单的修复方法是什么?复制字段?两次发送消息?或者还有什么可以提高可靠性的方法吗?

谢谢

4

2 回答 2

3

不,它(合理地)不可能。假设您没有遇到硬件故障(内存、网卡等),这应该很容易检查——它是否发生在不止一台计算机上?

更有可能是您的应用程序代码中有无效的内存访问等,或者您发送的数据根本不是您想要的。尝试在 valgrind 等下运行您的代码。

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

于 2011-12-23T03:03:47.387 回答
1

John Zwink 的回答是正确的,因为您的结果不合理,并且在应用程序层进行修复是错误的。

如果网卡引入了这么多错误,VPN(假设为 SW 层)会变得疯狂并失去连接。

按照建议尝试 Valgrind,以查看您的软件是否损坏了缓冲区。

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

于 2015-05-01T00:42:24.500 回答