2011-03-11 10 views
18

Host_A intenta enviar datos a través de TCP Host_B. Host_B está escuchando en el puerto 8181. Tanto Host_A & Host_B son cajas de Linux (Red Hat Enterprise). La capa TCP se implementa utilizando la API Java NIO.TCP: El servidor envía [RST, ACK] inmediatamente después de recibir [SYN] del cliente

Cualquiera que sea Host_A envía, Host_B es incapaz de recibir. Oler los datos en el alambre usando WireShark resultó en el siguiente registro:

1) Host_A (33253)> Host_B (8181): [SYN] Seq = 0 Win = 5,840 Len = 0 MSS = 1460 TSV = 513413781 TSER = 0 WS = 7
2) Host_B (8181)> Host_A (33253): [RST, ACK] Seq = 1 Ack = 1 Win = 0 Len = 0

Los registros muestran que Host_A envía una [ SYN] marca a Host_B para establecer la conexión. Pero en lugar de [SYN, ACK] Host_B responde con un [RST, ACK] que resetea/cierra la conexión. Este comportamiento se observa siempre.

Me pregunto bajo qué circunstancias puede un receptor TCP envía [RST, ACK] en respuesta a una [SYN]?

Respuesta

29

RST, ACK significa que el puerto está cerrado. ¿Seguro que Host_B está escuchando en la IP/interfaz correcta?

también comprobar el servidor de seguridad para un -j REJECT --reject-tcp-reset

+4

Gracias Erik. En realidad, el puerto no está cerrado. Pero descubrió que el puerto 8181 está vinculado a 127.0.0.1 en Host_B en lugar de a la IP real. Parece una mala configuración de/etc/hosts. ¿InetAddress.getByName() de Java prefiere el archivo de hosts a través de DNS? – Riyaz

+2

Si el puerto no está vinculado al IP que le interesa, entonces está cerrado. Los puertos abiertos están representados por la tupla (dst_ip, puerto) e intenta conectarse a uno que no está vinculado. Además, las diversas implementaciones de resolución de direcciones deben comportarse en el orden especificado en '/ etc/nsswitch.conf'. –

+0

Estoy teniendo el mismo problema. Estoy usando la herramienta gaviota, di configuración IP correcta en la configuración, pero siempre es vinculante en 127.0.0.1, ¿Qué debo hacer? – Subbu

Cuestiones relacionadas