gpt4 book ai didi

c# - 当数据以 '1c' 开头时,TCP 数据包不会从俄罗斯到达加拿大

转载 作者:IT王子 更新时间:2023-10-29 04:31:40 24 4
gpt4 key购买 nike

我们有一个 TCP 流协议(protocol),我们在数据负载前加上大小前缀。因此,数据在接收时可以正确解码。非常标准的东西。

这适用于成千上万的人。不幸的是,我们至少有 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!

实际的客户端和服务器使用 IOCP,但我的测试应用程序使用 C# TcpListenerTcpClient,完全没有自定义选项标志。

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()

是否有任何进一步的测试可以推荐以获取更多信息/解决此问题?我的直觉是他的硬件/驱动程序已损坏,但他声称一般情况下任何其他应用程序或互联网都没有问题。

最佳答案

可能是其中一个终端链接通过移动运营商?

我没有数据了,但由于我们处于推测领域,我记得不久前意大利移动运营商也遇到过类似问题:显然,数据连接上的特定位序列会丢失载体。隐约类似于+++ATH0 旧的“ping”技巧。

您能否尝试通过另一种媒体(例如 netcat 流)发送类似的序列 (1c0000000....)?

关于c# - 当数据以 '1c' 开头时,TCP 数据包不会从俄罗斯到达加拿大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com