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


14

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

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

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


5
이 질문은 실제로 잘못된 전제를 기반으로합니다 (최소한 오래된 것). 512 바이트 페이로드 제한은 더 이상 없습니다. 아래 답변을 참조하십시오.
Håkan Lindqvist

답변:


18

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

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

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


7
관련 참고 사항 : 항상 13 개의 루트 DNS 확인자 이름 (a.root-servers.net에서 m.root-servers.net까지)이있는 이유는 쿼리에 대한 DNS 응답에 맞는 최대 수이기 때문입니다. 512 바이트 제한을 초과하지 않는 루트 따라서 루트 DNS 인프라에 물리적 서버를 더 추가하더라도 논리적으로 항상 13 개의 루트 서버가 유지됩니다.
phoebus

2
@RyanRies 허용되는 페이로드가 더 큰 DNSSEC EDNS0의 경우 실제로 TCP가 아닌 정상 작동 모드입니다.
Håkan Lindqvist

1
허용되는 최소 MTU는 576 바이트가 아니며 IPv4의 경우 68 바이트, IPv6의 경우 1280 바이트입니다.
kasperd

1
@phoebus 14 대의 서버에서 13 대의 서버가 512 바이트를 초과하지 않는 방법을 보여줄 수 있습니까? 그 뒤에 계산은 무엇입니까?
Titi Wangsa bin Damhore

1
512 + 60 + 8 = 580 바이트, 576 바이트, 아니오?
Carlo Wood

12

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

함께 EDNS0 사용에 큰 페이로드 크기는 DNSSEC 인식 클라이언트의 경우 일반적으로 또한 인을 지정할 수 있습니다.

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

EDNS0에 대한 자세한 내용은 rfc2671 을 참조하십시오.


2
이것은 사실이지만 512 바이트가 넘는 UDP DNS 패킷을 삭제하는 라우터와 방화벽이 여전히 있습니다.
Ryan Ries

2
@RyanRies 예, 물론 오늘날의 표준에서는 잘못된 것으로 간주되는 행동이지만 여전히 문제를 일으키는 원인이됩니다. (이론에 제한이있는 경우 이론적으로는 처리 능력을
알리지

1

DNS 작업 (예 : 쿼리 및 영역 유지 관리 작업)은 기본적으로 포트 53을 사용합니다. 성능상의 이유로 쿼리는 블록 크기 제한 512 바이트의 UDP 프로토콜을 사용합니다. TCP는 쿼리 작업을 위해 트랜잭션별로 트랜잭션을 기준으로 선택적으로 협상 할 수 있지만 TCP와 관련하여 발생하는 성능 오버 헤드로 인해 이론적 인 기능입니다. 역사적으로 512 바이트 응답 크기 제한을 초과하는 것은 일반적으로 모든 비용으로 피할 수 있었으며 실제로 13 개의 IPv4 루트 서버 제한은 단일 512 바이트 UDP 트랜잭션으로 반환 될 수있는 최대 값이었습니다.

Ron Aitchison-Pro DNS 및 BIND 10-2011


감사. 우리가 인용의 출처를 알 수 있습니까?
Pothi Kalimuthu

-2

그것은 QOS 일입니다.

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

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


패킷이 크다고해서 UDP가 TCP로 장애 조치된다는 의미는 아닙니다. 나는 당신이 말하는 것을 오해하고 있습니까?
mfinni

당신 말이 맞을 것입니다. 나는 제안 된 RFC에서 어딘가에 그것을 읽은 것으로 생각합니다.
Garreth McDaid

UDP는 페일 오버되지 않지만 DNS의 경우 특히 UDP를 사용할 때 응답이 너무 커서 응답이 잘리지 않으면 잘린 응답이 발생합니다 (실제 응답에는 모든 데이터가 포함되어 있지 않으며 'truncated'플래그는이를 표시하도록 설정되어 있음) 그러면 클라이언트는 대신 TCP를 사용하여 다시 시도 할 수 있습니다.
Håkan Lindqvist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.