DNS Round Robin : 브라우저가 온라인 상태 인 한 IP를 고수합니까?


14

대부분의 브라우저는 DNS 서버에서 여러 개의 A 레코드를받을 경우 어떻게 작동합니까? 도달 할 수있는 한 하나의 IP에 고정되어 있습니까 (IP가 작동하지 않는 경우에만 사용)? 아니면 아무 이유없이 항상 전환합니까?

대부분의 최신 브라우저가 하나의 IP에 고정되어 있으면 DNS-RR로 간단한 장애 조치 솔루션으로 충분합니다.


1
귀하의 질문에 직접 대답 할 수는 없지만 브라우저와 OS 수준에서 캐싱을 처리해야한다고 지적합니다! 재미있게 보내세요 :)
SpacemanSpiff


1
@Iain-멋진 링크
SpacemanSpiff

백엔드에 사용할 머신은 몇 대입니까? 액티브-패시브가있는 2 대의 시스템이 정상이면 세 번째 IP 주소를 가져 와서 하트 비트를 사용하여 물리적 시스템간에 장애 조치를 수행하십시오. 또는 ultramonkey는 단일 클라이언트와 거의 동일한 소스 IP를 기반으로 백엔드에 할당을 지원한다고 생각합니다 . 각 백엔드에 고유 한 쿠키를 설정하고 쿠키에 따라 백엔드에 대한 프론트 엔드 웹 서버 프록시를 사용하여 무언가를 해킹 할 수도 있습니다. (아파치의 mod_rewrite가 가능할 것입니다.)
jon

모든 브라우저에 적용되는 단일 규칙은 없으므로 최소한 관심있는 브라우저를 지정해야합니다.
John Gardeniers

답변:


7

각 브라우저에는 라운드 로빈 DNS를 처리하는 자체 방법이 있으며 오늘이 문제를 연구하는 데 시간을 보냈으며 구현 증거를 찾으면 내 응답을 업데이트하여 브라우저에 대한 응답을 제한하는 브라우저에 대한 응답을 제한합니다.

구글 크롬

Chrome (v58 사용)은 주소 (A, AAAA, CNAME)에 대한 모든 호스트 항목을 요청하여 배열 ( address_list )에 넣습니다 . 그런 다음 Chrome은 처음부터 끝까지 각 IP 주소에서 소켓을 열려고 시도합니다. 크롬은 가장 빠르거나 가장 가까운 IP를 시도하지 않으며 첫 번째 IP (업스트림 DNS 리졸버가 제공 한)가 최상의 IP라고 가정합니다. 내 테스트에서 바인드 및 Windows DNS 서버는 조회마다 다른 순서의 IP를 제공하여 각 IP에 대한 대역폭의 50/50 분할처럼 보입니다. 이 기능은chrome://net-internals/#events&q=type:SOCKET%20is:active

컬 (libcurl / 7.54.0)

컬은 또한이 장애 조치 기능을 가지고 있지만 --connect-timeout크롬의 기본값보다 훨씬 깁니다. 크롬은 즉시 페일 오버하지만 컬은 그렇지 않습니다. libcurl을 사용하고 하나의 IP가 실패하는 라운드 로빈 dns 인스턴스에서 살아남 으려면 (크롬에서는 작동하지만 코드에서는 작동하지 않음)이 값을 더 낮게 지정해야합니다.

DEFAULT_CONNECT_TIMEOUT : 0 컬이 불가능하다고 생각했습니다.

* After 149990ms connect time, move on!

브라우저 모두 에서 IP는 고정적 이지 않았 으며 DNS에 제공된 TTL을 따르고 ttl이 만료되면 (크롬에서 내부적으로 유지 보수하고 각 요청에서 curl을 요청 함) 위에서 설명한대로 매번 IP 선택이 수행됩니다.

이것은 무엇을 의미 하는가? DNS-RR은 일부 시스템에는 문제가 없지만 장애 조치 용으로 설계되지 않았습니다. DNS로 보이는 모든 결과가 (진실한 소스) 유효하고 트래픽을 처리 할 수 ​​있어야합니다. 가상 플로트 IP, BGP / 라우팅 트릭 등과 같은 IP 가용성을 보장하는 방법에는 여러 가지가 있습니다 .

IPv4 전용 환경에서 수행 된 모든 테스트는 충분한 인프라를 테스트 할 수있게되면 이중 스택 결과와 함께 반환됩니다.

이러한 변경 사항이 IPv6-Fallback RFC Happy Eyeballs 의 부작용 인 것으로 추측합니다.

업데이트 RR DNS는 노드 중 하나에 503이있는 경우 트래픽이 503 인 경우 40-60 %를 제공하는 경우 응용 프로그램 오류가 아닌로드 밸런싱 만 지원할 수 있습니다. 목록에있는 모든 IP가 도달 가능한 경우 유효한 작동 엔드 포인트라고 가정합니다.


2

편집 : HiPerFreak가 저를 교육 한 이후 내 답변을 편집합니다.

