0.0.0.0:0と*:*は同じものを表しますか?


23

netstat(Windows)を使用して、TCPおよびUDPのリッスンされたポートを表示しました。

ここに画像の説明を入力してください

[ Foreign Address ]列で、の*:*代わりにUDPが表示されることに気付きました。0.0.0.0:0これらの2つの値は同じものを表しますか?もしそうなら、なぜUDP *:*ではなくUDPが表示されるの0.0.0.0:0ですか?


*:*IPv6 0.0.0.0:0はIPv4であると信じています。
LPChip

また、次のことにも気付きました。UDP 0.0.0.0:5355 *:*それは、IPv4とIPv6の間でデータを送信できるということですか?
user612473


4
0.0.0.0に相当するIPv6は[::]
marsh-wiggle

2
@LPChipあなたは間違っています。*:*IPバージョンについては何も言わない。ただし、そのソケットのローカルアドレスはIPv4のみであるため、リモートアドレスもIPv4である必要があります。
カスペルド

回答:


12

私の答えが間違っていたことが指摘されています。削除できないので、代わりに正しいものを提供します。

この表現*:*は、「任意のアドレス、任意のポート」を意味します。すべてのUDPリスナーがこの署名を表示します。これは、UDPのコネクションレス型の性質によるものです。


元の(間違った)答え。はいといいえ。*:*任意のIPv6アドレスを指します。不明/未指定アドレスの区別はIPv4ではあいまいであるため、0.0.0.0 / 0を使用してネットワーク上の任意のホストを表しますが、IPv6では微妙な違いがあります。

ただし、ほとんどの場合、人々::は0の連続した文字列を表すために使用します。

IPv6アドレスでは、連続するゼロのシーケンスは次のように置き換えることができます::

  • 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に言及することは質問に関係ありません。
カスペルド

7
IPv6はこの質問にはまったく関係ありません。
ホッブズ

8
この答えは、尋ねられた質問に対してまったく間違っています。
ブラッド

3
以下のよう kasperdのコメントノート(とホッブズさんのコメントすぎ)、IPv6は質問とは無関係です。問題は、IPv4であるローカルアドレス列の同じ行にあるものに対応する外部アドレス列に表示されるものについてです。(ただし、一部のオペレーティングシステムでは、あるアドレスファミリ/ IPバージョンでリッスンすると、通常、別のアドレスファミリで自動リッスンされる場合があります。)
TOOGAM

15

/IPレイヤの一部であるサブネットネットマスクを指します。

:トランスポート層の一部であるポートを指します。

TCPの場合、接続用のリモートエンドがあることは理にかなっています。

UDPはコネクションレスであるため、外部アドレスを表示する意味がありません。

私の直感では、UDPのワイルドカードが常に表示され、出力の解析を少しわかりやすくしたり、IPv4 / 6を使用しているかどうかを表示したりする可能性があります。

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


友達にこれを言っていました。リスニングPORTSを表示することもできますが、実際にリモートセッションが表示されない場合は*:*、リモートUDPが存在しないセッションの場合と同様に表示されます。ここであなたに同意します。
NotAdminデイブ

6

どちらの場合も、情報は基本的に無意味ですが、多かれ少なかれ同じことを示しています。

最初の行は、TCP待機ソケットです。ローカルアドレス列は、接続を受け入れているアドレスとポートを示し、リッスンソケットにはまだ接続のリモートエンドがないため、リモートアドレス列は何も意味しません。接続された TCPソケットは、その列の接続のもう一方の端のアドレスを示しているが、それはすべてゼロのアドレスとポートを表示することを決定したソケットを聞くためでしょう。

2行目はUDPソケットです。UDPはコネクションレス型プロトコルです。つまり、誰と誰が接続したか、パケットが既存の会話の一部であるか、データがすぐに到着したかなどの概念なしにパケットを送受信します。ローカルアドレス列にはTCPの場合と同じ意味があり、リモートアドレス列には意味がありません。UDPソケットには1つのピア、多くのピア、またはいつでもピアがないためです。(実際には、POSIXには「接続されたUDPソケット」という概念がありますが、それは少し遠いところにあります)。

ここで質問です。なぜ表示が異なるのですか?これは、Windowsのnetstatコードの奇抜に過ぎないようです。Linux(net-tools)netstat 0.0.0.0:*は、TCPリッスンソケットとUDPソケット(IPv4の場合、:::*IPv6の場合)の両方のリモートエンドに対して表示されます。これはWindowsの例とは異なりますが、少なくとも同じプログラム内で一貫しています。おそらくWindowsは、TCPの場合は「後で入力する」、UDPの場合は「何でも開く」というセマンティックな区別を求めていますが、2ビットのコードは、一貫性に対する特別な懸念。


4番目の段落の開始時に+1。0.0.0.0にはいくつかのドキュメントがあります。すべてゼロのアドレスは「不特定の」アドレス(IPv6アドレッシングRFC 4291 sec 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がこのソケットにデータを送信でき、他の誰も送信できないことを意味しますか?
トム

6

違いは単なる表記です。

WindowsのNetstatは0.0.0.0:0、ローカルIPv4 TCPリスナーおよび*:*UDPリスナーの「任意のリモートアドレスとポート」の抽象的な概念を表すために使用します。IPv6の場合、リモートアドレスは[::]:0TCPおよび*:*UDPで示されます。

OS Xでは、*.*IPv4でもIPv6でも、TCPとUDPの両方に使用されます(OS Xはドットを使用してアドレスとポートを分離することに注意してください)。Linuxは0.0.0.0:*IPv4および:::*IPv6に使用します。最初の2つのコロンはすべてのIPv6アドレスの省略形を表し、3番目のコロンはアドレスとポートの間の区切り文字を表します。

私がずっと前に聞いたり読んだものからのIIRCは、UDPのペアリング現れる可能性があると思いますが、通常は完了時に切断され、UDP接続は通常非常に短く、ミリ秒以下です。しかし、私はこれを自分で見たことがないので、間違っている可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.