0.0.0.0:0과 * : *가 같은 것을 나타내나요?


23

netstat (Windows)를 사용하여 TCP 및 UDP의 수신 포트를 확인했습니다.

여기에 이미지 설명을 입력하십시오

나는에 나타났습니다 외국 주소 열, UDP 표시 *:*대신은 0.0.0.0:0,이 두 값이 같은 일을 표현합니까? 그렇다면 왜 UDP *:*대신 UDP가 표시 0.0.0.0:0됩니까?


나는 *:*IPv6이고 0.0.0.0:0IPv4 는 믿습니다 .
LPChip

나는 또한 다음을 발견했다 : UDP 0.0.0.0:5355 *:*, 이는 IPv4와 IPv6 사이에서 데이터가 전송 될 수 있다는 것을 의미 하는가?
user612473


4
0.0.0.0에 해당하는 IPv6는 다음과 같습니다. [::]
marsh-wiggle

2
@LPChip 당신은 착각합니다. *:*IP 버전에 대해서는 아무 말도하지 않습니다. 그러나 해당 소켓의 로컬 주소는 IPv4 전용이므로 원격 주소도 IPv4 여야합니다.
kasperd

답변:


12

내 답변에 오류가 있음이 지적되었습니다. 삭제할 수 없으므로 대신 올바른 것을 제공하겠습니다.

이 표현 *:*은 "모든 주소, 모든 포트"를 의미합니다. 모든 UDP 리스너는이 서명을 표시합니다. 이것은 UDP의 비 연결 특성 때문입니다.


원래 (잘못된) 답변입니다. 예, 아니오 *:*모든 IPv6 주소를 나타냅니다. 알 수없는 / 지정되지 않은 주소 사이의 구별은 IPv4에서 모호하므로 0.0.0.0/0을 사용하여 네트워크의 호스트를 나타내지 만 IPv6에서는 미묘한 차이가 있습니다.

그러나 대부분의 경우 사람들 ::은 연속적인 0의 문자열을 나타내는 데 사용 합니다.

IPv6 주소에서 연속 된 0의 시퀀스는 :: 다음 과 같이 바꿀 수 있습니다 .

  • 0.0.0.0/0=> 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000 => ::=>*:*
  • fe80:0000:0000:0000:2000:0aff:fea7:0f7c => fe80::2000:0aff:fea7:0f7c

그러나 와일드 카드를 사용한 표현은 주소 패턴을보다 세밀하게 제어 할 수 있습니다. 예를 들어:: 일치하지 fe80::2000:0aff:fea7:0f7c않지만 *:*의지합니다.

이러한 차이는 라우팅을 수행하지 않는 모든 장치에는 실제로 의미가 없지만 집계 된 주소 공간에 대한 최적의 경로를 선택해야 할 때 와일드 카드 표기법을 사용하면 대상 네트워크를보다 유연하게 선택할 수 있습니다.


5
그러나 당신은 당신의 대답에 *:* refers to ANY IPv6 address 여기에 any..address아마도 IPv4 또는 IPv6 이라고 말합니다 . 그래서 어느 것입니까? 가요 *:*의 IPv6에 자신을 제한하거나 너무 IPv4를 허용 하는가?
barlop

2
질문에 언급 된 두 소켓은 모두 IPv4 전용입니다. 각 소켓에 할당 된 로컬 주소에서이를 확인할 수 있습니다. 따라서 IPv6을 언급하는 것은 질문과 관련이 없습니다.
kasperd

7
IPv6은이 질문과 전혀 관련이 없습니다.
hobbs

8
이 답변은 묻는 질문에 대해 완전히 잘못되었습니다.
Brad

3
으로 kasperd의 코멘트 노트 (과 홉스의 코멘트 도), IPv6은 질문에 관련이 없습니다. 문제는 외부 주소 열에 표시되는 내용이며, 이는 로컬 주소 열의 동일한 행에있는 것과 일치합니다 (IPv4). (일부 운영 체제에서는 특정 주소 계열 / IP 버전에서 수신 대기하는 것이 다른 주소 계열에서 자동 수신 될 수 있습니다.)
TOOGAM

15

/IP 계층의 일부입니다 서브넷 넷 마스크를 의미한다.

:전송 계층의 일부 포트를 지칭한다.

TCP의 경우 연결을위한 원격 엔드가 있음을 의미합니다.

UDP는 비 연결형이므로 외부 주소를 표시하는 것은 의미가 없습니다.

내 생각에 그것은 항상 UDP에 대한 와일드 카드를 표시하고 출력을 좀 더 친숙하게 구문 분석하거나 IPv4 / 6을 사용하고 있는지 보여줄 가능성이 있다는 것입니다.

