나는 localhost
IP 주소 결정의 기원이 무엇인지 궁금했다 127.0.0.1
. "의미"는 127
무엇입니까? "의미"는 0.0.1
무엇입니까?
나는 localhost
IP 주소 결정의 기원이 무엇인지 궁금했다 127.0.0.1
. "의미"는 127
무엇입니까? "의미"는 0.0.1
무엇입니까?
답변:
127은 서브넷 마스크가있는 클래스 A 네트워크의 마지막 네트워크 번호입니다 255.0.0.0
. 127.0.0.1
서브넷에서 할당 가능한 첫 번째 주소입니다. 127.0.0.0
와이어 번호이므로 사용할 수 없습니다. 그러나 호스트 부분에 다른 숫자를 사용하면 정상적으로 작동하고 사용으로 되돌릴 수 127.0.0.1
있습니다. 원하는 127.1.1.1
경우 핑을 통해 직접 시도해 볼 수 있습니다 . 왜 이것을 구현하기 위해 마지막 네트워크 번호까지 기다렸습니까? 나는 그것이 문서화되지 않았다고 생각합니다.
루프백이 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 패킷 무선 네트워크에 제공되었습니다.
인터넷 디자이너는 실제로 하드웨어의 작동 방식을 알고 있으며 저수준 구현을 염두에두고 설계했습니다.
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 % 증가해야합니다.
로컬 호스트 또는 루프백 IP 주소의 의미에 대해 생각하면 해당 주소 또는 해당 주소가 속한 네트워크를 호스트 외부에서 보지 않으려는 것을 알 수 있습니다. (호스트 안에서는 그것을보기에는 너무 어둡습니다. 마크 트웨인에게 사과드립니다.)
따라서 누군가이 로컬 호스트 주소를 나타 내기 위해 IP 네트워크를 선택해야했습니다. 누가 먼저 그것을 선택했는지는 기억 나지 않지만 IETF 요청에 주석은 주기적으로 "호스트 요구 사항"으로 발행됩니다.
너무 오래 전에 클래스 A 주소 전체를 "폐기"한다는 생각이 그 당시 어느 누구의 마음에도 들어오지 않았습니다.
localhost의 유틸리티는 하드 코드 된 IP 주소를 사용하여 자신과 대화 할 수 있다는 것입니다. 도메인 이름 시스템이 있기 오래 전에 사용되었습니다. 실제로 127.xxx 유효한 주소를 사용할 수는 있지만 아무도 사용하지 않습니다. "라우터 요구 사항"RFC가 인터넷에서 해당 네트워크를 라우팅 할 수 없기 때문에 127을 실제 네트워크로 몰래 사용할 수는 없습니다.
먼저 전체 127.xxx 범위는 로컬 호스트를 가리 킵니다.
이진수 127은 "01111111"입니다. "11111111"= 255 및 0이 예약되어 있으므로 선택은 분명합니다. :)
이러한 표준이 만들어 졌을 때 컴퓨터는 느리고 일반적으로 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 넘버링과 같은 표준에 뒤이어 초 고성능 자원을 사용하여 웅장한 아키텍처를 만들었습니다.