Java 套接字:TCP 校验和不正确

Posted

技术标签:

【中文标题】Java 套接字:TCP 校验和不正确【英文标题】:Java Socket : TCP Checksum Incorrect 【发布时间】:2010-10-14 15:33:53 【问题描述】:

我正在试验 w/java 套接字。我可以连接到套接字并发送/接收数据字节而没有问题。但是我也在使用wireshark嗅探流量,并注意到来自java套接字的每个数据包都被wireshark标记为“tcp校验和不正确”。

有人有什么见解吗?

java 版本“1.6.0_12” Java(TM) SE 运行时环境 (build 1.6.0_12-b04) Java HotSpot(TM) 客户端 VM(内部版本 11.2-b01,混合模式,共享)

Wireshark v1.0.6 w/WinPcap 4.0.2

【问题讨论】:

【参考方案1】:

我发现在很多情况下,使用像 Wireshark 这样的工具会在本地数据包上得到不正确的 tcp 校验和。

这是因为操作系统明智地不会浪费精力在发往本地主机的数据包上填充 tcp 校验和(毕竟它们不可能不正确)。

此外,在真实物理接口上发出的本地生成的数据包可能无论如何都具有硬件生成的 tcp 校验和。这意味着发送的数据包通常看起来像它们的校验和不正确(在网络上,它们是正确的)。

在你的交换机上设置一个监控端口,在一个单独的盒子上运行 Wireshark,你就会看到真实的画面。

【讨论】:

【参考方案2】:

这在 Wireshark wiki here 中有记录。

【讨论】:

以上是关于Java 套接字:TCP 校验和不正确的主要内容,如果未能解决你的问题,请参考以下文章

TCP 校验和能否检测到错误?如果是,如何处理?

释放对象的校验和不正确

转移套接字的 TCP 校验和计算

释放对象的校验和不正确 - 分配问题

realloc 错误:释放对象的校验和不正确

已释放对象的校验和不正确 - 对象在被释放后可能已被修改。我该如何解决?