Acho que os princípios gerais de solução de problemas de rede são:
- Descubra em que nível pilha TCP / IP (ou alguma 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 informações obtidas do sistema de buggy, sua própria experiência e 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 procuro relacionar essas informações com a minha experiência. Decidir qual nível de pilha de rede contém o bug ajuda a eliminar variações improváveis. Usar a experiência de outras pessoas ajuda a resolver os problemas rapidamente, mas muitas vezes leva à situação, que posso resolver algum problema sem o seu entendimento e se esse problema ocorrer novamente, é impossível para mim 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 poderia retornar exatamente a resposta certa, e também poderia falhar algumas vezes (como aqui TCP morre em um laptop Linux ).
Eu geralmente uso utils deste conjunto para depuração de rede:
-
ifconfig(ouip link,ip addr) - para obter informações sobre interfaces de rede -
ping- para validação, se o host de destino estiver acessível em minha máquina.pingtambém pode ser usado para diagnósticos básicos de DNS - nós poderíamos pingar o host pelo endereço IP ou pelo seu nome de host e então decidir se o DNS funciona. E entãotracerouteoutracepathoumtrpara ver o que está acontecendo no caminho até lá. -
dig- diagnostica tudo DNS -
dmesg | lessoudmesg | tailoudmesg | grep -i error- para entender o que o kernel Linux pensa sobre alguns problemas. -
netstat -antp+| grep smth- meu uso mais popular do comando netstat, que mostra informações sobre conexões TCP. Freqüentemente eu faço alguma filtragem usando o grep. Veja também o novo comandoss(deiproute2o novo conjunto padrão de ferramentas de rede Linux) elsofcomo emlsof -ai tcp -c some-cmd. -
telnet <host> <port>- é muito útil para se comunicar com vários serviços TCP (por exemplo, em SMTP, protocolos HTTP), também pudemos verificar a oportunidade geral de se conectar a alguma porta TCP. -
iptables-save(no Linux) - para descarregar as tabelas completas iptables -
ethtool- obtém 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 opções-d. -
iperf- para testar a disponibilidade de 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 bugs de rede. -
iftop- mostra usuários grandes 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(outruss,dtraceoutuscdependendo do sistema) - é uma ferramenta útil que mostra quais chamadas de sistema o problema processa, também mostra códigos de erro (errno) quando as chamadas do sistema falham. Esta informação geralmente diz o suficiente para entender o comportamento do sistema e resolver um problema. Como alternativa, usar pontos de interrupção em algumas funções de rede emgdbpode permitir que você descubra quando elas são feitas 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). OLOGtarget inserido nas cadeias de firewall é útil para ver quais pacotes os alcançam e como eles já foram transformados quando chegam lá. Para obter maisNFLOG(associado aulogd), registrará o pacote completo.