왜 localhost IP 127.0.0.1입니까?


85

나는 localhostIP 주소 결정의 기원이 무엇인지 궁금했다 127.0.0.1. "의미"는 127무엇입니까? "의미"는 0.0.1무엇입니까?


2
나도 이것에 대해 궁금하다. IPv6 루프백은 0 : 0 : 0 : 0 : 0 : 0 : 0 : 1입니다.
hyperslug

1
예, IPv6의 로컬 호스트는 너무 많은 질문을 제기하지 않습니다 :)
Roee Adler

21
"0 : 0 : 0 : 0 : 0 : 0 : 0 : 1"문 매트와 같은 장소는 아직 보지 못했습니다!
William Hilsum

9
@Wil ": 1 같은 곳은 없습니다"로 압축하면 좀 더 많은 비즈니스를 얻을 수 있습니다.
new123456

6
@WilliamHilsum은 "0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0001과 같은 곳은 없습니다"로 확장하고 추가 비용을 청구합니다.
Nick T

답변:


87

127은 서브넷 마스크가있는 클래스 A 네트워크의 마지막 네트워크 번호입니다 255.0.0.0. 127.0.0.1서브넷에서 할당 가능한 첫 번째 주소입니다. 127.0.0.0와이어 번호이므로 사용할 수 없습니다. 그러나 호스트 부분에 다른 숫자를 사용하면 정상적으로 작동하고 사용으로 되돌릴 수 127.0.0.1있습니다. 원하는 127.1.1.1경우 핑을 통해 직접 시도해 볼 수 있습니다 . 왜 이것을 구현하기 위해 마지막 네트워크 번호까지 기다렸습니까? 나는 그것이 문서화되지 않았다고 생각합니다.


14
내가 임의로 127을 선택하는 것을 볼 수있는 유일한 이유는 기억하기 쉬운 숫자 (01111111)이며 아마도 일부 프로그램 및 Windows 구성 요소가 사용하는 방식과 같이 1600 만 개의 호스트 주소가 자체적으로 만 통신 할 수 있기 때문일 수 있습니다 요즘 포트). RFC는 실제로 루프백에 127.0.0.1/32를 사용하는 것이 표준 관행이라고 언급했습니다. 그들이 블록의 나머지 부분을 위해 의도했던 것은 호스트로 되돌아 가고 네트워크에 절대로 충돌하지 않는 것입니다. 따라서 위의 추측입니다.
RoyalKnight

2
모든 블록 주소를 127.0.0.1로 되 돌리는 것은 구현에 따라 다르며 아마도 Linux 스택 특성 일 수 있습니다. Solaris는 최소한 ping 테스트가 성공하려면 인터페이스가 대상 주소에 바인드되어야합니다.
jlliagre

56

루프백이 1986 년 11 월이므로 RFM 990 이 Reynolds와 Postel에 의해 작성 됨에 따라 127의 할당과 관련하여 가장 먼저 언급 할 내용은 다음과 같습니다.

주소 0은 "this network"에서와 같이 "this"를 의미하는 것으로 해석됩니다.

예를 들어 주소 0.0.0.37은이 네트워크에서 호스트 37을 의미하는 것으로 해석 될 수 있습니다.

...

클래스 A 네트워크 번호 127에는 "루프백"기능이 할당됩니다. 즉, 상위 레벨 프로토콜에서 네트워크 127 주소로 전송 된 데이터 그램은 호스트 내부에서 루프백해야합니다. 네트워크 127 주소로 "전송 된"데이터 그램은 어느 네트워크 에나 나타나서는 안됩니다.

1981 년 9 월 초에 RFC 790 , 0 및 127은 이미 예약되었습니다.

000.rrr.rrr.rrr 예약 됨 [JBP]
...
127.rrr.rrr.rrr 예약 됨 [JBP]

0과 127은 1981 년에 유일하게 예약 된 클래스 A 네트워크입니다. 0은 특정 호스트를 가리키는 데 사용되었으므로 루프백을 위해 127이 남았습니다.

나는 이것이 질문에 대답하지 못한다는 것을 알고 있지만, 내가 파낼 수있는 한 멀리 있습니다. 루프백을 위해 1.0.0.0을 선택하는 것이 더 합리적이지만 이미 BBN 패킷 무선 네트워크에 제공되었습니다.


23

인터넷 디자이너는 실제로 하드웨어의 작동 방식을 알고 있으며 저수준 구현을 염두에두고 설계했습니다.

0, 127 및 255 값은 8 비트 어셈블리 및 기계 언어 프로그래밍에서 특수한데, 이러한 값을 테스트하고 다른 정수보다 더 빠르게 실행되는 작은 명령을 사용하여 다른 코드로 분기하는 데 사용할 수있는 "트릭"이 있기 때문입니다. 127은 가장 높은 부호있는 8 비트 정수이므로 1 씩 증가 시키면 부호있는 오버플로가 발생합니다. 마찬가지로 255를 늘리면 부호없는 오버플로가 발생합니다. 값 0을 레지스터에로드하면 칩에 일반적으로 제로 플래그가 설정됩니다. 의사 코드에서 네트워킹 프로그램이 다음과 같다고 상상해보십시오.

if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();

