注意:我主要关注数据有效性而不是真实性,即我关心数据是否因传输错误而损坏,但不关心恶意用户是否尝试改变并重新发送数据包到原来的目标方(类似于MITM攻击)。
我最近正在构建一个基于TCP的网络协议(特别是使用java的Socket
和ServerSocket
),我遇到了一个小问题,关于如何使用可靠的数据从A点传输到B点TCP。
我现在主要关心的是是否在我的自定义数据包结构的有效负载(以及可能的标头)数据中包含SHA-2
哈希值。通过一些研究我已经看到TCP确实有自己的ECC,但我也听说它不是特别“强大”。
由于java的Socket
基于TCP架构,我的问题是:
Socket
类是否保证有效(未损坏/丢失)数据(至少确定我不需要包含我自己的数据校验和)?
当通过TCP连接发送数据时,java本身(通过任何Java代码基础结构)是否为数据提供附加验证?
答案 0 :(得分:4)
TCP就是这么做的。与Socket类无关。
Java不会向TCP添加任何内容。
答案 1 :(得分:2)
TCP protocol contains checksums and retransmit machanisms以确保您的数据在途中不会被破坏。如果包损坏(即校验和在接收端不匹配),TCP / IP堆栈将自动要求服务器再次发送该帧。
无需在Socket或Java应用程序层执行任何操作。