【问题标题】:TCP and HASH verificationTCP 和 HASH 验证
【发布时间】:2014-04-26 02:34:38
【问题描述】:

我正在使用 Nodejs 和 Adob​​e AIR 通过 TCP 发送文件,但是对于移动设备,Actionscript 中的哈希变得非常慢。

我的问题是:传输后真的需要验证文件的hash,还是TCP协议保证完整性?

谢谢!

【问题讨论】:

  • TCP 确保按顺序交付和要求传输的数据的完整性。这并不意味着对等方传递给 TCP 的数据一开始就有效。
  • @Asblarf 如果我确定数据有效,不验证哈希是否可以?

标签: node.js flash networking tcp air


【解决方案1】:

根据您发送文件的具体方式,接收方可能无法确切知道它收到了整个文件。在某些情况下,可能会在完全接收到文件之前断开连接。验证文件的校验和(哈希)应确保已收到整个文件。

【讨论】:

  • 我看不出如何在接收者不知情的情况下切断连接。如果他使用一个,他将获得一个读取超时,或者一个异常,或者一个有效的流结束。当且仅当他获得有效的流结束时,才收到整个文件。
  • 大多数 TCP 套接字实现仅表明连接已关闭(通常通过在下一个 read() 返回 0 字节)。除非接收者知道应该有更多数据,否则它无法区分提前关闭和正常关闭之间的区别。这正是 HTTP 在响应和 POST 请求中包含 Content-Length 标头的原因。
  • 我知道连接可能会丢失一些数据包,如果我只是不验证是否所有数据都已传输,则整个文件将无效。在传输开始时发送一个 Content-Length 不是更好更快吗?
  • @Formiga 在中间丢失数据包不会受到伤害 - 您正在使用 TCP,发送方和接收方将合作以确保接收到所有数据包或关闭连接。是的,像 HTTP 的 Content-Length 标头之类的东西会有所帮助——这就是 HTTP 拥有它的原因。但是您问的是 TCP,而不是 HTTP,而且 TCP 没有“预期数据大小”之类的东西。
猜你喜欢
  • 2020-08-11
  • 2014-03-09
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多