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. ping
també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 traceroute
ou tracepath
ou mtr
para ver o que está acontecendo no caminho para lá.
dig
- diagnosticar tudo DNS
dmesg | less
ou dmesg | tail
ou 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 ss
comando (do iproute2
novo conjunto padrão de ferramentas de rede Linux) e lsof
como 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 -d
opçõ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.
route
ou o mais recente (no Linux) ip route
- mostra o status da tabela de roteamento.
strace
(ou truss
, dtrace
ou tusc
dependendo 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 gdb
pode permitir que você descubra quando elas são criadas e com quais argumentos.
- para investigar problemas de firewall no Linux:
iptables -nvL
mostra quantos pacotes são correspondidos por cada regra ( iptables -Z
para zerar os contadores). O LOG
destino 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.