À medida que o ping (mais precisamente, solicitações de eco ICMP) faz parte do Protocolo da Internet, sua pilha de rede (que é a implementação do protocolo do seu sistema operacional) atende a essas solicitações.
Não é nem TCP nem UDP nem qualquer outro protocolo de transporte. No cabeçalho da Internet, há um campo de protocolo que indica o tipo de carga útil que o pacote IP contém. Para pacotes TCP, esse campo indica TCP. Para pacotes de ping, indica ICMP.
Entre. este não é o único uso do ICMP. Por exemplo. quando o TTL de um pacote cai para zero enquanto viaja pela rede, ele é descartado e o remetente é notificado por um ICMP pacote.
Se você quer saber como ping (8)
consegue exibir as respostas recebidas de ICMP do espaço do usuário, ele faz isso usando a API de soquete. Esta é a seção relevante do código-fonte:
/* Initialize raw ICMP socket */
proto = getprotobyname ("icmp");
if (!proto)
{
fprintf (stderr, "ping: unknown protocol icmp.\n");
return NULL;
}
fd = socket (AF_INET, SOCK_RAW, proto->p_proto);