使用Java套接字时数据有效性是否有保证?

时间:2013-11-26 10:42:09

标签: java validation sockets tcp corruption

注意:我主要关注数据有效性而不是真实性,即我关心数据是否因传输错误而损坏,但不关心恶意用户是否尝试改变并重新发送数据包到原来的目标方(类似于MITM攻击)。

我最近正在构建一个基于TCP的网络协议(特别是使用java的SocketServerSocket),我遇到了一个小问题,关于如何使用可靠的数据从A点传输到B点TCP。

我现在主要关心的是是否在我的自定义数据包结构的有效负载(以及可能的标头)数据中包含SHA-2哈希值。通过一些研究我已经看到TCP确实有自己的ECC,但我也听说它不是特别“强大”。

由于java的Socket基于TCP架构,我的问题是:

  1. Socket类是否保证有效(未损坏/丢失)数据(至少确定我不需要包含我自己的数据校验和)?

  2. 当通过TCP连接发送数据时,java本身(通过任何Java代码基础结构)是否为数据提供附加验证?

2 个答案:

答案 0 :(得分:4)

  1. TCP就是这么做的。与Socket类无关。

  2. Java不会向TCP添加任何内容。

答案 1 :(得分:2)

TCP protocol contains checksums and retransmit machanisms以确保您的数据在途中不会被破坏。如果包损坏(即校验和在接收端不匹配),TCP / IP堆栈将自动要求服务器再次发送该帧。

无需在Socket或Java应用程序层执行任何操作。