칩에 따라 다르지만, 그 당시 대부분의 칩은이 테스트를 각각 2 워드, 3 워드 및 3 워드 (총 8 워드)로 인코딩 할 수 있었으며, 이러한 특정 테스트는 모두 각각 1 클록 사이클에서 실행될 가능성이있었습니다. 다른 값을 사용하려면 각각 4 워드 (총 12 워드), 코드 크기가 50 % 증가하고 실행 시간이 50 % 증가해야합니다.


1
예전의 기계는 비정상적인 단어 크기를 가지고 있었기 때문에 "단어"를 사용했지만 여전히 8 비트 산술을 사용했습니다. 8088의 경우 "바이트"라고 말했을 것입니다.
Joseph Bui

5

로컬 호스트 또는 루프백 IP 주소의 의미에 대해 생각하면 해당 주소 또는 해당 주소가 속한 네트워크를 호스트 외부에서 보지 않으려는 것을 알 수 있습니다. (호스트 안에서는 그것을보기에는 너무 어둡습니다. 마크 트웨인에게 사과드립니다.)

따라서 누군가이 로컬 호스트 주소를 나타 내기 위해 IP 네트워크를 선택해야했습니다. 누가 먼저 그것을 선택했는지는 기억 나지 않지만 IETF 요청에 주석은 주기적으로 "호스트 요구 사항"으로 발행됩니다.

너무 오래 전에 클래스 A 주소 전체를 "폐기"한다는 생각이 그 당시 어느 누구의 마음에도 들어오지 않았습니다.

localhost의 유틸리티는 하드 코드 된 IP 주소를 사용하여 자신과 대화 할 수 있다는 것입니다. 도메인 이름 시스템이 있기 오래 전에 사용되었습니다. 실제로 127.xxx 유효한 주소를 사용할 수는 있지만 아무도 사용하지 않습니다. "라우터 요구 사항"RFC가 인터넷에서 해당 네트워크를 라우팅 할 수 없기 때문에 127을 실제 네트워크로 몰래 사용할 수는 없습니다.


4

먼저 전체 127.xxx 범위는 로컬 호스트를 가리 킵니다.
이진수 127은 "01111111"입니다. "11111111"= 255 및 0이 예약되어 있으므로 선택은 분명합니다. :)


25
또 어떻게 또 다시 명백해?
Roee Adler

나는 그들이 단순한 것을 선택했다고 생각합니다. 다시 말하지만, 모두 "1"은 S, 그래서 하나의 제로 :) 추가 된 예약되어
kolypto

왜 10111111이 아닌가? :) 또는 11011111 또는 11101111 또는 11110111 또는 11111011 또는 11111101 또는 이와 유사한 것?
Mushex Antaranian

1
아니. 다시 시도하십시오.
Ardee Aram

3

이러한 표준이 만들어 졌을 때 컴퓨터는 느리고 일반적으로 8 비트 레지스터로 제한되었습니다. 숫자를 숫자와 비교하는 것은 매우 느 렸습니다. 그 숫자를 뒤에서 가져와야 할 때 REALLY 느린 메모리입니다. 레지스터, 즉 "CPU on board"스토리지가 훨씬 빠릅니다.

또한 그 오래된 컴퓨터에는 "0과 같음", "0과 다른 것", "음수 / 양의 정수"를 감지하기위한 특별하고 빠른 명령이있었습니다. 즉, 가장 왼쪽 = 부호?를 제외한 모든 이진 "1"이있는 숫자입니다.

따라서 프로그래밍 트릭으로 인해 자주 수행되는 작업에서 많은 CPU주기를 절약 할 수 있었기 때문에 이는 특별한 수치였습니다.

"IF CallerIP ="0 "은 아니지만"IF NotZero (CallerIP) "명령은 표시되지 않습니다.

자세한 설명은 "BEQ, BNE"(6502 CPU)와 같은 고대 어셈블리 지침을 확인할 수 있습니다. 또한 이 페이지를 확인하십시오 .

결국 :

0, 255 및 127은 모두 하나의 가장 빠른 명령으로 확인할 수 있습니다. C와 같은 고급 언어에는 컴파일러가 내부적으로 하나의 명령어로 최적화 할 수있는 "shortuct"비교 기능이 있습니다.

70 년과 80 년의 프로그래머들은 IP 넘버링과 같은 표준에 뒤이어 초 고성능 자원을 사용하여 웅장한 아키텍처를 만들었습니다.


좋은 대답입니다. 이것은 실제로 가장 명확하고 현명한 설명입니다.
not2qubit

실제로, IP가 설계되고 그에 대한 초기 토대가 마련되었을 때, 8 비트의 정수배의 데이터로 작업하는 것은 제공되지 않았습니다. 당시 많은 아키텍처는 예를 들어 12 또는 18 비트의 배수로 레지스터 및 워드 크기를 가졌습니다. 이것이 당시 8 진법이 인기를 얻은 이유 중 하나입니다. 18 비트는 손실없이 낭비없이 정확히 6 진수로 표시 될 수 있습니다. 12 비트는 4 진수입니다. 마이크로은 일반적으로 8 비트 수량에서 일하지만, 그것은 단지 있었다 훨씬 나중에 마이크로 컴퓨터를 정기적으로 인터넷에 (특히 직접) 연결되어 시작했다.
CVn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.