DNS 서버는 주어진 호스트 이름에 대한 모든 A 레코드의 목록을 반환합니다. 라운드 로빈은 목록 순서대로 회전합니다. 알려진 링크는 웹 브라우저가 해당 목록을 사용하는 방법에 대한 훌륭한 예입니다.

라운드 로빈 닝은 매우 원시적 인 형태의로드 밸런싱에 사용될 수 있지만 라운드 로빈 회전의 호스트 중 하나가 다운되면 DNS 서버는 더 현명하지 않으며 여전히 다운 된 노드의 IP 주소를 목록에 넣으십시오.


DNS 서버는 항상 모든 주소를 전달합니다. 브라우저는 어느 브라우저를 사용할 것인지 결정하는 브라우저입니다 (여기 및 다른 곳에서 여러 번 논의 되었음). 또한 OS는 모든 IP를 브라우저로 전달합니다.
HiPerFreak

2
@HiPerFreak 자주 볼 수있는 구성 (특히 많은 수의 A- 레코드의 경우)은 DNS가 일부 주소를 전달한다는 것입니다. 보통 순서가 변경됩니다.
the-wabbit

나는 2 개 또는 3 개의 IP를 생각하고있었습니다.
HiPerFreak

@HiPerFreak : 그 이름에 대해 여러 개의 A 레코드가 존재하는 경우 DNS 서버가 이름을 쿼리 할 때 모든 A 레코드를 전달한다는 점이 옳습니다. DNS 서버가 있고 확인을 위해 호스트 이름을 핑하는 동안 Wireshark로 패킷 캡처를 수행했습니다. 감사합니다. 오늘 무언가를 배웠습니다! :)
Ryan Ries

2

내 질문 및 답변 : 브라우저가 여러 IP를 처리하는 방법을 참조하십시오 .

곧 라운드 로빈 dns는 가용성을 전혀 향상시키지 않습니다. 브라우저는 하나의 IP를 선택하고 응답하지 않더라도 고정합니다. (FF와 크롬으로 확인).

브라우저 dns 캐시가 만료되면 IP 응답 여부에 관계없이 호스트 이름이 다시 확인되고 프로세스가 반복됩니다.

기본 HA의 경우 동적 DNS 또는 다양한 IP 기반 접근 방식을 사용할 수 있습니다.

편집 :이 동작은 액세스 할 수없는 호스트가 "블랙홀"역할을 할 때 발생합니다. 대신 호스트가 들어오는 연결을 의도적으로 거부하면 브라우저는 하나의 IP를 시도하고 거부하고 즉시 다른 IP를 사용하므로 꽤 잘 실패합니다.


2
아마도 최근 몇 년 동안이 변경되었을 수도 있지만 Firefox에서 여러 번 새로 고치면 IP가 실제로는 아니지만 자주 변경되는 것을 확인할 수 있습니다. 아마도이 답변은 구식입니까?
Yeti

내 연구 (2015 년부터)는 Chrome, Firefox 및 MSIE가 Sandman4가 설명하는 것처럼 작동하지 않는다는 것입니다. MSIE는 첫 번째 오류가 발생하면 다음에 나열된 주소로 연결을 시도하기 전에 전체 TCP 시간 초과가 필요하다는 점에서 다릅니다.
symcbean

0

이들은 IP를 전환하며 장애 조치 솔루션이 아닙니다.

브라우저는 OS가 이름 확인을 할 수있게 해주 며, 예를 들어 Linux는 항상 IP 주소를 무작위 화하기 위해 호스트 google.com을 여러 번 시도하십시오 . IP는 임의의 순서로 제공됩니다.


그들은 왜 이유없이 무작위로 이것을합니까? 노하우 IP가 가동되고있는 한 재사용 지식 IP를 재사용하는 것이 합리적이지 않습니까?
HiPerFreak

1
로드 밸런싱을위한 것입니다.
Stone


@HiPerFreak : 알려진 IP를 고수하지 않는 이유는 IP가 현재 작동하는지 또는 과거에 작동했는지 여부에 대해 이름 확인이 아무것도 알지 못하기 때문입니다. 이름 확인에서 다른 IP를 사용하도록 지시하기 때문에 브라우저가 단일 IP에 고정되지 않습니다. :-)
Sean Reifschneider가

@Sean : Blow Answer에서 논의한 것처럼 이름 확인은 브라우저에 모든 IP를 제공하고 브라우저는 사용할 것을 결정합니다. 그리고 브라우저는 어떤 IP가 작동했고 어떤 IP가 작동하지 않았는지 알고 있습니다. 이것이 이유가 될 수 없습니다.
HiPerFreak

0

DNS는 목록에있는 모든 IP를 반환하지만 목록의 순서를 변경하며이 순서는 임의적이거나 1이 실패하면 변경되지 않지만로드 균형 조정을 위해 항상 동일한 순서로 IP를 반환합니다. 브라우저가 목록을 받으면 작동하지 않는 것으로 알려진 경우 목록에서 1을 선택한다고 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.