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