2010-01-10 3 views
2

Есть ли разница в производительности между TCP соединений с:Выполнение локального домена против локального хоста

  • локальный/127.0.0.1
  • домен, который устраняет локальную машину

Или более конкретно , выполняются ли последние соединения через устройство обратной петли или через реальную сеть?

Причина, по которой я прошу, заключается в изменении параметров базы данных во многих PHP-приложениях, поэтому они используют полный домен вместо localhost. Таким образом, мы сможем легче переместить базу данных на другой сервер, если возникнет такая необходимость.

ответ

7

Это зависит от реализации и операционной системы. В Windows все, что подключается к локальному IP-адресу, даже если оно является внешним IP-адресом, перейдет в loopback. Это документированная проблема для таких приложений, как пакетные снифферы, поскольку вы не можете обнюхивать петлю. (Windows не обрабатывает loopback как «устройство» - она ​​обрабатывается на сетевом уровне.) Однако в этом случае это будет работать в вашу пользу.

Linux, напротив, будет следить за тем, что у вас есть в вашей таблице маршрутизации, поэтому пакеты, предназначенные для вашего локального компьютера , будут перейдите на ваш локальный компьютер по сети, если таблица маршрутизации настроена неправильно. Однако в 99% случаев маршрутизация будет правильно настроена. Ваши пакеты не будут проходить через loopback-устройство, но стек TCP/IP будет знать, что вы связываетесь с локальным IP-адресом, и он фактически выйдет и вернется в правильное сетевое устройство.

В правильно сконфигурированной среде единственным узким местом для использования имени домена будет время разрешения DNS. Обращение к внешнему DNS может добавить дополнительную задержку в вашу конфигурацию. Однако, если вы добавите доменное имя в файл/etc/hosts (C:\Windows\System32\drivers\etc\hosts в Windows), ваша система пропустит фазу разрешения DNS и получит IP-адрес напрямую, делая это время безрезультатным.

+0

Что касается времени разрешения DNS, не разрешает ли это кеш? –

+0

Кроме того, я думаю, я мог бы пройти через loopback, переопределив database.mynetwork.com, чтобы указать 127.0.0.1 в файле hosts? –

+0

DNS-кэши зависят от реализации, но обычно кэшированный DNS относится не к локальному кешу на вашем компьютере, а кэш удаленного DNS, поэтому ему не нужно связываться с корневым сервером имен, а затем с сервером имен иностранного домена. В вашем случае это не применяется, так как это локальное имя домена. Вы определенно можете просто переопределить database.mynetwork.com, чтобы указать на 127.0.0.1 (** или ** вы могли бы указать внешний IP-адрес вашего интерфейса, в зависимости от того, что вы предпочитаете) в файле hosts. –

1

Это зависит от того, как имена будут разрешены. Обычно процедура обычно /etc/hosts, а затем DNS, если это не удается. Если localhost находится в вашем /etc/hosts, вставьте whatever.wherever в файл, чтобы он разрешался с той же скоростью.

Смежные вопросы