Я знаю, что корневые серверы DNS имеют 13 IP-адресов и используют anycast для распространения запроса на свои 800 реальных физических серверов по всему миру.
Я знаю, что у корневого сервера в Гонконге такой же IP-адрес, как и у другого зеркального сервера. Законно ли иметь два сервера с разными физическими адресами в Интернете с одинаковым IP-адресом?
Но я не знаю, как DNS-запрос будет нацелен на ближайший к моему местоположению сервер, например, в Гонконге.
Как DNS выбирает свой сервер и законно ли иметь два разных физических сервера с одинаковым IP-адресом?
решение1
В большой сети (с выделенными маршрутизаторами) может быть более одного сетевого пути между двумя компьютерами. Маршрутизаторы часто имеют несколько сетевых соединений друг с другом для избыточности, и поэтому вы можете отправлять пакеты по любому соединению, чтобы достичь одного и того же компьютера назначения.
Anycast использует это, создавая видимость того, что есть два или более маршрутов к IP-адресу, но на самом деле эти маршруты ведут к совершенно разным компьютерам. Если один из компьютеров отключается, маршрут исчезает, но другой маршрут по-прежнему остается доступным.
Для работы требуется некоторая настройка. Для обмена IP-адресами между сайтами вам нужно настроить BGP (маршрутизация на уровне ISP), и вы можете сделать это только для блоков не менее 256 IP-адресов (поэтому использование anycast только для одного IP-адреса приведет к потере ~253 IP-адресов). В пределах сайта вам все еще нужно настроить маршрутизаторы так, чтобы они знали, где найти все конечные точки anycast, и это обычно делается путем публикации каждой конечной точки своего присутствия, пока она находится в сети.
Поскольку конечные точки выглядят как несколько путей к одному и тому же компьютеру, трафик может случайным образом использовать другой путь. Обычно это не проблема (пакеты по-прежнему приходят в то же место, даже если путь, по которому они прошли, изменился), но для anycast IP другой путь означает другой пункт назначения. Это означает, что вы можете отправлять трафик на одну конечную точку, и внезапно пакеты прибудут на другую конечную точку.
По этой причине anycast не работает с "долгоживущими" протоколами и обычно используется только с протоколами без сохранения состояния. DNS anycast распространен, поскольку пакеты небольшие, и неважно, если сервер конечной точки неожиданно изменится. Некоторые сайты используют anycast с HTTP для очень маленьких файлов, которые можно получить всего за один или два пакета. Но все, что выходит за эти рамки, становится ненадежным с anycast, поскольку TCP-соединения будут случайным образом обрываться каждый раз, когда "путь" изменится.