redis 서버 IP로 "127.0.0.2"를 사용하는 hiredis에서 예제를 실행 중이며 제대로 실행 중입니다. 실제로 redis 서버는 동일한 머신에서 실행 중입니다. "127.0.0.1"이 "lo"의 IP 주소라는 것을 알고 있지만 "127.0.0.2"는 어떻습니까? "127.0.0.1"와 동일합니까?
redis 서버 IP로 "127.0.0.2"를 사용하는 hiredis에서 예제를 실행 중이며 제대로 실행 중입니다. 실제로 redis 서버는 동일한 머신에서 실행 중입니다. "127.0.0.1"이 "lo"의 IP 주소라는 것을 알고 있지만 "127.0.0.2"는 어떻습니까? "127.0.0.1"와 동일합니까?
답변:
예:
IPv4 네트워크 표준은 루프백 목적으로 전체 127.0.0.0/8 주소 블록을 예약합니다. 즉, 16,777,214 개 주소 중 하나 (127.0.0.1-127.255.255.254)로 전송 된 모든 패킷이 루프백됩니다. IPv6의 단일 주소는 :: 1입니다.
다양한 IETF (Internet Engineering Task Force) 표준은이를 위해 CIDR 표기법으로 IPv4 주소 블록 127.0.0.0/8을, IPv6 주소 :: 1을 예약합니다. 가장 많이 사용되는 IPv4 주소는 127.0.0.1입니다. 일반적으로 이러한 루프백 주소는 호스트 이름, localhost 또는 루프백에 매핑됩니다.
또는 RFC 자체에서 :
127.0.0.0/8-이 블록은 인터넷 호스트 루프백 주소로 사용되도록 할당됩니다. 상위 레벨 프로토콜에서이 블록 내의 주소로 전송 된 데이터 그램은 호스트 내부에서 루프백해야합니다. 이것은 일반적으로 루프백을 위해 127.0.0.1/32 만 사용하여 구현되지만이 블록 내의 주소는 어느 네트워크에서도 나타날 수 없습니다 [RFC1700, 페이지 5].
재미있게 핑을 해보십시오.
$ ping 127.127.127.127
PING 127.127.127.127 (127.127.127.127) 56(84) bytes of data.
64 bytes from 127.127.127.127: icmp_req=1 ttl=64 time=0.110 ms
64 bytes from 127.127.127.127: icmp_req=2 ttl=64 time=0.065 ms
^C
--- 127.127.127.127 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms
127.x.x.x
주소가 로컬 컴퓨터로 제한되어 있습니까?”예127.x.x.x
주소가 lo
인터페이스에 바인딩되어 있습니까? ”예127.x.x.x
주소가 네트워크를 통해 라우팅됩니까?"127.0.0.0/8-이 블록은 인터넷 호스트 루프백 주소로 사용되도록 할당됩니다. 상위 레벨 프로토콜
에서이 블록 내의 주소로 전송 된 데이터 그램 은 호스트 내부에서 루프백됩니다. 이것은
일반적으로 단지 127.0.0.1/32 루프백을 사용하여 구현됩니다. 마찬가지로
[RFC1122]에 기재된 절 3.2.1.3는 전체 127.0.0.0/8 블록 내의 어드레스는 합법적으로 모든 네트워크 어딘가에 표시되지 않는다. — RFC5735
127.0.0.2
와 동일 127.0.0.1
합니까?” NO동안 127.0.0.1
하는 127.255.255.254
인터페이스에 바인드 된 모든 로컬 주소입니다 lo
. 그들은 동일하지 않습니다. 각 주소를 사용하여 다른 서비스를 동일한 포트에 바인딩 할 수 있습니다. 예 : 포트 80의 16 백만 웹 서버, 로컬 시스템에서만 액세스 가능 (메모리가 부족하거나 다른 리소스가 먼저없는 경우)
에 바인딩 할 도커 서비스를 설정했습니다 127.0.0.2:80
. 그런 다음에 별칭을 추가했습니다 /etc/hosts
. 지금은 통해 연결할 수 http://myserver
있지만 통해 http://127.0.0.1
나 http://localhost
. 그러나이 시스템에서만 사용할 수 있습니다. lo
인터페이스 에만 있습니다.
그런 다음에 바인딩 할 다른 도커 서비스 127.0.0.3:80
와 python 서비스를 설정 localhost:80
했습니다 127.0.0.4:80
.
일부 운영 체제에서는 작동하지 않을 수 있습니다. Debian (9) Gnu / Linux, Linux 커널 4.9.0-3-amd64를 사용하고 있습니다. 일부의 OS는 모든 주소를 처리 할 수 있습니다 127.0.0.1
→ 127.255.255.254
동일합니다. 일부는에서만 작동 할 수 있습니다 127.0.0.1
.
참조
포괄적 인 일반적인 답변은 아닙니다 (이미 답변이 있습니다). 이 대답은127.0.0.2
문제를 해결하는 데 사용 된 예를 보여줍니다 .
추출물:
OP는 서버에 대한 연결이 거부 된 경우 일부 소프트웨어를 테스트하려고했습니다. 이는 iptables
클라이언트 IP의 모든 트래픽을 거부 하는 임시 규칙에 의해 서버에서 수행되었습니다 . 클라이언트가 즉시 연결을 "인식"할 수 있었으며 거부되었습니다.
이 사람이 서버 소프트웨어를 클라이언트와 동일한 시스템으로 옮기고 루프백 인터페이스를 사용하려고 할 때 문제가 발생했습니다. 이 규칙은 통신을 차단하도록 설정 127.0.0.1
되었지만 연결이 거부 된 정보는 동일한 규칙에 따라 중단 된 클라이언트 소프트웨어 (아마도 시간 종료까지)에 도달하지 않았습니다.
해결책은 127.0.0.2
서버 주소 로 사용 하고 연결 을 거부하는 규칙을 설정하는 것이 었 습니다. 거부에 대한 정보 127.0.0.1
는 클라이언트 소프트웨어로 전달되어 클라이언트 소프트웨어로 전달 될 수있었습니다.