LINUX.ORG.RU

Вопрос об UDP.


0

1

Могу ли я начать слушать 0.0.0.0:12345 и получать любой UDP-пакет с любого IP-адреса, которые летел на один из моих сетевых интерфейсов на данный порт?

Читаю: http://habrahabr.ru/post/146922/#habracut, цитата:

«Ну и естественно, никакой уважающий себя сетевой стек не собирается принимать пакеты с совершенно незнакомого адреса, даже если порты стоят правильные».

Что за бред, это ведь UDP! Какие такие «знакомые-незнакомые адреса» в UDP?

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

Могу ли я начать слушать 0.0.0.0:12345 и получать любой UDP-пакет с любого

IP-адреса, которые летел на один из моих сетевых интерфейсов на данный порт?

Да.

slapin ★★★★★
()

да.

прочитал по диагонали.

там утверждается, что теряются обратные сообщения(от вас отравителю), т.к. система может не найти маршрут до получателя, если интерфейсов много. для таких случаев предлагается решение в виде пар (интерфейс, сокет).

если ответы слать не нужно, то можно и одним обойтись.

ien
()

Что за бред, это ведь UDP! Какие такие «знакомые-незнакомые адреса» в UDP?

Если говорить о том что в действительности происходит в тексте по ссылке, то суть в том, что во втором случае

17:48:32.467167 IP 192.168.3.11.34509 > 192.168.1.235.5000: UDP, length 6
17:48:32.467292 IP 192.168.1.47.5000 > 192.168.3.11.34509: UDP, length 12
Ответ получается с адреса отличного от того, на который отправлялся запрос. По этому netcat и не выводит сообщение.

Сервер же и в том и в другом случае получил сообщение и послал ответ на тот адрес с которого получил. Просто в первый раз отправил с того же адреса на который получил, а во второй с другого адреса. Эта /проблема/ легко решается отключением проверки исходного адреса на клиенте.

kim-roader ★★
()
Ответ на: комментарий от kim-roader

Эта /проблема/ легко решается отключением проверки исходного адреса на клиенте.

Это если пакеты вобще доходят до клиента, ведь может быть использована маршрутизация на основе src-адреса пакета и ответный udp пакет можёт пойти к клиенту другим путём и потерятся.

mky ★★★★★
()

Станно, что в статье не упомянается IP_RECVDSTADDR/IP_PKTINFO. Вроде, IP_PKTINFO даже работает под Линуксом.

А про сетевой стек, видимо, автор подразумевал udp сокет, полученный через connect(), в него попадают только пакеты с одним набором [src|dst] [ip|port].

mky ★★★★★
()
Ответ на: комментарий от sdio

Ну... Чушь написал, да.

В статье пишут, что проблема тогда, когда много адресов на одном интерфейсе. И сокеты нужны для каждого адреса.

ien
()

Что за бред, это ведь UDP! Какие такие «знакомые-незнакомые адреса» в UDP?

man ip

man rp_filter

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.