Antes que alguém pergunte: eu já vi Quando as consultas DNS usam TCP em vez de UDP? e isso não responde à minha pergunta.
Tudo o que continuo ouvindo é " se a resposta for muito longa, o DNS usará o TCP ". Isso não explica como isso acontece.
Então, aqui está a situação: o cliente DNS solicita a resolução de um registro usando UDP. O registro é muito longo para o UDP:
- servidor responde com código de operação específico, para que o cliente mude para TCP
- servidor não responde e o cliente tenta novamente por TCP
- servidor abre a conexão TCP com o cliente (estúpido, se você contar NAT, mas quem sabe?)
- de alguma forma, o cliente (?) 'sabe' que a consulta especificada deve ser executada sobre TCP para que não se incomode com o UDP em primeiro lugar
- Os pixies do DNS transformam UDP em TCP quando necessário
Eu tenho procurado por toda a Internet a resposta, mas há muito barulho (veja acima), e não consigo escrever uma consulta adequada do Google para isso (nem consigo encontrar as informações nos RFCs). .
domain-name-system
rfc
StanTastic
fonte
fonte
1.
e4.
ambos estão aproximadamente corretos (qual dos dois depende das circunstâncias).Respostas:
O cliente não sabe antecipadamente que a resposta será muito grande e, portanto, consultará o servidor via UDP.
O servidor responderá via UDP e incluirá o máximo possível e definirá o bit do cabeçalho truncado ("TC" http://www.networksorcery.com/enp/protocol/dns.htm ).
O cliente pode reenviar a solicitação via TCP e obter a resposta completa.
Veja também: https://tools.ietf.org/html/rfc5966
E: https://www.ietf.org/rfc/rfc2181.txt
E, como mencionado nos comentários, é claro que as transferências de zona DNS estão sempre usando o TCP.
fonte