c++ - 谷歌 Protocol Buffer - 位错误的概率以及减少错误的方法

标签 c++ tcp protocol-buffers reliability

我通过 TCP 通过互联网无线 VPN 传输相当大量的 google Protocol Buffer 消息,我觉得我的错误率相对较高(例如, bool 字段从 false 切换为 true 或类似的东西)。介于万分之一到五万分之一之间。

这可能吗?维基百科指出 TCP 的校验和较弱,但这通常在底层协议(protocol)中得到修复:

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

有人知道预期错误率应该是多少吗?如果以上速率是可能的,建议/最简单的修复方法是什么?复制字段?消息发送两次?还是可以采取其他措施来提高可靠性?

谢谢

最佳答案

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

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

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

关于c++ - 谷歌 Protocol Buffer - 位错误的概率以及减少错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611119/

相关文章:

c++ - 拆分用户在参数中输入的字符串

c++ - 旋转的关节位置

c++ - 用于智能指针的 std::atomic 的部分模板特化

protocol-buffers - 如何确定 Protobuf 对象的 protobuf 版本?

由文字分配的字符串的 C++ 管理

c - 在终止我的 TCP/IP 连接后使用 POSIX "write"函数会使我的应用程序崩溃 - 为什么?

linux - 如何同时接受 TCP 连接 <ip :port> in many threads?

python - 接收器丢失通过python中的TCP套接字发送的文件丢失的最后相同字节

java - 处理 Buffer 内多条消息的异常 [JAVA-Mina]

java - 如何用 Java 编写自定义 Protobuf CodeGenerator