这篇论文(当 CRC 和 TCP 校验和不一致时)指出,由于 TCP 校验算法相对较弱,使用 TCP 传输的每 1600 万到 100 亿个数据包中会发生一个未被检测到的错误。
是否有应用程序开发人员通过在应用程序层添加校验和来保护数据免受此类错误的影响?
在进行 EJB 远程方法调用(Java EE 5)时,是否有可用的模式来防止此类错误?或者 Java 是否已经自动为序列化对象添加校验和(除了底层网络协议之外)?
企业软件不仅可以在计算机上运行内存 ECC,还可以在 CPU 中的寄存器等位置进行错误检查(SPARC 和其他处理器)。使用 Solaris ZFS 可以防止存储系统(硬盘、电缆等)中的位错误。
因为 TCP 的存在,我从来没有担心过网络位错误,直到看到那篇文章。
对于一些非常少量的客户端-服务器远程接口,实现应用程序级别的校验和可能并不需要太多工作。但是对于在单个数据中心中运行在许多计算机上的分布式企业软件来说,可能会有大量的远程接口。
每个企业软件供应商,例如 SAP、Oracle 等等,都会忽略这种问题吗?银行呢?证券交易软件呢?
跟进:非常感谢您所有的回答!所以似乎检测未检测到的网络数据损坏相当不常见 - 但它们似乎确实存在。
我是否可以通过配置 Java EE 应用程序服务器(或 EJB 部署描述符)使用 TLS 上的 RMI,并将 TLS 配置为使用 MD5 或 SHA1,并配置 Java SE 客户端执行相同操作来解决此问题?这是否是一种获得可靠透明校验和的方法(虽然过度),以便我不必在应用程序级别上实现此功能?或者我对网络堆栈完全困惑了?
是否有应用程序开发人员通过在应用程序层添加校验和来保护数据免受此类错误的影响?
在进行 EJB 远程方法调用(Java EE 5)时,是否有可用的模式来防止此类错误?或者 Java 是否已经自动为序列化对象添加校验和(除了底层网络协议之外)?
企业软件不仅可以在计算机上运行内存 ECC,还可以在 CPU 中的寄存器等位置进行错误检查(SPARC 和其他处理器)。使用 Solaris ZFS 可以防止存储系统(硬盘、电缆等)中的位错误。
因为 TCP 的存在,我从来没有担心过网络位错误,直到看到那篇文章。
对于一些非常少量的客户端-服务器远程接口,实现应用程序级别的校验和可能并不需要太多工作。但是对于在单个数据中心中运行在许多计算机上的分布式企业软件来说,可能会有大量的远程接口。
每个企业软件供应商,例如 SAP、Oracle 等等,都会忽略这种问题吗?银行呢?证券交易软件呢?
跟进:非常感谢您所有的回答!所以似乎检测未检测到的网络数据损坏相当不常见 - 但它们似乎确实存在。
我是否可以通过配置 Java EE 应用程序服务器(或 EJB 部署描述符)使用 TLS 上的 RMI,并将 TLS 配置为使用 MD5 或 SHA1,并配置 Java SE 客户端执行相同操作来解决此问题?这是否是一种获得可靠透明校验和的方法(虽然过度),以便我不必在应用程序级别上实现此功能?或者我对网络堆栈完全困惑了?