Qual processo do Linux é responsável por responder aos pings?

39

Eu tenho um controlador de processo baseado em Linux que ocasionalmente trava até o ponto em que você não pode executá-lo (ou seja, eu posso executá-lo, então ele não se torna mais executável sem modificações nas configurações de rede).

Estou curioso, qual processo / sistema é responsável por realmente responder aos pings? Parece que este processo está falhando.

Izzo
fonte
Você ainda pode fazer isso enquanto não responde a pings? Ou as sessões SSH existentes são bloqueadas?
22818 Peter Cordes
@PeterCordes Todo o sistema trava e é essencialmente um bloco até forçar uma reinicialização.
Izzo
3
Ok, normalmente é a única maneira de uma máquina parar de responder a pings. Seria estranho se os pings parassem de funcionar, mas outras coisas continuassem funcionando, porque a manipulação de ping funciona mesmo que o espaço do usuário seja armazenado e tudo esteja bloqueado na E / S do disco para um disco morto ou montagem NFS ou qualquer outra coisa. Tente conectar um monitor ao seu sistema e veja se há uma mensagem do console enquanto ele trava. (E se você pode usar as seqüências de teclado mágica SysRq para informações despejo, ou remontar somente leitura, força-sync o discos + reinicialização.
Peter Cordes
2
Embora sua pergunta seja interessante, o ping não é a fonte dos problemas do seu sistema, mas uma consequência de um sistema instável. Verifique os logs para entender o que está errado.
Pedro Lobito
@PedroLobito O que registra especificamente?
Izzo

Respostas:

56

A pilha de rede do kernel está manipulando mensagens ICMP, que são aquelas enviadas pelo pingcomando.

Se você não obtiver respostas, além de problemas de rede ou filtragem, e filtragem baseada em host / limitação de taxa / black-holing / etc. significa que a máquina provavelmente está sobrecarregada por algo que pode ser transitório ou o kernel travou, o que é raro, mas pode acontecer (hardware defeituoso, etc.), não necessariamente por causa do tráfego ICMP (mas tentando sobrecarregá-lo com esse tráfego) pode ser um bom teste no início da vida de um servidor para ver como ele sustenta as coisas). No caso posterior de falha do kernel, você deve ter informações amplas nos arquivos de log ou no console.

Observe também que pingquase sempre é a ferramenta errada para verificar se um serviço está online ou não. Por várias razões, mas principalmente porque não imita o tráfego real de aplicativos, por definição. Por exemplo, se você precisar verificar se um servidor da web ainda está ativo, faça uma consulta HTTP (porta TCP 80 ou 443); se precisar verificar um servidor de correio, faça uma consulta SMTP (porta TCP 25), se um servidor DNS, um UDP e uma consulta TCP para a porta 53, etc.

Patrick Mevzek
fonte
4
@Outurnate qualquer outro teste de serviço de aplicativo falharia ou estaria com um tempo limite, para que o resultado final observado fosse o mesmo. Eu nunca perco a oportunidade de fazer uma palestra contra o uso, pingpois isso cria muitos falsos positivos na solução de problemas, por isso acho que os usuários não sabem exatamente o que o ping faz e como ele pode dar resultados enganosos devem ficar com outra coisa.
Patrick Mevzek
2
Na maioria das situações de sobrecarga, as únicas coisas que ainda respondem são aquelas feitas pelo kernel. Isso significa que uma máquina geralmente responde ao ping, independentemente da sobrecarga. Tentativas de alcançar uma porta fechada responderão com o RST para TCP e um erro ICMP no caso de UDP. E as primeiras tentativas de alcançar uma porta TCP aberta concluirão um aperto de mão. Uma falha no disco pode levar aos mesmos sintomas.
precisa saber é
@kasperd Eu vi servidores (muito) sobrecarregados (trocando os especificamente) também não respondendo a solicitações de ICMP. E, claro, para mais nada também. O kernel não travou, estava apenas ocupado com as coisas de E / S do disco.
Patrick Mevzek
2
@Nacht Yup. Uma interface de rede é um dispositivo HW; como tal, existe um driver do kernel para interagir com ele. Uma segunda camada fornece APIs de gerenciamento / comunicação genéricas. (Isso não é exclusivo da rede: há ALSA para desenvolvedores de áudio, as saídas de vídeo usam a API do KMS, o USB possui {U, E, X} HCI e, em seguida, usb_storage, usbhid etc.) Tabelas de roteamento de rede, regras de firewall (via iptables ), handshaking, montagem de pacotes, retransmissões etc. estão todos no kernel. Como o ICMP é um protocolo em si, sem carga útil e sem processamento além de "responder ou não", o kernel lida com as respostas do ICMP diretamente para obter um mínimo de sobrecarga.
Ferd
5
@Nacht: Não se trata realmente de arquitetura básica de computadores; é uma escolha de implementação. Os microkernels manipularão o ICMP em um processo do SO.
precisa saber é o seguinte
11

Não há um processo de terra do usuário responsável por responder a pings. Ping é apenas um utilitário para enviar pacotes de eco ICMP. Estes são recebidos e processados ​​pela pilha de rede do kernel

Outurnate
fonte
9

O kernel em si (não qualquer processo de usuário) é responsável para enviar ICMP echo responder mensagens em resposta a ICMP Echo Request mensagens. Portanto, se um host parar de responder a pings, isso geralmente ocorre devido a alguns dos seguintes motivos:

  • a conectividade de rede entre você e o host sendo pingado pode ter sido interrompida. Isso pode ser devido a várias razões: danos físicos aos cabos, ruído no caso de conexões sem fio, tabelas de rotas quebradas, você estar sob ataque de DDoS, roteadores / switches problemáticos no meio etc. Você iniciaria a solução de problemas neste caso usando ethtool(8), iwconfig(8), route(8), ping(8)o roteador, tcpdump(8)etc. no hospedeiro alvo.

  • A configuração do firewall no host de destino (ou qualquer roteador / firewall entre você e o host de destino) pode limitar a quantidade de pings (ou a quantidade de tráfego de tráfego). Também pode ser devido a ferramentas como fail2ban(8)firewalls sob demanda. Veja iptables(8)para verificar.

  • houve um mau funcionamento de software / hardware no host de destino. O módulo do kernel de rede no host de destino pode ter OOPSed e / ou ficar confuso, ou mesmo o kernel inteiro pode ter o PANICked. Você verá mensagens sobre at in dmesg(8)no host de destino ou como saída de tela no console físico (se o acesso físico for impraticável, outra máquina com console serial pode ajudar.) Se o problema com o OOPS / PANIC do kernel, o kernel mais novo com drivers melhores poderá ajuda, ou você pode discutir os bloqueios do sistema com os watchdog(8)drivers auxiliares. Ou você pode alterar as peças de hardware.

Matija Nalis
fonte
2
Para os interessados, aqui está o código do kernel relevante para lidar com solicitações de eco do ICMP.
Ruslan
você também deve mencionar carga muito alta (especialmente CPU)
Guilherme Bernal
@GuilhermeBernal não, mesmo a carga extremamente alta do usuário da CPU (em milhares) não levará à perda de ICMP (porque é servida no kernel, antes que os processos do usuário tenham a chance de executar). Extremamente alta rede taxa de PPS em combinação com hardware de gama baixa pode causar perda de pacotes, mas tais DDoS cai na categoria "rede de conectividade"
Matija Nalis