IPV4 "*:*" vs IPV6 "[::]:*"


나는 단지 몇몇 친구들에게 이것을 말하고 있었다. 수신 대기 포트를 표시 할 수 있지만 원격 세션이 없을 때 실제 원격 세션을 표시하는 *:*것은 원격 UDP 존재하지 않는 세션에 대해 표시되는 이유 일 수 있습니다. 나는 당신과 동의합니다.
NotAdmin Dave

6

두 경우 모두 정보는 기본적으로 의미가 없지만 거의 같은 것을 나타냅니다.

첫 번째 줄은 TCP 청취 소켓입니다. 로컬 주소 열은 연결을 수락하는 주소와 포트를 나타내며, 원격 소켓은 아직 연결의 원격 끝이 없기 때문에 원격 주소 열은 아무 의미가 없습니다. A는 연결 TCP 소켓은 열에서 연결의 다른 쪽 끝의 주소를 표시 것이다, 그러나 소켓을 듣는 것이 모두 제로 주소와 포트를 표시하기로 결정합니다.

두 번째 줄은 UDP 소켓입니다. UDP는 비 연결 프로토콜입니다. 즉, 누가 누구에게 연결했는지, 패킷이 기존 대화의 일부인지 또는 데이터가 방금 파란색으로 도착했는지에 대한 개념없이 패킷을 보내고받습니다. 로컬 주소 열은 TCP와 동일한 의미를 가지며 UDP 소켓은 언제든지 하나의 피어, 많은 피어 또는 피어를 가질 수 있으므로 원격 주소 열은 의미가 없습니다. (실제로 POSIX는 "connected UDP socket"이라는 개념을 가지고 있지만 조금 멀어지고 있습니다.)

이제 질문 : 왜 다르게 표시됩니까? Windows netstat 코드의 기발한 것 같습니다. Linux (net-tools) netstat는 0.0.0.0:*TCP 청취 소켓과 UDP 소켓 (IPv4의 경우 IPv4의 경우)의 원격 끝을 표시 :::*하며 Windows의 예와 다르지만 최소한 동일한 프로그램 내에서 일관성이 있습니다. 아마도 Windows는 TCP의 경우 "나중에 채울 것"과 UDP의 경우 "무언가에 열기"를 의미 적으로 구별하려고 할 것입니다. 그러나 두 비트의 코드가 다른 두 사람에 의해 작성된 것처럼 일관성에 대한 특별한 관심.


4 번째 문단 시작시 +1 0.0.0.0에는 몇 가지 문서가 있습니다. 모든 0의 주소는 "지정되지 않은"주소 ( IPv6 주소 지정 RFC 4291 초 2.5.2 에 따름 )이며 종종 알 수없는 주소에 적용됩니다. RFC 1700 페이지 4 에는 "소스 주소로만 사용할 수 있음"이 언급되어 있으며 RFC 1122 # page-29 섹션 "a"에는 사용법이 자세히 설명되어 있습니다. ( :::에 대한 내 답변 0.0.0.0 언급)
TOOGAM

하지 않습니다 0.0.0.0:0가치 외국 주소 열 수단은 IP 주소와 포트 번호는이 소켓에 데이터를 보낼 수? 그리고 만약이 값이 예 127.0.0.0:12345라면, 127.0.0.0포트 번호를 가진 IP 주소 12345만이이 소켓으로 데이터를 보낼 수 있다는 것을 의미합니다 .
Tom

6

차이점은 단순히 표기법입니다.

Windows의 Netstat 0.0.0.0:0는 로컬 IPv4 TCP 리스너 및 *:*UDP 리스너에 대한 "원격 주소 및 포트"에 대한 추상적 인 아이디어를 표현하는 데 사용 합니다 . IPv6의 경우 원격 주소는 [::]:0TCP 및 *:*UDP 로 표시됩니다 .

OS X에서는 *.*IPv4 또는 IPv6에 관계없이 TCP 및 UDP 모두에 사용됩니다 (OS X는 점과 주소를 구분하기 위해 점을 사용함). 리눅스는 0.0.0.0:*IPv4와:::* IPv6에 사용하며 처음 두 개의 콜론은 모든 IPv6 주소의 약어를 나타내고 세 번째 콜론은 주소와 포트 사이의 구분 기호입니다.

오래 전에 들었거나 읽은 것으로부터 IIRC는 UDP 페어링 표시 될 수 있다고 생각 하지만 완료시 끊어지고 UDP 연결이 일반적으로 매우 짧고 밀리 초 이하로 지속되기 때문에 그렇지 않습니다. 나는 이것을 직접 본 적이 없으므로 잘못 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.