
Ако правите много мрежови манипулации, конфигуриране на 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? Вижте цялата тема на дискусията тук.