Como o protocolo DNS alterna de UDP para TCP?

30

Antes que alguém pergunte: já vi Quando o DNS consultas usam TCP em vez de UDP? e ele não responde à minha pergunta.

Tudo o que eu continuo ouvindo é " se a resposta for muito longa, o DNS usará o TCP ". Isso não explica como isso acontece.

Então, esta é a situação: o cliente DNS solicita a resolução de um registro usando o UDP. O registro é muito longo para o UDP:

  1. respostas do servidor com opcode específico, para que o cliente mude para TCP
  2. o servidor não responde, e o cliente tenta novamente o TCP
  3. o servidor abre a conexão TCP para o cliente (estúpido, se você contar o NAT, mas quem sabe?)
  4. cliente de alguma forma (?) 'sabe' que determinada consulta deve ser executada via TCP, por isso não se incomoda com o UDP em primeiro lugar
  5. As fadas do DNS transformam o UDP em TCP quando necessário

Eu tenho procurado por toda a internet pela resposta, mas há muito barulho (veja acima), e não consigo escrever uma consulta adequada ao Google para isso (nem posso encontrar a informação em RFCs, por exemplo). que importa).

    
por StanTastic 11.06.2015 / 12:51

1 resposta

43

O cliente não sabe de antemão que a resposta será muito grande, por isso consultará o servidor via UDP.
O servidor responderá via UDP e incluirá o máximo possível e definirá o bit de cabeçalho truncado ("TC" link ).
O cliente pode então reenviar o pedido via TCP e obter a resposta completa.

Veja também: link

In the absence of EDNS0 (Extension Mechanisms for DNS 0) (see below), the normal behaviour of any DNS server needing to send a UDP response that would exceed the 512-byte limit is for the server to truncate the response so that it fits within that limit and then set the TC flag in the response header. When the client receives such a response, it takes the TC flag as an indication that it should retry over TCP instead.

E: link

E, como mencionado nos comentários, é claro que as transferências de zona DNS estão sempre usando TCP.

    
por 11.06.2015 / 13:15