Я занимаюсь исследованием больших данных. Для этого я разработал сеть с несколькими узлами, обменивающимися одноадресными и многоадресными пакетами UDP. Есть пакеты UDP с 33792 байтами и пакеты Ack с 37 байтами. MTU установлен на 1500. Все работает нормально некоторое время, скажем от 300 до 5000 обменяемых пакетов. Затем вдруг какая-то машина получает пакет (я вижу это с tcmpdump -i any -vvv -XX -e -s 64 > dump.txt 2>&1
). Но сокет приложения его не получает (выбор не просыпается).
Я использую сокеты 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.
Но похоже до сих пор не решили проблему. Есть предположения??? .... ТИА
tcpdump
», но «не может видеть его сtcpdump
» и «получен сокетом», но «сокет не получает его»? Прими решение. - person user207421   schedule 13.02.2017