나는 그 질문 (제목에있는 질문)에 대한 답을 찾고 있었고 내가 찾은 가장 좋은 것은 다음과 같습니다.
DNS 프로토콜 디자인에서 UDP 전송 블록 크기 (페이로드 크기)는 최소 네트워크 트래픽을 생성하면서 성능을 최적화하기 위해 512 바이트로 제한되었습니다.
내 질문은 : 이것이 정확히 성능을 어떻게 향상시키고 UDP를 사용할 때이 제한에 대한 다른 이유가 있습니까?
나는 그 질문 (제목에있는 질문)에 대한 답을 찾고 있었고 내가 찾은 가장 좋은 것은 다음과 같습니다.
DNS 프로토콜 디자인에서 UDP 전송 블록 크기 (페이로드 크기)는 최소 네트워크 트래픽을 생성하면서 성능을 최적화하기 위해 512 바이트로 제한되었습니다.
내 질문은 : 이것이 정확히 성능을 어떻게 향상시키고 UDP를 사용할 때이 제한에 대한 다른 이유가 있습니까?
답변:
512 바이트 페이로드는 전송 중에 조각화 된 경우 DNS 패킷을 재 조립할 수 있도록 보장합니다. 또한 일반적으로 작은 패킷이 임의로 삭제 될 가능성이 적습니다.
IPv4의 표준 지정은 모든 호스트가 576 바이트 이하의 재 조립 패킷 수 있어야합니다. IPv4 헤더 (20 바이트, 옵션 당 60 바이트까지 가능)와 8 바이트 UDP 헤더를 사용하면 512 바이트 페이로드가있는 DNS 패킷은 576 바이트보다 작습니다.
@RyanRies가 말한 것처럼 : DNS는 더 큰 페이로드와 영역 전송 및 DNSSEC에 TCP를 사용할 수 있습니다. UDP와 달리 데이터가 흐르기 전에 클라이언트와 서버간에 핸드 셰이크가 있기 때문에 TCP가 작동 할 때 대기 시간이 훨씬 더 길어집니다.
최신 DNS는 실제로 더 이상 UDP의 512 바이트 페이로드로 제한되지 않습니다.
함께 EDNS0 사용에 큰 페이로드 크기는 DNSSEC 인식 클라이언트의 경우 일반적으로 또한 인을 지정할 수 있습니다.
UDP를 통한 더 큰 페이로드에 대한 지원은 양날의 검 이었지만 부분적으로는 증폭 공격에 네임 서버를 사용하여 공격자가 큰 응답을 얻는 쿼리를 사용하는 경우 더 나은 증폭을 얻을 수 있기 때문에 더 인기가 있는 이유입니다. .
EDNS0에 대한 자세한 내용은 rfc2671 을 참조하십시오.
DNS 작업 (예 : 쿼리 및 영역 유지 관리 작업)은 기본적으로 포트 53을 사용합니다. 성능상의 이유로 쿼리는 블록 크기 제한 512 바이트의 UDP 프로토콜을 사용합니다. TCP는 쿼리 작업을 위해 트랜잭션별로 트랜잭션을 기준으로 선택적으로 협상 할 수 있지만 TCP와 관련하여 발생하는 성능 오버 헤드로 인해 이론적 인 기능입니다. 역사적으로 512 바이트 응답 크기 제한을 초과하는 것은 일반적으로 모든 비용으로 피할 수 있었으며 실제로 13 개의 IPv4 루트 서버 제한은 단일 512 바이트 UDP 트랜잭션으로 반환 될 수있는 최대 값이었습니다.
Ron Aitchison-Pro DNS 및 BIND 10-2011
그것은 QOS 일입니다.
UDP는 상태 비 저장이므로 패킷의 오류 처리가 불가능합니다.
따라서 패킷을 최대 크기로 유지하면 대상에 도달 할 때 더 큰 변화가 발생하여 오류 처리가 없을 때의 영향이 줄어 듭니다.