Виконуйте 0,0,0,0, і *: * представляють одне і те ж?


23

Я використовував netstat (у Windows) для перегляду прослухованих портів для TCP і UDP:

enter image description here

Я помітив, що в Іноземна адреса відображається UDP *:* замість 0.0.0.0:0, чи ці два значення представляють одне й те саме? Якщо так, то чому відображається UDP *:* замість 0.0.0.0:0?


я вірю *:* є IPv6 час 0.0.0.0:0 є IPv4.
LPChip

Я також помітив наступне: UDP 0.0.0.0:5355 *:*Чи означає це, що дані можуть надсилатися між IPv4 і IPv6?
user612473


4
еквівалент IPv6 0.0.0.0 - це [::]
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 = & gt; 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 = & gt; :: = & gt; *:*
  • fe80:0000:0000:0000:2000:0aff:fea7:0f7c = & gt; 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
Як коментар Касперда нотатки (і коментар hobbs теж), IPv6 не має відношення до питання. Йдеться про те, що ми бачимо у стовпці Foreign Address, що відповідає тому, що знаходиться в тому ж рядку в стовпці Local Address, який є IPv4. (Хоча, з деякими операційними системами, прослуховування однієї адреси сімейства / IP-версії, як правило, може автоматично прослуховуватися на іншій сім'ї адрес.)
TOOGAM

15

The / позначає маску підмережі, яка є частиною IP-шару.

The : відноситься до порту, який є частиною транспортного шару.

Для TCP має сенс, що існує віддалений кінець для з'єднання.

UDP, оскільки він не має з'єднання, він не має ніякого сенсу для показу іноземної адреси.

Моє чуттєве почуття в тому, що він завжди буде показувати шаблон для UDP, і що він потенційно може зробити аналіз вихідних даних трохи більш дружнім, або показати, якщо ви використовуєте IPv4 / 6:

IPV4 "*:*" проти IPV6 "[::]:*"


Я просто говорив це своїм друзям. Ви можете відображати прослуховування ПОРТ, але для відображення фактичних віддалених сеансів, коли немає жодного, ймовірно, причина, чому її відображається як *:* для віддалених сеансів UDP. Я з вами погоджуюся.
NotAdmin Dave

6

В обох випадках інформація в основному не має сенсу, але вказує на більш-менш одне й те саме.

Ваша перша лінія є сокетом для прослуховування TCP. Поле локальної адреси вказує адресу та порт, на яких він приймає підключення, а стовпець віддаленої адреси нічого не значить, оскільки роз'єм прослуховування ще не має віддаленого кінця з'єднання. A підключено Роз'єм TCP буде показувати адресу іншого кінця з'єднання в цьому стовпці, але для сокету для прослуховування він вирішує відобразити адресу з нулем і порт.

Ваша друга лінія - це UDP-сокет. UDP є протоколом без з'єднання, що означає, що він посилає і отримує пакети без будь-якого уявлення про те, хто підключений до кого, чи є цей пакет частиною існуючої бесіди, або ж дані тільки що прийшли з блакитного. Локальний стовпець адреси має те ж саме значення, що і для TCP, а стовпець віддаленої адреси не має сенсу, тому що сокет UDP може мати один вузол, багато однорангових вузлів або жодних вузлів у будь-який момент. (Насправді POSIX має поняття "підключеного UDP-сокету", але це стає дещо іншим).

Тепер питання: чому вони відображаються по-різному? Здається, це не що інше, як привкус коду netstat Windows. З'являється Linux (net-tools) netstat 0.0.0.0:* для віддаленого кінця обох протоколів прослуховування сокетів і сокетів UDP (для IPv4; він відображається :::* для IPv6), який відрізняється від обох прикладів на Windows, але принаймні він відповідає одній програмі. Можливо, Windows збирається виділити семантичну відмінність між "бути заповненим пізніше" у випадку TCP і "відкритим для будь-якого" у випадку UDP, але так само ймовірно, що два біти коду були написані двома різними людьми без Особливу стурбованість викликає послідовність.


+1 для початку 4-го абзацу. 0.0.0.0 має деяку документацію: адреса всіх нулів - це "невизначена" адреса (відповідно до IPv6 адресація RFC 4291 сек 2.5.2 ), часто звертаючись до невідомих адрес. RFC 1700 сторінка 4 згадки "Можна використовувати лише як вихідну адресу", та RFC 1122 # сторінка-29 розділ "a" описує використання далі. ( моя відповідь про ::: згадується 0.0.0.0)
TOOGAM

Чи не так 0.0.0.0:0 значення в Іноземна адреса колонка означає, що будь-яка IP-адреса і номер порту можуть посилати дані в цей сокет? і якщо це значення було, наприклад 127.0.0.0:12345, це означає, що тільки IP-адреса 127.0.0.0 з номером порту 12345 може надсилати дані в цей сокет і ніхто інший?
Tom

6

Різниця просто нотаційна.

Netstat в Windows використовує 0.0.0.0:0 представляти абстрактне уявлення про "будь-яку віддалену адресу і порт" для локального IPv4 TCP-слухача і *:* для слухача UDP. Для IPv6 віддалену адресу позначають [::]:0 для TCP і *:* для UDP.

У OS X *.* використовується як для TCP, так і для UDP, будь то IPv4 або IPv6 (зауважте, що OS X використовує точки для розділення адреси та порту). Linux використовує 0.0.0.0:* для IPv4 і :::* для IPv6, з першими двома двокрапками, що представляють абревіатуру для всіх адрес IPv6, а третій двокрапкою - роздільник між адресою і портом.

IIRC від того, що я чув або прочитав давно, я думаю, UDP пар може з'являються, але зазвичай не тому, що вони розірвані після завершення, а UDP-з'єднання зазвичай дуже коротки, тривалість мілісекунд або менше. Я ніколи цього не бачив, хоча, таким чином, це може бути неправильним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.