UbuntuサーバーでIPv6ソケットをリッスンしていることを調査しようとしています。 [::]と*の違いがわかりません。
私の心の2つの質問:
$ ss --listening --tcp --ipv6
State Recv-Q Send-Q Local Addr:Port Peer Addr:Port
LISTEN 0 128 *:http *:*
LISTEN 0 128 *:8083 *:*
LISTEN 0 128 [::]:ssh [::]:*
LISTEN 0 128 *:19998 *:*
LISTEN 0 128 *:19999 *:*
*
および[::]
は、ソケットの作成中にIPV6_V6ONLY
フラグがそれぞれfalse
またはtrue
に設定されたかどうかを示します。
例:
$ socat UDP6-LISTEN:1234,ipv6only=0 - &
$ socat UDP6-LISTEN:4321,ipv6only=1 - &
$ ss -l -6 -e
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:1234 *:* uid:1000 ino:3003972 sk:1 v6only:0 <->
udp UNCONN 0 0 [::]:4321 [::]:* uid:1000 ino:3004007 sk:2 v6only:1 <->
ただし、この表現はss
固有の動作です。 netstat
およびそれ以前のバージョンのss
は、両方のケースを[::]
として表します。 ss
のソースの関連する箇所は ここ にあります。
フラグの目的は、ipv6
のマンページに記載されています。
IPV6_V6ONLY(Linux 2.4.21および2.6以降)
このフラグがtrue(ゼロ以外)に設定されている場合、ソケットはIPv6パケットの送受信のみに制限されます。この場合、IPv4とIPv6アプリケーションは同時に単一のポートにバインドできます。
このフラグがfalse(ゼロ)に設定されている場合、ソケットを使用して、IPv6アドレスまたはIPv4にマップされたIPv6アドレスとの間でパケットを送受信できます。
引数は整数のブール値へのポインタです。
このフラグのデフォルト値は、ファイルの内容/ proc/sys/net/ipv6/bindv6onlyによって定義されます。そのファイルのデフォルト値は0(false)です。