2
我目前正在用Java构建一个透明代理。这个透明代理放置在客户端和服务器之间,使用iptables重定向TCP流。Java套接字缓冲区问题
从视TCP通信的点,我有以下的对话框:
Client Server | ---- TCP Packet 1 ---> | | ---- TCP Packet 2 ---> | | <--- TCP Packet 3 ---- | | <--- TCP Packet 4 ---- |
从视透明代理的点(使用套接字),我得到:
Client Server | ---- TCP Payloads from packet 1 + 2 ---> | | <--- TCP Payloads from packet 3 + 4 ---- |
我的问题是套接字将多个TCP有效载荷放在一起。我想避免这种行为。
我可以用数据包的大小来避开这个问题,但这个大小并不是恒定的。我尝试过使用tcpNoDelay选项,但也没有运气。我使用网络框架netty,但我遇到了同样的问题。
有没有办法避免Java中的TCP有效载荷连接?
谢谢你的回答。为了您对数据包进行框架化的回答,我应该添加一个事实,即一切都在localhost上完成。另外,我使用Wireshark验证没有碎片。我有多个数据包的事实来自服务器和客户端之间的协议。另外,我使用Python完成了一个类似的代理,而且我没有问题。 – 2011-03-14 11:03:58
@Jeff E:python变种的作品只是运气 - 你永远不能依赖TCP保持从发送者到接收者的数据包大小 – Erik 2011-03-14 11:08:18