Eu acho que os princípios gerais da solução de problemas de rede são:
- Descubra em que nível da pilha TCP / IP (ou outra pilha) ocorre o problema.
- Entenda qual é o comportamento correto do sistema e qual é o desvio do estado normal do sistema
- Tente expressar o problema em uma frase ou em várias palavras
- Usando as informações obtidas no sistema de buggy, sua própria experiência e a experiência de outras pessoas (google, vários fóruns etc.), tente resolver o problema até o sucesso (ou falha)
- Se você falhar, pergunte a outras pessoas sobre ajuda ou algum conselho
Quanto a mim, geralmente obtenho todas as informações necessárias usando todas as ferramentas necessárias e tento associá-las à minha experiência. Decidir qual nível da pilha de rede contém o erro ajuda a eliminar variantes improváveis. Usar a experiência de outras pessoas ajuda a resolver os problemas rapidamente, mas muitas vezes isso leva à situação, que eu posso resolver algum problema sem o seu entendimento e, se esse problema ocorrer novamente, é impossível resolvê-lo novamente sem a Internet.
E, em geral, não sei como resolvo problemas de rede. Parece que há alguma função mágica no meu cérebro chamada SolveNetworkProblem(information_about_system_state, my_experience, people_experience), que às vezes pode retornar exatamente a resposta certa e também pode falhar (como aqui o TCP morre em um laptop Linux ).
Eu normalmente uso utilitários deste conjunto para depuração de rede:
ifconfig(ou ip link, ip addr) - para obter informações sobre interfaces de rede
ping- para validar, se o host de destino estiver acessível na minha máquina. pingtambém pode ser usado para o diagnóstico básico do DNS - podemos executar ping no host pelo endereço IP ou pelo nome do host e depois decidir se o DNS funciona. E então tracerouteou tracepathou mtrpara ver o que está acontecendo no caminho para lá.
dig - diagnosticar tudo DNS
dmesg | lessou dmesg | tailou dmesg | grep -i error- para entender o que o kernel do Linux pensa sobre algum problema.
netstat -antp+ | grep smth- meu uso mais popular do comando netstat, que mostra informações sobre conexões TCP. Freqüentemente eu realizo alguma filtragem usando o grep. Veja também o novo sscomando (do iproute2novo conjunto padrão de ferramentas de rede Linux) e lsofcomo em lsof -ai tcp -c some-cmd.
telnet <host> <port> - é muito útil para se comunicar com vários serviços TCP (por exemplo, em protocolos SMTP, HTTP), também podemos verificar a oportunidade geral de conectar-se a alguma porta TCP.
iptables-save(no Linux) - para despejar as tabelas iptables completas
ethtool - obtenha todos os parâmetros da placa de interface de rede (status do link, velocidade, parâmetros de descarregamento ...)
socat- a ferramenta do exército suíço para testar todos os protocolos de rede (UDP, multicast, SCTP ...). Especialmente útil (mais do que telnet) com algumas -dopções.
iperf - para testar a disponibilidade da largura de banda
openssl( s_client, ocsp, x509...) para depurar todos os problemas SSL / TLS / PKI.
wireshark - a ferramenta poderosa para capturar e analisar o tráfego de rede, que permite analisar e capturar muitos erros de rede.
iftop - mostre grandes usuários na rede / roteador.
iptstate (no Linux) - visão atual do rastreamento de conexão do firewall.
arp(ou o novo (Linux) ip neigh) - mostra o status da tabela ARP.
routeou o mais recente (no Linux) ip route- mostra o status da tabela de roteamento.
strace(ou truss, dtraceou tuscdependendo do sistema) - é uma ferramenta útil que mostra quais chamadas do sistema processa o problema, também mostra códigos de erro (errno) quando as chamadas do sistema falham. Essas informações costumam dizer o suficiente para entender o comportamento do sistema e resolver um problema. Como alternativa, o uso de pontos de interrupção em algumas funções de rede gdbpode permitir que você descubra quando elas são criadas e com quais argumentos.
- para investigar problemas de firewall no Linux:
iptables -nvLmostra quantos pacotes são correspondidos por cada regra ( iptables -Zpara zerar os contadores). O LOGdestino inserido nas cadeias de firewall é útil para ver quais pacotes os alcançam e como eles já foram transformados quando chegam lá. Para ir além NFLOG(associado a ulogd) registrará o pacote completo.