Я разрабатываю проект, где мне нужно обмениваться UDP-пакетами между двумя контейнерами докеров на одном хосте. Хост - это новый выделенный сервер, на котором запущен сервер ubuntu 14.04LTS (Dell PowerEdge R410, 32 ГБ оперативной памяти, процессор Intel Xeon E5640 @ 2,67 ГГц).Отсутствует UDP-пакет между контейнерами докеров
При разработке моего проекта, я заметил, что я теряла пакеты между 2 докеров контейнерами, поэтому я разработал следующий сценарий, чтобы продемонстрировать мою проблему:
я создал 3 Docker контейнеры из убунту: 14.04, работающих на одном хосте , давайте назовем их контейнером №1, контейнером № 2 и контейнером №3. Версия докера - 1.11.1 (build 5604cbe).
Контейнер # 1 работает
iperf
:iperf -c 225.2.2.2 -u -T 32 -t 60 -i 1 -b 700M
(он генерирует UDP-пакеты и многоадресной передачи их на 60с с 700Mbit/сек доступ к каналу).Контейнер №2 работает
iperf
:iperf -s -u -B 225.2.2.2 -i 1
(прослушивает тот же адрес многоадресной рассылки).Контейнер №3 работает
tcpdump
:tcpdump -i eth0 port 5001
(который прослушивает порт, который контейнер №1 будет передавать в многоадресную рассылку).
После 60 секунд Контейнер №1 сообщает, что отправил 2786350 дейтаграмм.
Контейнер # 2 сообщает, что:
Interval Transfer Bandwidth Jitter Lost/Total Datagrams
0.0-60.0 sec 3.81 GBytes 546 Mbits/sec 0.001 ms 2250/2786349 (0.081%)
Контейнер # 3 сообщает, что:
2770477 packets captured
2786351 packets received by filter
15874 packets dropped by kernel
Итак, несколько вопросов:
Почему контейнеры # 2 и # 3 не сообщают о том же количестве принятых пакетов (контейнер # 2 имеет 1 меньше дейтаграммы, а контейнер № 3 - еще 1)?
Почему количество потерянных пакетов сильно отличается, если это управляемая виртуальная сеть? Кроме того, что означает «пакеты, сброшенные ядром»?
Почему я теряю пакеты в первую очередь? Еще раз, это контролируемая виртуальная среда, ни одно сетевое оборудование не используется.
Заранее спасибо.