netstat 출력의 :::80은 ipv6 또는 ipv6+ipv4만을 의미합니까?

netstat 출력의 :::80은 ipv6 또는 ipv6+ipv4만을 의미합니까?

내가 듣고 있다면 :::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.tcp46udp46

@Johan Myreen 답변에 감사드립니다. 예제를 통해 이 답변을 개선하고 싶습니다.

이 두 값을 사용하여 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의 동작만 결정한다는 것을 알 수 있습니다.

관련 정보