Использование cmd
и ping
на Windows дало мне следующие результаты:
- Пингует "localhost":
- Пинг "192.168.0.10" (локальный IP-адрес):
Разве обе ситуации не одинаковы?
Я имею в виду, я пингую тот же интерфейс, ту же машину и тот же адрес. Почему я получаю такие разные результаты?
РЕДАКТИРОВАТЬ: Вот мой ipconfig /all
экран:
windows
ip-address
ping
localhost
Диого
источник
источник
Ответы:
Вы не пропингуете тот же интерфейс , без каких-либо физических интерфейсов у вас все еще есть «локальный хост».
Ваш
localhost
используется для обозначения вашего компьютера с его «внутреннего» IP-адреса, а не с любого «внешнего» IP-адреса вашего компьютера. Таким образом, пакеты ping не проходят через какой-либо физический сетевой интерфейс; только через интерфейс виртуальной обратной связи, который напрямую отправляет пакеты от порта к порту без каких-либо физических скачков.Вы можете все еще задаться вопросом, почему
localhost
происходит разрешение::1
, в то время как традиционно мы ожидаем, что оно разрешится по адресу IPv4127.0.0.1
. Обратите внимание, что.localhost
традиционно это TLD (см. RFC 2606 ), который указывает на обратный IP-адрес (для IPv4 см. RFC 3330 , особенно 127.0.0.0/8).Поиск с
localhost
помощьюnslookup
дает нам:Таким образом, Windows предпочитает использовать обратный IP-адрес IPv6
::1
(см. RFC 2373 ), поскольку он указан первым.Итак, откуда это, давайте посмотрим на файл hosts.
Хм, мы должны посмотреть на настройки DNS Windows.
В этой статье базы знаний рассказывается о настройке, влияющей на предпочтения Windows, выделенной жирным шрифтом:
Что это за таблица префиксов политики?
Эта таблица решает, какие префиксы имеют приоритет над другими префиксами при разрешении DNS.
Ах, поэтому, используя этот KB, мы могли бы добавить сюда записи, которые обозначают, что IPv4 имеет более высокий приоритет, чем IPv6.
Примечание. Нет причин переопределять это поведение, если только у вас не возникли проблемы с совместимостью. Изменение этого параметра на нашем Windows Server нарушило работу нашего почтового сервера, поэтому с ним следует обращаться осторожно ...
источник
The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use.
Обратите внимание на использованиеTLD
и обратите внимание, что это традиционно определено . На самом деле,ping localhost.
работы, которые подтверждают, что это по крайней мере верно в контексте этого вопроса. Ваше последнее предложение не соответствует тому, что сказал RFC, пожалуйста, процитируйте, если оно «препятствует тому, чтобы оно стало TLD», потому что, по его словам, это традиционно TLD. Еще они не будут ссылатьсяthe .localhost TLD
localhost
может быть TLD, если за него отвечает реальный DNS-сервер, но обычно localhost обычно определяется как имя хоста в / etc / hosts, в котором имена хостов ищутся до попытки разрешения через DNS. Какdig localhost
правило , обычно не возвращает запись «A» для 127.0.0.1 или запись AAAA для :: 1. Это означает, что RFC ошибается, когда говоритtraditionally been statically defined in host DNS implementations
, а скорее возвращается системой поиска имен системы, которая не всегда использует DNS.nslookup
возвращает записи. Итак, YMMV ...dig
отчеты о возвращениях A, AAAA и NSlocalhost
, включая авторитетную запись для:localhost. IN NS localhost.
Интерфейс обратной связи существует независимо от вашего интерфейса (ов) Ethernet.
Даже без усложнения IPv6 у вас будет два разных адреса.
IPv4- адрес обратной связи: 127.0.0.1 IPv4- адрес
вашего интерфейса Ethernet: 192.168.0.10
Интерфейс обратной связи вполне может находиться на другом программном уровне, более удаленном от реального оборудования. Я сомневаюсь, что это каким-либо образом зависит от вашего конкретного драйвера интерфейса Ethernet, например.
источник
Localhost и ваш IP-адрес не одно и то же.
Локальный хост - это специальный программный IP-адрес, связанный с вашей системой. Localhost, или 127.0.0.1, является адресом обратной связи. Он всегда указывает на вашу систему и доступен только с вашего компьютера. Эта маршрутизация происходит на уровне операционной системы и определенно никогда не покидает сетевой адаптер ... Так что у него нет шансов попасть в сеть ....
Проверка вашего собственного IP-адреса аналогична, но потенциально может включать в себя весь сетевой стек, так как он должен определить, что это ваш IP-адрес, и правильно его направить ...
Эффект должен быть таким же, но могут быть различия.
Например, отключите сетевой кабель. Пингуйте свой статический IP-адрес. Вы можете не получить маршрут к хосту или другие ошибки. Теперь пропингуйте localhost или 127.0.0.1, и все заработает.
источник
Из скриншотов я понимаю, что этот вопрос не о Linux, но, возможно, он является полезным «примером».
В этой ОС, если вы пропингуете один из адресов локального адаптера, он транслируется на устройство обратной связи (особый случай взломать). Это означает, что пакеты на самом деле отправляются на устройство обратной связи (что имеет все последствия, о которых вы могли подумать: например, с точки зрения межсетевого экрана, эти пакеты поступают на интерфейс обратной связи и будут соответствовать правилам для этого интерфейса).
Устройство, которому назначен IP, никогда не увидит пакеты. (Это хорошо, потому что он не будет делать правильные вещи с этими пакетами: он хотел бы отправить присоски.)
Тем не менее, если интерфейс, который содержит этот IP-адрес, не работает, вы потеряете это соединение. Преобразование в петлю перестанет работать.
Таким образом, другими словами, это приемлемый дизайн, чтобы рассматривать эти локальные адреса как псевдонимы для устройства обратной связи.
Ссылки на код:
http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623
Посмотрите на функцию
ip_route_output_slow
. Это вызываетfib_lookup
, и если эта функция возвращает кодRTN_LOCAL
,dev_out
переписывается в loopback:http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769
источник
Похоже, псевдоним «Localhost» преобразуется в петлю IPv6, а когда вы явно используете адрес IPv4, очевидно, что это не так.
источник
@ebwhite прав насчёт чего.
Теперь, возможно, причина в том, что у вас настроена Teredo (я не могу сказать по вашему скриншоту, лучше скопировать его в текстовый файл и вставить весь вывод) - поведение localhost, поскольку IPv6 соответствует системам на моем IPv4 только сеть с Teredo установлена, но система без него ведет себя , как вы ожидаете , чтобы получить ,
127.0.0.1
когда вы пингlocalhost
. Я протестировал это с Windows XP и мне нужно посмотреть, что делают мои системы Windows 7, и обновить вопрос.Как правило, системы по умолчанию используют IPv6, если IPv6 доступен, поэтому ваша система работает так, как она должна планироваться .
источник