netstat — IPv4 데몬이 -A inet6에만 나열된 포트를 수신하는 이유는 무엇입니까?

컴퓨터가있는 :

Linux superhost 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux

모든 인터페이스에서 포트 80에서 Apache를 실행 netstat -planA inet하지만에 표시되지 않지만 예기치 않게 다음에서 찾을 수 있습니다 netstat -planA inet6.

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::5672                 :::*                    LISTEN      2402/beam.smp
tcp6       0      0 :::111                  :::*                    LISTEN      1825/rpcbind
tcp6       0      0 :::9200                 :::*                    LISTEN      2235/java
tcp6       0      0 :::80                   :::*                    LISTEN      2533/apache2
tcp6       0      0 :::34611                :::*                    LISTEN      1856/rpc.statd
tcp6       0      0 :::9300                 :::*                    LISTEN      2235/java
...
tcp6       0      0 10.0.176.93:80          10.0.76.98:53704        TIME_WAIT   -
tcp6       0      0 10.0.176.93:80          10.0.76.98:53700        TIME_WAIT   -

위에서 볼 수 있듯이 TCP4로 잘 도달 할 수 있습니다. 그러나 이러한 연결조차도 아래에 나열되어 tcp6있습니다. 왜?



답변

기본적으로 주소를 Apache Listen매개 변수로 지정하지 않으면 주소를 사용하여 ipv6 주소를 처리 IPv4-mapped IPv6합니다. Apache ipv6을 살펴볼 수 있습니다

출력이 netstat아파치가 IPv4 주소에서 수신 대기하고 있지 않다는 것을 의미하지는 않습니다. 그것은 A의 IPv4-mapped IPv6주소를 입력합니다.


답변

그 이유는 모든 IPv4 주소가 IPv6 주소이기 때문입니다. IPv4 주소의 일대일 매핑에 사용되도록 작은 범위의 IPv6 주소가 별도로 설정되었습니다. 예를 들어, IPv4 주소 192.0.2.128는 IPv6 주소를 통해 액세스 할 수 있습니다 ::ffff:192.0.2.128. 이는 IPv6 만 지원하는 모든 응용 프로그램이 여전히 IPv4 주소에서 청취 할 수 있도록하기위한 것입니다. IPv4는 IPv6 주소를 처리하는 방법을 알 수 없으므로 IPv6 주소 (매핑되지 않은)가 IPv4 주소와 통신하는 데 사용할 수 없습니다 그래도).

모든 IPv4 주소는 IPv6으로 표시되므로 IPv6을 netstat사용하여 앱을 나열 할 때 IPv4도 얻게됩니다.
그것은 나타낼 수 10.0.176.93::ffff:10.0.176.93, 심지어 ::ffff:a00:b05d하지만, 응용 프로그램 개발자는 일반 점 표기법 IPv4 주소로 표시하기로 결정했습니다.


답변