다른 사람이 묻기 전에 : DNS 쿼리에서 UDP 대신 TCP를 사용하는 경우는 언제입니까? 내 질문에 대답하지 않습니다.
내가 계속 듣는 것은 " 응답이 너무 길면 DNS는 TCP를 사용할 것 "입니다. 이것은 어떻게 발생하는지 설명하지 않습니다.
상황은 다음과 같습니다. DNS 클라이언트는 UDP를 사용하여 레코드의 해결을 요청합니다. UDP에 대한 레코드가 너무 깁니다.
- 클라이언트가 TCP로 전환하도록 서버에서 특정 opcode로 응답
- 서버가 전혀 응답하지 않고 클라이언트가 TCP를 통해 다시 시도합니다
- 서버는 클라이언트에 대한 TCP 연결을 엽니 다 (NAT를 셀 수 있지만 누가 알겠습니까?)
- 클라이언트는 어떻게 든 주어진 쿼리가 TCP를 통해 실행되어야한다는 것을 '알고'처음에는 UDP를 방해하지 않습니다.
- DNS pixies는 필요할 때 마술로 UDP를 TCP로 바꿉니다.
인터넷을 통해 답을 찾고 있었지만 소음이 많으며 (위 참조) 적절한 Google 쿼리를 작성할 수 없습니다 (RFC에서 정보를 찾을 수는 없습니다) .
1.
그리고 4.
둘 다 대략 정확합니다 (둘 중 상황에 따라 다름).