socket example c# sockets tcp packets

c# - example - El paquete TCP no llegará de Rusia a Canadá cuando los datos comiencen con ''1c''



socket c# example (1)

Tenemos un protocolo de flujo TCP donde prefijamos nuestra carga de datos por el tamaño. Entonces los datos pueden decodificarse adecuadamente cuando se reciben. Bastante estándar.

Esto está funcionando bien para miles de personas. Desafortunadamente, tenemos al menos 4 casos reportados de clientes que tienen problemas de conexión, todos en países remotos. Un cliente en Rusia ha podido ayudarnos a realizar muchas pruebas y reducir el problema. Si enviamos un paquete donde el tamaño del prefijo es forzado a ser 0, entonces todo el paquete pasará. Si los datos del paquete comienzan con 1c el paquete no pasará.

Tengo dos capturas de Wireshark lado a lado de su computadora que muestran esto:

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!

El cliente y los servidores reales usan IOCP pero mi aplicación de prueba usa C # TcpListener y TcpClient sin TcpClient banderas de opciones personalizadas.

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

¿Hay alguna prueba adicional para recomendar para obtener más información / resolver esto? Mi presentimiento era que su hardware / controladores están corruptos, pero él dice que no tiene problemas con ninguna otra aplicación o internet en general.


¿Podría ser que uno de los enlaces finales esté sobre un operador de telefonía móvil?

Ya no tengo los datos, pero dado que estamos en el terreno de las especulaciones, recuerdo un problema similar con un operador de telefonía móvil italiano hace un tiempo: aparentemente, una cierta secuencia de bits sobre una conexión de datos dejaría de funcionar. Vagamente similar al +++ ATH0 viejo truco ''ping''.

¿Podría intentar enviar una secuencia similar (1c0000000 ....) a través de otro medio, digamos una transmisión de netcat?