2017-02-13 20 views
0

Я занимаюсь исследованиями в области bigdata. Для этого я разработал сеть с несколькими узлами, обменивающимися одноадресными и многоадресными пакетами UDP. Существуют UDP-пакеты с 33792 байтами и Ack-пакеты с 37 байтами. MTU установлен на 1500. Все работает нормально, давайте скажем, от 300 до 5000 пакетов. Затем вдруг какая-то машина получает пакет (я вижу его с tcmpdump -i any -vvv -XX -e -s 64 > dump.txt 2>&1). Но сокет приложения не получает его (выбор не просыпается).Пакет многоадресной рассылки UDP, полученный с помощью tcmp, но не полученный сокетом

Я использую сокеты IPv4 с TTL, установленным в 1, то есть в локальной сети.

После ночи, пытаясь решить, я в конечном итоге установка:

sudo sysctl -w net.core.wmem_max=134217728 
sudo sysctl -w net.core.rmem_max=134217728 
sudo sysctl -w net.ipv4.udp_mem=1638400 1638400 1638400 
sudo sysctl -w net.core.somaxconn=4096 
sudo sysctl -w net.core.netdev_max_backlog=262144 
sudo sysctl -w net.core.optmem_max=134217728 
sudo sysctl -w net.ipv4.udp_rmem_min=65535 
sudo sysctl -w net.ipv4.udp_wmem_min=65535 

The client sockets set SO_SNDBUF to 134217728 (128 M), and server socket sets SO_RCVBUF to same value.

Но похоже, до сих пор не решена проблема. Есть предположения??? .... TIA

+0

Э? 'Пойманный 'tcpdump', но' не может видеть его с помощью' tcpdump' 'и' получено сокетом ', но' socket desn't его принимает '? Прими решение. – EJP

+0

Спасибо за консультацию. Я отредактировал вопрос. –

+0

Какая ОС вы используете? Что вы подразумеваете под «какой-то машиной получает пакет»? Это другой компьютер, который работает с приложением приложения? –

ответ

0

На самом деле, похоже, проблема решена. Любой желающий в деталях (преимущества/недостатки/компромиссы) значения sysctl, которые я установил, очень приветствуются.

0

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

На UN * X это сделано с чем-то вроде

struct ip_mreq mreq; 
setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); 

Ловушка в том, что если что-то не правильно настроен (или не работает должным образом, например, выключатель) вы будете иметь возможность получить многоадресной рассылки трафик в течение некоторого времени, а затем, внезапно, он останавливается. Поэтому, когда вы получаете пакеты, вы не можете «сделать вывод», все в порядке ».

Кроме того: вся потенциально прозрачная инфраструктура в вашей сети (например, переключатели уровня 2 == обычные коммутаторы) должна поддерживать версию IGMP, используемую вашей ОС.

 Смежные вопросы

  • Нет связанных вопросов^_^