ping "localhost"와 ping "local IP address"사이의 차이점은 무엇입니까?


32

사용 cmdping Windows에서 다음 결과를 얻었습니다.

  • Pinging "localhost":

Enter image description here

  • Pinging "192.168.0.10"(로컬 IP 주소) :

Enter image description here

두 상황이 완전히 똑같지는 않습니까?

내 말은, 나는 같은 인터페이스, 동일한 기계 및 동일한 주소를 핑 (ping)하고있다. 왜 이렇게 다른 결과를 얻습니까?

편집 : 여기에 내 ipconfig /all 화면:

Enter image description here


18
동일한 인터페이스에 대해 핑 (ping)하지 않습니다. 물리적 인 인터페이스가 없어도 여전히 "로컬 호스트"가 있습니다.
Tom Wijsman

"동일한 인터페이스"가 루프백 인터페이스라면 올바른 것입니다. 이더넷 인터페이스를 의미하는 경우 몇 가지 이유로 잘못되었습니다. (예를 들어, 이더넷 인터페이스와 관련된 :: 1과 이더넷 인터페이스는 이더넷 패킷을 유선으로 보내고 유선에서 수신하는 것입니다. 이더넷 패킷 또는 와이어?)
David Schwartz

나는이 질문이 Stackoverflow에 대해서 전에 물어 본 적이 확실하다. 찾을 수 있다면 ...
Chris S

이것의 핵심은 이것에 의해 대답을 얻습니다, 나는 믿습니다 : stackoverflow.com/questions/6938039/...
Dawson Toth

흥미로운 점은 원격 호스트에 ping 할 때 전송 바이트 수와 TTL을 얻는 이유는 무엇입니까? 아무도 IP 주소 형식이 약간 떨어져 있다고 염려하지 않을 것입니다.
dhasenan

답변:


45

동일한 인터페이스에 대해 핑 (ping)하지 않습니다. 물리적 인터페이스가 없어도 여전히 "로컬 호스트"가 있습니다.

너의 localhost 컴퓨터의 "외부"IP가 아닌 "내부"IP에서 컴퓨터를 참조하는 데 사용됩니다. 따라서 핑 패킷은 물리적 네트워크 인터페이스를 통과하지 못합니다. 실제 홉없이 포트에서 포트로 직접 패킷을 보내는 가상 루프백 인터페이스를 통해서만 가능합니다.

왜 아직도 궁금해할까요? localhost ~에 해결된다 ::1, 전통적으로 우리는 IPv4 주소로 해석 할 것을 기대합니다. 127.0.0.1. 유의 사항 .localhost 전통적으로 TLD입니다 ( RFC 2606 )는 루프백 IP 주소를 다시 가리 킵니다 (IPv4의 경우 RFC 3330 , 특히 127.0.0.0/8).

올려다보기 localhost ~을 사용하여 nslookup 우리에게 주어지다:

nslookup localhost

...
Name:    localhost
Addresses:  ::1
          127.0.0.1

따라서 Windows는 IPv6 루프백 IP 주소를 사용하기를 선호합니다. ::1 (만나다 RFC 2373 ) 처음 나열됩니다.

자, 어디서 왔는지, hosts 파일을 보자.

type %WINDIR%\System32\Drivers\Etc\Hosts

...
# localhost name resolution is handled within DNS itself.
#       127.0.0.1       localhost
#       ::1             localhost
...

흠, 우리는 Windows의 DNS 설정을 살펴 봐야합니다.

이 기술 자료 문서 굵게 강조한 Windows가 선호하는 것에 영향을주는 설정에 대해 알려줍니다.

  1. 레지스트리 편집기에서 다음 레지스트리 하위 키를 찾아 누릅니다.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
    
  2. DisabledComponents 항목을 수정하려면 DisabledComponents를 두 번 클릭하십시오.

    참고 : DisabledComponents 항목을 사용할 수 없으면 항목을 만들어야합니다. 이렇게하려면 다음과 같이하십시오.

    1. 편집 메뉴에서 새로 만들기를 가리킨 다음 DWORD (32 비트) 값을 클릭하십시오.

    2. DisabledComponents를 입력 한 다음 Enter 키를 누릅니다.

    3. DisabledComponents를 두 번 누릅니다.

  3. 값 데이터 : 필드에 다음 값 중 하나를 입력하여 IPv6 프로토콜을 원하는 상태로 구성한 다음 확인을 클릭합니다.

    • 유형 0 모든 IPv6 구성 요소를 활성화합니다. (Windows 기본 설정)
    • 유형 0xffffffff IPv6 루프백 인터페이스를 제외한 모든 IPv6 구성 요소를 비활성화합니다. 이 값은 또한 Windows가 접두사 정책 테이블의 항목을 수정하여 IPv6에서 인터넷 프로토콜 버전 4 (IPv4)를 사용하도록 선호하도록 구성합니다. 자세한 내용은 원본 및 대상 주소 선택을 참조하십시오.
    • 유형 0x20 접두어 정책 테이블의 항목을 수정하여 IPv6에서 IPv4를 선호하는 방법.
    • 유형 0x10 모든 비 - 터널 인터페이스 (LAN 및 PPP (Point-to-Point Protocol) 인터페이스 모두)에서 IPv6을 사용하지 않도록 설정합니다.
    • 유형 0x01 모든 터널 인터페이스에서 IPv6을 비활성화합니다. 여기에는 Intra-Site Automatic Tunnel Addressing Protocol (ISATAP), 6to4 및 Teredo가 포함됩니다.
    • 유형 0x11 IPv6 루프백 인터페이스를 제외한 모든 IPv6 인터페이스를 비활성화합니다.
  4. 이 설정을 적용하려면 컴퓨터를 다시 시작하십시오.

