Użyłem netstat (w systemie Windows), aby wyświetlić nasłuchiwane porty dla TCP i UDP:
Zauważyłem, że w kolumnie Adres obcy wyświetlane są *:*
zamiast UDP 0.0.0.0:0
te dwie wartości? Jeśli tak, to dlaczego wyświetla się *:*
zamiast UDP 0.0.0.0:0
?
windows
networking
netstat
użytkownik612473
źródło
źródło
*:*
jest IPv6, podczas gdy0.0.0.0:0
jest IPv4.UDP 0.0.0.0:5355 *:*
czy to oznacza, że dane mogą być przesyłane między IPv4 a IPv6?*:*
nie mówi nic o wersji IP. Ponieważ jednak lokalny adres tego gniazda to tylko IPv4, zdalny adres musi być również IPv4.Odpowiedzi:
Wskazano, że moja odpowiedź była błędna. Ponieważ nie mogę go usunąć, zamiast tego podam poprawny.
Wyrażenie
*:*
oznacza „Dowolny adres, dowolny port”. Wszyscy słuchacze UDP będą wyświetlać ten podpis. Wynika to z bezpołączeniowego charakteru UDP.Oryginalna (niepoprawna) odpowiedź. Tak i nie.
*:*
odnosi się do DOWOLNEGO adresu IPv6. W IPv4 rozróżnienie między nieznanym / nieokreślonym adresem jest niejasne, dlatego używamy 0.0.0.0/0 do reprezentowania dowolnego hosta w sieci, ale w IPv6 istnieje subtelna różnica.Jednak w przeważającej części ludzie
::
reprezentują ciąg ciągów zer.W adresie IPv6 dowolną sekwencję ciągłych zer można zastąpić
::
: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
Reprezentacja za pomocą symboli wieloznacznych pozwala jednak na dokładniejszą kontrolę wzorców adresów. Na przykład
::
nie pasujefe80::2000:0aff:fea7:0f7c
, ale*:*
będzie.Ta różnica nie jest tak naprawdę znacząca dla żadnego urządzenia, które nie wykonuje routingu, ale gdy przychodzi czas na wybranie optymalnych tras do zagregowanych przestrzeni adresowych, zapis symboli wieloznacznych umożliwia bardziej elastyczny wybór sieci docelowych.
źródło
*:* refers to ANY IPv6 address
tutaj mówisz,any..address
np. IPv4 lub IPv6. Więc co to jest? Czy*:*
ogranicza się do IPv6, czy też pozwala na IPv4?/
Odnosi się do maski sieci podsieci, która jest częścią warstwy IP.:
Odnosi się do portu, który jest częścią warstwy transportowej.W przypadku protokołu TCP sensowne jest istnienie zdalnego końca połączenia.
UDP, ponieważ jest bezpołączeniowy, nie ma sensu wyświetlać adresu zagranicznego.
Mam przeczucie, że zawsze wyświetlałby symbol wieloznaczny dla UDP i że może tam być, aby parsowanie danych wyjściowych było nieco bardziej przyjazne lub aby pokazać, jeśli używasz IPv4 / 6:
IPV4 "*:*"
vsIPV6 "[::]:*"
źródło
*:*
dla zdalnych nieistniejących sesji UDP. Zgadzam się z tobą tutaj.W obu przypadkach informacje są w zasadzie bez znaczenia, ale wskazują mniej więcej to samo.
Twój pierwszy wiersz to gniazdo nasłuchujące TCP. Kolumna adresu lokalnego wskazuje adres i port, na którym akceptuje połączenia, a kolumna adresu zdalnego nic nie znaczy, ponieważ gniazdo nasłuchiwania nie ma jeszcze zdalnego końca połączenia. Podłączone gniazdo TCP pokaże adres drugim końcu połączenia w tej kolumnie, ale posłuchać gniazdo zdecyduje się wyświetlić wszystkie zera adres i port.
Druga linia to gniazdo UDP. UDP jest protokołem bezpołączeniowym, co oznacza, że wysyła i odbiera pakiety bez względu na to, kto jest z kim połączony, czy pakiet jest częścią istniejącej konwersacji, czy też dane przybyły nieoczekiwanie. Lokalna kolumna adresowa ma takie samo znaczenie, jak ma to miejsce w przypadku TCP, a kolumna adresu zdalnego jest bez znaczenia, ponieważ gniazdo UDP może mieć jednego peera, wiele peerów lub może nie mieć peera w żadnym momencie. (W rzeczywistości POSIX ma pojęcie „podłączonego gniazda UDP”, ale robi się to nieco dalekie).
Teraz pytanie: dlaczego wyświetlają się inaczej? Wydaje się być niczym więcej niż dziwactwem kodu netstat systemu Windows. Linux (net-tools) wyświetla netstat
0.0.0.0:*
dla zdalnego końca zarówno gniazd nasłuchujących TCP, jak i gniazd UDP (dla IPv4; wyświetla:::*
dla IPv6), co różni się od obu przykładów w systemie Windows, ale przynajmniej jest spójne w tym samym programie. Być może Windows chce semantycznego rozróżnienia między „do wypełnienia później” w przypadku TCP i „otwartym na wszystko” w przypadku UDP, ale równie prawdopodobne jest, że dwa bity kodu zostały napisane przez dwie różne osoby bez szczególna troska o spójność.źródło
0.0.0.0:0
wartość w kolumnie Adres obcy nie oznacza, że dowolny adres IP i numer portu może wysyłać dane do tego gniazda? a jeśli ta wartość była na przykład127.0.0.0:12345
, oznacza to, że tylko adres IP127.0.0.0
z numerem portu12345
może wysyłać dane do tego gniazda i nikogo więcej?Różnica jest po prostu notacyjna.
Netstat w systemie Windows
0.0.0.0:0
reprezentuje abstrakcyjne pojęcie „dowolnego zdalnego adresu i portu” dla lokalnego nasłuchiwania TCP IPv4 i*:*
nasłuchiwania UDP. W przypadku IPv6 adres zdalny jest oznaczony przez[::]:0
dla TCP i*:*
UDP.W OS X
*.*
jest używany zarówno dla protokołu TCP, jak i UDP, zarówno IPv4, jak i IPv6 (zwróć uwagę, że OS X używa kropek do oddzielenia adresu i portu). Linux używa0.0.0.0:*
IPv4 i:::*
IPv6, przy czym pierwsze dwa dwukropki oznaczają skrót dla całego adresu IPv6, a trzeci dwukropek separator między adresem a portem.IIRC z czegoś, co słyszałem lub czytałem dawno temu, myślę, że pary UDP mogą się pojawiać, ale zwykle nie, ponieważ są zrywane po zakończeniu, a połączenia UDP są zwykle bardzo krótkie, trwają milisekundy lub krócej. Jednak nigdy tego nie widziałem, więc może to być niepoprawne.
źródło