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.ping
també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ãotraceroute
outracepath
oumtr
para ver o que está acontecendo no caminho até lá. -
dig
- diagnostica tudo DNS -
dmesg | less
oudmesg | tail
oudmesg | 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
(deiproute2
o novo conjunto padrão de ferramentas de rede Linux) elsof
como 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. -
route
ou o mais recente (no Linux)ip route
- mostra o status da tabela de roteamento. -
strace
(outruss
,dtrace
outusc
dependendo 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 emgdb
pode permitir que você descubra quando elas são feitas 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). OLOG
target 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.