这篇论文(当 CRC 和 TCP 校验和不一致时)表明,由于 TCP 校验和算法相当弱,使用 TCP 时每 1600 万到 100 亿个数据包就会发生未检测到的错误。
是否有任何应用程序开发人员通过在应用程序级别添加校验和来保护数据免受此类错误的影响?
在执行 EJB 远程方法调用 (Java EE 5) 时,是否有任何模式可用于防止此类错误?或者 Java 是否已经自动校验和序列化对象(除了底层网络协议)?
企业软件已经在计算机上运行,不仅执行内存 ECC,而且还在 CPU 内的寄存器等(SPARC 和其他)处进行错误检查。使用 Solaris ZFS 可以防止存储系统(硬盘驱动器、电缆等)的位错误。
因为 TCP,我从不害怕网络误码——直到我看到那篇文章。
为一些非常少的客户端服务器远程接口实现应用程序级校验和可能不是很多工作。但是,在单个数据中心的多台机器上运行的分布式企业软件呢?可能有大量的远程接口。
SAP、甲骨文等企业软件供应商是否都忽略了这类问题?银行呢?股票交易软件呢?
跟进:非常感谢您的所有回答!因此,检查未检测到的网络数据损坏似乎非常罕见 - 但它们似乎确实存在。
难道我不能简单地通过将 Java EE 应用程序服务器(或 EJB 部署描述符)配置为使用 RMI over TLS 并将 TLS 配置为使用 MD5 或 SHA1 并通过配置 Java SE 客户端来解决这个问题吗?这是否是一种获得可靠透明校验和的方法(尽管通过矫枉过正),这样我就不必在应用程序级别实现它?还是我完全混淆了网络堆栈?