Creo que los principios generales de la solución de problemas de red son:
- Averigüe en qué nivel de pila TCP / IP (o alguna otra pila) ocurre el problema.
- Comprender cuál es el comportamiento correcto del sistema y cuál es la desviación del estado normal del sistema
- Trate de expresar el problema en una oración o en varias palabras.
- Usando la información obtenida del sistema con errores, su propia experiencia y la experiencia de otras personas (google, varios foros, etc.), intente resolver el problema hasta el éxito (o el fracaso)
- Si falla, pregunte a otras personas sobre ayuda o algún consejo
En cuanto a mí, generalmente obtengo toda la información requerida usando todas las herramientas necesarias, y trato de hacer coincidir esta información con mi experiencia. Decidir qué nivel de pila de red contiene el error ayuda a cortar variantes poco probables. Usar la experiencia de otras personas ayuda a resolver los problemas rápidamente, pero a menudo conduce a una situación, que puedo resolver algún problema sin su comprensión y si este problema vuelve a ocurrir, me es imposible abordarlo nuevamente sin Internet.
Y, en general, no sé cómo resuelvo los problemas de red. Parece que hay una función mágica en mi cerebro llamada SolveNetworkProblem(information_about_system_state, my_experience, people_experience), que a veces podría devolver exactamente la respuesta correcta, y también a veces podría fallar (como aquí TCP muere en una computadora portátil Linux ).
Normalmente uso utilidades de este conjunto para la depuración de la red:
ifconfig(o ip link, ip addr) - para obtener información sobre interfaces de red
ping- para validar, si el host de destino es accesible desde mi máquina. pingtambién se podría usar para diagnósticos básicos de DNS: podríamos hacer ping al host por dirección IP o por su nombre de host y luego decidir si DNS funciona. Y luego tracerouteo tracepatho mtrmirar lo que está sucediendo en el camino.
dig - diagnostica todo DNS
dmesg | lesso dmesg | tailo dmesg | grep -i error- para comprender lo que piensa el kernel de Linux sobre algunos problemas.
netstat -antp+ | grep smth: mi uso más popular del comando netstat, que muestra información sobre las conexiones TCP. A menudo realizo algunos filtros usando grep. Consulte también el nuevo sscomando (del iproute2nuevo conjunto estándar de herramientas de red de Linux) y lsofcomo en lsof -ai tcp -c some-cmd.
telnet <host> <port> - es muy útil para comunicarse con varios servicios TCP (por ejemplo, en protocolos SMTP, HTTP), también podríamos comprobar la oportunidad general de conectarse a algún puerto TCP.
iptables-save(en Linux) - para volcar las tablas completas de iptables
ethtool - Obtenga todos los parámetros de la tarjeta de interfaz de red (estado del enlace, velocidad, parámetros de descarga ...)
socat- La herramienta del ejército suizo para probar todos los protocolos de red (UDP, multidifusión, SCTP ...). Especialmente útil (más que Telnet) con algunas -dopciones.
iperf - para probar la disponibilidad de ancho de banda
openssl( s_client, ocsp, x509...) para depurar todas las cuestiones SSL / TLS / PKI.
wireshark - La poderosa herramienta para capturar y analizar el tráfico de red, que le permite analizar y detectar muchos errores de red.
iftop - Mostrar grandes usuarios en la red / enrutador.
iptstate (en Linux): vista actual del seguimiento de la conexión del firewall.
arp(o el nuevo (Linux) ip neigh): muestra el estado de la tabla ARP.
routeo el más nuevo (en Linux) ip route: muestra el estado de la tabla de enrutamiento.
strace(o truss, dtraceo tuscdependiendo del sistema): es una herramienta útil que muestra qué llamadas del sistema procesa el problema, también muestra códigos de error (errno) cuando fallan las llamadas del sistema. Esta información a menudo dice lo suficiente para comprender el comportamiento del sistema y resolver un problema. Alternativamente, el uso de puntos de interrupción en algunas funciones de red gdbpuede permitirle saber cuándo se realizan y con qué argumentos.
- para investigar problemas de firewall en Linux:
iptables -nvLmuestra cuántos paquetes coinciden con cada regla ( iptables -Zpara poner a cero los contadores). El LOGobjetivo insertado en las cadenas de firewall es útil para ver qué paquetes les llegan y cómo ya se han transformado cuando llegan allí. Para llegar más lejos NFLOG(asociado con ulogd) se registrará el paquete completo.