Spi*_*ish 22 c# sockets tcp packets
我们有一个TCP流协议,我们通过大小为数据有效负载添加前缀.因此,数据可以在收到时正确解码.很标准的东西.
这对成千上万的人来说很好.不幸的是,我们至少有4个客户端存在连接问题的案例,都在偏远国家.俄罗斯的一位客户已经能够帮助我们进行大量测试并缩小问题范围.如果我们发送一个强制前缀大小为0的数据包,则整个数据包将通过.如果数据包数据以数据包开始1c将无法通过.
我有两个并排的Wireshark从他的电脑中捕获,显示:
Working
-------
Russia -> Toronto [SYN]
Toronto -> Russia [SYN, ACK]
Russia -> Toronto [ACK]
Russia -> Toronto [PSH,ACK] <- data is sent here
00000000000000001c0000000000000000000000000000000000000000000000
Toronto -> Rusion [PSH,ACK] <- server in toronto got the data, sent a reply!
Not-Working
--------
Russia -> Toronto [SYN]
Toronto -> Russia [SYN, ACK]
Russia -> Toronto [ACK]
Russia -> Toronto [PSH,ACK] <- data is sent here
1c000000000000001c0000000000000000000000000000000000000000000000
Russia -> Toronto [PSH,ACK] <- TCP Retransmission
Russia -> Toronto [PSH,ACK] <- TCP Retransmission
Russia -> Toronto [PSH,ACK] <- TCP Retransmission
Russia -> Toronto [PSH,ACK] <- TCP Retransmission
Server in Toronto never gets the packet from Russia!
Run Code Online (Sandbox Code Playgroud)
实际的客户端和服务器使用IOCP但我的测试应用程序使用C#TcpListener并且TcpClient根本没有自定义选项标志.
Not actual code
--------------
var client = new TcpClient()
client.Connect(host, port)
client.GetStream().Write()
client.GetStream().Read()
var listener = new TcpListener(port);
listener.Start();
var serverClient = listener.AcceptTcpClient();
serverClient.GetStream().Read()
serverClient.GetStream().Write()
Run Code Online (Sandbox Code Playgroud)
是否有任何进一步的测试建议获取更多信息/解决此问题?我的预感是他的硬件/驱动程序已损坏,但他声称与任何其他应用程序或互联网一般没有任何问题.
是否有可能最终链路之一是通过移动运营商进行的?
我不再有这些数据了,但由于我们处于猜测的范围,我记得不久前意大利一家移动运营商也遇到过类似的问题:显然,数据连接上的某些位序列会导致运营商中断。有点类似于 +++ATH0 老的“ping”技巧。
您能否尝试通过另一种介质(例如 netcat 流)发送类似的序列(1c0000000....)?
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |