Ако правите много мрежови манипулации, конфигуриране на LAN приложения и сървърни инструменти или просто любопитни, вероятно сте забелязали, че има разлика между localhost и локалния IP адрес. Прочетете, за да научите разликите.
Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Четецът на SuperUser Diogo иска да разбере защо командата ping третира различно местния и местния IP адрес, когато на повърхността те изглеждат едно и също:
Използването на cmd и ping на Windows ми даде следните резултати:
Pinging "localhost":
Pinging "192.168.0.10" (локален IP адрес):
И двете ситуации не са ли същите?
Искам да кажа, че пинг на същия интерфейс, същата машина и същия адрес. Защо получавам толкова различни резултати?
Очевидно има някаква разлика, но какво точно се случва, когато превключвате между двете?
Contributor на SuperUser Tom Wijsman предлага следното разбиране за фините разлики между двете:
Вие не пингвате същия интерфейс, без физически интерфейси все още имате "локален хост".
Вашият
Localhost
се използва за препратка към компютъра от "вътрешния" IP адрес, а не от "външните" IP адреси на вашия компютър. Така че пакетите ping не преминават през физически мрежов интерфейс; само чрез интерфейс за виртуален обрат, който директно изпраща пакетите от порт до порт без физически хмел.Може би все още се чудите защо
Localhost
се решава да::1
, докато традиционно бихме очаквали, че той ще се справи с IPv4 адреса127.0.0.1
, Отбележи, че.localhost
е традиционно TLD (виж RFC 2606), което сочи обратно към IP адреса на обратната линия (за IPv4, вижте RFC 3330, особено 127.0.0.0/8).Гледам нагоре
Localhost
използвайкиNslookup
дава ни:
nslookup localhost
... Име: localhost Адреси: :: 1 127.0.0.1
По този начин Windows предпочита да използва IPv6 обратния IP адрес
::1
(вж. RFC 2373), както е посочено първо.Добре, откъде идват, нека да разгледаме файла на хостовете.
въведете% WINDIR% \ System32 \ Drivers \ Etc \ Хостове
... # localhost имена резолюция се обработва в самия DNS. # 127.0.0.1 localhost # :: 1 localhost ...
Трябва да разгледаме DNS настройките на Windows.
Тази статия в KB ни разказва за настройка, която засяга предпочитанията на Windows, подчертани с удебелен шрифт:
- В редактора на системния регистър намерете и щракнете върху следния подключ на системния регистър:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ TCPIP6 \ Параметри
- Щракнете двукратно върху DisabledComponents, за да промените записа на DisabledComponents.Забележка: Ако записът DisabledComponents не е налице, трябва да го създадете. За целта изпълнете следните стъпки:
- В менюто Редактиране, посочете Нов и след това кликнете върху DWORD (32-битова) стойност.
- Въведете DisabledComponents и след това натиснете ENTER.
- Кликнете два пъти върху DisabledComponents.
- Въведете една от следните стойности в полето Данни за стойността: за да конфигурирате протокола IPv6 до желаното състояние и след това щракнете върху OK:
- Тип
0
за да активирате всички компоненти на IPv6. (Настройка по подразбиране за Windows)- Тип
0xffffffff
за да деактивирате всички компоненти на IPv6, с изключение на интерфейса за IPv6 loopback. Тази стойност също така конфигурира Windows да предпочита използването на Internet Protocol version 4 (IPv4) през IPv6 чрез промяна на записи в таблицата с правила за префикс. За повече информация вижте Избор на източник и целеви адрес.- Тип
0x20
да предпочитат IPv4 през IPv6, като променят записите в таблицата с правила за префикси.- Тип
0x10
да деактивирате IPv6 на всички nontunnel интерфейси (както на LAN и Point-to-Point Protocol [PPP] интерфейси).- Тип
0x01
да деактивирате IPv6 на всички тунелни интерфейси. Те включват протокола за адресиране на автоматичен тунел (ISATAP) в рамките на обекта, 6to4 и Teredo.- Тип
0x11
за да изключите всички IPv6 интерфейси, с изключение на интерфейса за IPv6 loopback.- Рестартирайте компютъра, за да влезе в сила тази настройка.
Какво представлява тази таблица с правила за префикс?
netsh интерфейс ipv6 показват prefixpolicies
(илиprefixpolicy
по-ранни версии)Префикс на предходния етикет ---------- ----- -------------------------------- 50 0 :: 1/128 45 13 fc00 :: / 7 40 1 :: / 0 10 4 :: ffff: 0: 0/96 7 14 2002 :: / 16 5 5 2001 :: / 32 11 11 fec0 :: / 10 1 12 3ffe :: / 16 1 10 :: / 96
Тази таблица определя кои префикси получават предимство пред други префикси по време на решаването на DNS.
Ах, така че използвайки тази KB, можем да добавим вписвания тук, които означават, че IPv4 има по-висок приоритет от IPv6.
Забележка: Няма причина да пренебрегвате това поведение, освен ако не изпитвате съвместими проблеми. Промяната на тази настройка на нашия Windows Server разруши нашия пощенски сървър, така че трябва да се борави внимателно ...
Няма нищо, което да ни хареса повече от задълбочен и информативен отговор с свързаните с тях документи за подкрепа. Ясно е, че localhost и локалният IP адрес са отделни обекти, обслужват различни цели и сега всички знаем защо.
Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.