이 접두어 정책 테이블은 무엇입니까?

netsh interface ipv6 show prefixpolicies (또는 prefixpolicy 이전 버전에서)

Precedence  Label  Prefix
----------  -----  --------------------------------
        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
         1     11  fec0::/10
         1     12  3ffe::/16
         1     10  ::/96

이 테이블은 DNS 확인 중 다른 접두사보다 우선 순위가 높은 접두사를 결정합니다.

아, 그 KB를 사용하면 IPv4가 IPv6보다 우선 순위가 높음을 나타내는 항목을 여기에 추가 할 수 있습니다.

노트 : 호환성 문제가 발생하지 않는 이상이 동작을 무시할 이유가 없습니다. Windows Server에서이 설정을 변경하면 메일 서버가 손상되므로주의해서 처리해야합니다.


사실 'localhost'는 최상위 도메인이 아니라 호스트 이름입니다. 구별은 아주 미묘하지만 기본적으로 모든 도메인 이름은 호스트 이름이지만 모든 호스트 이름이 도메인 이름이 아닙니다. 관례 적으로 ful stop으로 끝나는 호스트 이름은 FQDN이어야하며, 전체 중지로 끝나지 않는 대부분의 호스트 이름은 부모 도메인을 추가하여 필요에 따라 루트를 추가하여 FQDN으로 변환 할 수 있습니다. 그러나 이것들은 단지 관례에 불과합니다. 'localhost'는 올바르게 동작하지 않을 가능성이 있고 문제를 야기 할 수 있기 때문에 TLD가되는 것을 방지하기 위해 RFC 2606에 의해 예약되어 있습니다.
Kevin Cathcart

2
RFC 2606에 언급 된 것처럼 잘못되었습니다. 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
Tom Wijsman

나는 너무 강했다. localhost 실제 DNS 서버가 응답 할 경우 TLD가 될 수 있지만 일반적으로 localhost는 일반적으로 / etc / hosts의 호스트 이름으로 정의되며 DNS를 통해 해결하기 전에 호스트 이름을 조회합니다. 이와 같이 dig localhost 일반적으로 127.0.0.1에 대한 "A"레코드 또는 :: 1에 대한 AAAA 레코드를 반환하지 않습니다. 그 말은 RFC가 잘못되었다는 의미입니다. traditionally been statically defined in host DNS implementations오히려 항상 DNS를 사용하는 시스템의 이름 검색 서비스에 의해 반환됩니다.
Kevin Cathcart

@ KevinCathcart : 우리는 여기에 Windows 질문을하고 있으며 Windows 버전에서는 DNS 자체에서이를 수행한다고 언급합니다. nslookup 레코드를 반환합니다. 그래서, YMMV ...
Tom Wijsman

1
@ 케빈 캐스케이 마이 dig 에 대한 A, AAAA 및 NS 레코드를 반환합니다. localhost다음을위한 전거 레코드를 포함하여 : localhost. IN NS localhost.
KutuluMike

20

그만큼 루프백 인터페이스 이더넷 인터페이스와 독립적으로 존재합니다.

심지어 합병증없이 IPv6 당신은 두 개의 별개의 주소를 가졌을 것입니다.

루프백 IPv4 주소 : 127.0.0.1
이더넷 인터페이스의 IPv4 주소 : 192.168.0.10

루프백 인터페이스는 실제 소프트웨어와는 다른 소프트웨어 계층에있을 수 있습니다. 특정 이더넷 인터페이스 드라이버에 어떤 식 으로든 의존한다고는 생각하지 않습니다.


11

로컬 호스트와 IP 주소가 같은 것은 아닙니다.

