UDP를 통한 DNS에 512바이트 제한이 있는 이유는 무엇입니까?

UDP를 통한 DNS에 512바이트 제한이 있는 이유는 무엇입니까?

나는 그 질문(제목에 있는 질문)에 대한 답변을 찾고 있었는데, 내가 찾은 가장 좋은 답변은 다음과 같습니다.

DNS 프로토콜 설계에서는 최소한의 네트워크 트래픽을 생성하면서 성능을 최적화하기 위해 UDP 전송 블록 크기(페이로드 크기)가 512바이트로 제한되었습니다.

내 질문은 이것이 정확히 어떻게 성능을 향상시키는가이며 UDP를 사용할 때 이 제한에 대한 다른 이유가 있습니까?

답변1

512바이트 페이로드는 DNS 패킷이 전송 중에 조각화되는 경우 재조립될 수 있도록 보장합니다. 또한 일반적으로 작은 패킷이 무작위로 삭제될 가능성이 적습니다.

그만큼IPv4 표준모든 호스트가 576바이트 이하의 패킷을 재조립할 수 있어야 함을 지정합니다. IPv4 헤더(20바이트, 옵션을 포함하면 최대 60바이트까지 가능)와 8바이트 UDP 헤더를 사용하면 512바이트 페이로드가 있는 DNS 패킷은 576바이트보다 작습니다.

@RyanRies가 말했듯이 DNS는 더 큰 페이로드와 영역 전송 및 DNSSEC에 TCP를 사용할 수 있습니다. UDP와 달리 데이터 흐름이 시작되기 전에 클라이언트와 서버 간에 핸드셰이크가 있기 때문에 TCP가 작동할 때 대기 시간이 훨씬 더 길어집니다.

답변2

최신 DNS는 실제로 더 이상 UDP의 페이로드를 512바이트로 제한하지 않습니다.

와 함께EDNS0사용 중에는 더 큰 페이로드 크기를 지정할 수 있으며 이는 일반적으로 DNSSEC 인식 클라이언트의 경우에도 마찬가지입니다.

UDP를 통한 더 큰 페이로드에 대한 지원은 양날의 검이었지만 부분적으로는 네임서버를 사용하는 이유이기도 합니다.증폭 공격공격자가 큰 응답을 얻는 쿼리를 사용하는 경우 더 나은 증폭을 달성할 수 있기 때문에 더 인기를 얻었습니다.

보다RFC2671EDNS0의 핵심 세부정보

답변3

쿼리 등의 DNS 작업과 영역 유지 관리 작업은 기본적으로 포트 53을 사용합니다. 성능상의 이유로 쿼리는 블록 크기 제한이 512바이트인 UDP 프로토콜을 사용합니다. TCP는 쿼리 작업을 위해 트랜잭션별로 선택적으로 협상될 수 있지만 TCP에서 발생하는 성능 오버헤드로 인해 이는 본질적으로 이론적인 기능입니다. 역사적으로 512바이트 응답 크기 제한을 초과하는 것은 일반적으로 무슨 수를 써서라도 방지되었으며 실제로 13개의 IPv4 루트 서버 제한은 단일 512바이트 UDP 트랜잭션에서 반환될 수 있는 최대값이었습니다.

Ron Aitchison - 프로 DNS 및 BIND 10 - 2011

답변4

QOS 문제입니다.

UDP는 상태 비저장이므로 패킷 오류 처리가 불가능합니다.

따라서 패킷을 최대 크기로 유지하면 목적지에 도달할 때 더 큰 변화가 발생하여 오류 처리 부재로 인한 영향이 줄어듭니다.

관련 정보