首页 文章

Java TCP拆分包

提问于
浏览
0

我正在使用spring-integration TCP连接 . 从Serializer实现中,我将一些字节直接写入给定的OutputStream .

第一个字节似乎是自己发送的(在它自己的TCP数据包中,这是由wireshark报告错误的方式),然后是下一个数据包中的剩余字节 .

更改要在一次调用中写入的前两个字节(两个字节长的数组)会导致这两个字节以单独的数据包(未发生格式)发送,并在下一个数据包中重新发送 . 这个结果是可重复的 .

这是我可以(或应该)影响的事情吗?它在读取端引起问题,因为该设备显然希望整个消息包含在单个TCP数据包中 .

1 回答

  • 3

    这是我能(或应该)影响的事吗?它在读取端引起问题,因为该设备显然希望整个消息包含在单个TCP数据包中 .

    然后这个应用程序的作者不知道TCP . TCP是基于流的而不是基于分组的协议 . 这意味着单个写入可能导致线路上的多个数据包,或者多次写入可能导致单个数据包 .

    ...顺便说一句,这是由wireshark报告的错误...

    如果捕获发送方系统上的数据包,您可能会看到将校验和计算卸载到网卡的影响 . 在这种情况下,wireshark将报告校验和错误 . 如果捕获中间或接收端的数据包,则应该看到正确的校验和,因为发送方计算机上的网卡在转发数据包之前计算了校验和 .

相关问题