localhost는 시스템에 연결된 특별한 소프트웨어 전용 IP 주소입니다. 로컬 호스트 또는 127.0.0.1은 루프백 주소입니다. 항상 시스템을 가리키며 컴퓨터에서만 액세스 할 수 있습니다. 이 라우팅은 OS 수준에서 발생하며 확실히 절대로 NIC를 떠나지 않습니다 ... 그래서 네트워크에 연결할 기회가 없습니다 ....

자신의 IP 주소를 핑 (ping)하는 것은 비슷하지만 잠재적으로 전체 네트워킹 스택을 포함합니다. 사용자의 IP 주소임을 감지해야하기 때문입니다. 올바르게 연결하십시오. ...

효과는 동일해야하지만 차이가있을 수 있습니다.

예를 들어, 네트워크 케이블의 플러그를 뽑으십시오. 고정 IP 주소로 핑 (ping)하십시오. 호스트 경로가 없거나 다른 오류가 발생할 수 있습니다. 이제 localhost 또는 127.0.0.1을 ping하면 작동합니다.


그래서 ping localhost는 쓸데없는 것입니까? 제 인터페이스를 테스트하고 싶다면 ....
Diogo

4
@DiogoRocha가 맞으면 ping localhost가 하드웨어를 만지지 않습니다. 네트워크 카드의 드라이버가 자신에게 주어진 요청을 가로 채면, 혹시 192.168.0.10의 핑 소리가 나지 않을 수도 있습니다.
Scott Chamberlain

@DiogoRocha 당신의 용어는 꺼져 있습니다. 127.0.0.1은 인터페이스이지만 가상 인터페이스입니다.
barlop

@Diogo, 아주. Localhost를 사용하면 응용 프로그램의 네트워크 동작을 테스트하거나 네트워크 스택이 작동하는지 확인할 수 있습니다. 그러나 드라이버를 테스트하지는 않습니다. 예를 들어, 나쁜 NIC 드라이버가 있다면 localhost가 NIC 드라이버임을 증명할 수 있습니다. 귀하의 마일리지는 확실히 다를 것입니다 !!
Benjamin Schollnick

6

나는이 스크린 샷에서 리눅스에 관한 것이 아니라 "유용할만한 사례"라고 생각한다.

해당 OS에서 로컬 어댑터 주소 중 하나를 ping하면 루프백 장치로 변환됩니다 (특별한 경우 해킹). 즉, 패킷이 실제로 루프백 장치로 이동한다는 의미입니다. 예를 들어 방화벽 관점에서 볼 때 루프백 인터페이스에서 패킷이 들어오고 해당 인터페이스의 규칙과 일치하게됩니다.

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 루프백으로 다시 작성됩니다.

http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769


5

"Localhost"별칭이 IPv6 루프백으로 해결되고 IPv4 주소를 명시 적으로 사용하는 것처럼 보이지는 않습니다.


6
OS가 당신과 동의하지 않는 것 같습니다.
EBGreen

6
그것은 중요하지 않습니다, 그것은 분명히 컴퓨터에 설정되어있어, localhost는 ipv6 루프백을 치고 있습니다.
Rob

1
@DiogoRocha IPV4 세계에는 그런 주소가 없습니다 :: 1. 127.0.0.1은 루프백을 위해 예약 된 IP입니다. :: 1 그러나 IPV6에 존재하며 127.0.0.1과 마찬가지로 IPV6 루프백을 위해 예약되어 있습니다.
Andy

4
이 질문에 어떻게 대답합니까? 당신은 명백한 것을 말하고 있습니다.
Tom Wijsman

4
답을 자세히 설명해주세요,이게 아무것도 설명하지 못합니다.
Ivo Flipse

1

@ebwhite는 무엇에 관한 것입니다.

이제 왜 네가 가질 수 있겠 니? Teredo 설정 (당신의 스크린 샷에서 텍스트 파일로 파이핑하고 전체 출력을 붙여 넣을 수는 없습니다) - localhost의 동작 IPv6 내 시스템과 일치한다. IPv4 teredo가 설치된 네트워크 만 있지만 시스템이 없으면 예상대로 작동합니다. 127.0.0.1 너 핑 할 때 localhost. 필자는 Windows XP에서이를 테스트했으며 Windows 7 시스템이 무엇인지 확인하고 질문을 업데이트해야합니다.

일반적으로 IPv6를 사용할 수있는 경우 시스템이 IPv6로 기본 설정되므로 시스템이 정상적으로 작동합니다. .


그는 스크린 샷 중 하나와 함께 전송 된 바이트 또는 TTL을 IPv6로 얻지 못합니까? 왜?
barlop

또한 내가 윈도우 7에서 보는 것과 일치 - 내 생각 엔 왕복 시간은 무시할 만하다.
Journeyman Geek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.