У нас есть протокол 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!
Фактический клиент и серверы используют IOCP, но мое тестовое приложение использует С# 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()
Есть ли какие-либо дополнительные тесты, чтобы рекомендовать получить дополнительную информацию/решить эту проблему? Моя догадка заключалась в том, что его оборудование/драйверы повреждены, но он утверждает, что у него нет проблем с каким-либо другим приложением или интернетом в целом.