로컬호스트 IP가 127.0.0.1인 이유는 무엇입니까?

로컬호스트 IP가 127.0.0.1인 이유는 무엇입니까?

localhost의 IP 주소를 결정하게 된 계기가 무엇인지 궁금했습니다 127.0.0.1. 의 "의미"는 무엇입니까 127? 의 "의미"는 무엇입니까 0.0.1?

답변1

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

답변2

루프백으로 127의 할당에 관해 내가 찾을 수 있는 가장 이른 언급은 1986년 11월입니다.RFC 990Reynolds와 Postel이 저술한 내용:

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

예를 들어 주소 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 패킷 무선 네트워크에 제공되었습니다.

답변3

인터넷 설계자들은 하드웨어가 어떻게 작동하는지 잘 알고 있었고 낮은 수준의 구현을 염두에 두고 설계했습니다.

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

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

칩에 따라 다르지만 당시 대부분의 칩은 이러한 테스트를 각각 2워드, 3워드, 3워드(총 8워드)로 인코딩할 수 있었고 더 나아가 이러한 특정 테스트는 모두 각각 1클럭 주기에 실행될 가능성이 높았습니다. 다른 값을 사용하려면 각각 4단어(총 12단어)가 필요하고 코드 크기가 50% 증가하며 실행 시간도 50% 증가할 수 있습니다.

답변4

로컬 호스트 또는 루프백 IP 주소가 무엇을 의미하는지 생각해 보면 해당 주소나 해당 주소가 속한 네트워크를 호스트 외부에서 보고 싶지 않다는 것을 알게 됩니다. (호스트 내부는 너무 어두워서 잘 보이지 않습니다. 마크 트웨인에게 사과드립니다.)

따라서 누군가는 이 로컬호스트 주소를 나타내기 위해 IP 네트워크를 선택해야 했습니다. 누가 처음 선택했는지는 기억나지 않지만 "호스트 요구사항"으로 주기적으로 발행되는 IETF 요청서에 명시되어 있습니다.

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

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

관련 정보