私が聞いているなら、:::80
すべてのipv6で聞いていますか、それともすべてのipv6 + ipv4で聞いていますか?
これは私のものですnetstat -tln
:
tcp 0 0 :::8080 :::*
ベストアンサー1
バインドされた受信ソケット::
(つまり、すべてのアドレス(IPv6アドレスINADDR6_ANY
))は、IPv4を使用する接続を受信したり受信したりしない可能性があります。これはいくつかの点に依存します。
- 一部のオペレーティングシステムデュアルスタック、これらのオペレーティングシステムでは、
IPV6_V6ONLY
(ソケットを生成したプログラムによって)リスニングソケットにソケットオプションが設定されているかどうかによって異なります。 LinuxベースのオペレーティングシステムとFreeBSDは、これらのオペレーティングシステムの例です。プログラムがこのオプションを明示的に設定していない場合、デフォルトの動作はオペレーティングシステムによって異なります。たとえば、Linuxベースのオペレーティングシステムでは、0または1を作成してこのデフォルトを変更できます
/proc/sys/net/ipv6/bindv6only
。 - 一部の他のオペレーティングシステムではそうではありません。デュアルスタック、これらのオペレーティングシステムでは、単一のソケットを使用してIPv6とIPv4の両方を受信できません。 OpenBSDはそのようなオペレーティングシステムの一つです。
netstat
一部のオペレーティングシステムでは、ソケットがデュアルスタックかどうかを出力として通知します。たとえば、FreeBSDは出力の最初の列にデュアルスタックソケットを報告しますnetstat
。tcp46
udp46
@Johan Myreen ありがとうございます。例を通してこの答えを改善したいと思います。
これら2つの値を使用してipv6_only動作をテストしています。
1.
cat /proc/sys/net/ipv6/bindv6only
0
nc -6 -l 80
#server started
# netstat
tcp6 0 0 :::80 :::* LISTEN
# nc client
nc localhost 80
test
# server response
nc -6 -l 80
test
# from ipv6 now
nc ::1 80
test ipv6
# server response
nc -6 -l 80
test ipv6
2.
cat /proc/sys/net/ipv6/bindv6only
1
# server started
nc -6 -l 80
# connect to ipv4
nc localhost 80
nc: connect to localhost port 80 (tcp) failed: Connection refused
# connect to ipv6
nc ::1 80
test ipv6
# server respose
nc -6 -l 80
test ipv6
上記の結果から、/proc/sys/net/ipv6/bindv6の値はipv6またはipv6 + ipv4の動作のみを決定することがわかります。