同じホスト上の 2 つの Docker コンテナー間で UDP パケットを交換する必要があるプロジェクトを開発しています。ホストは、ubuntu サーバー 14.04LTS (Dell PowerEdge R410、32 GB RAM、Intel Xeon CPU E5640 @ 2.67GHz) を実行する新しい専用サーバーです。
プロジェクトを開発しているときに、2 つの Docker コンテナ間でパケットが失われていることに気付きました。そのため、次のシナリオを作成して問題を示しました。
同じホストで実行されている ubuntu:14.04 から 3 つの Docker コンテナを作成しました。これらをコンテナ #1、コンテナ #2、およびコンテナ #3 と呼びましょう。Docker のバージョンは 1.11.1 (ビルド 5604cbe) です。
コンテナ #1 が実行中
iperf
です:iperf -c 225.2.2.2 -u -T 32 -t 60 -i 1 -b 700M
(UDP パケットを生成し、700Mbit/秒の帯域幅で 60 秒間マルチキャストします)。コンテナ #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 つ多い)。
これが制御された仮想ネットワークである場合、失われたパケットの数が大きく異なるのはなぜですか? また、「カーネルによってドロップされたパケット」とはどういう意味ですか?
そもそもパケットが失われるのはなぜですか? 繰り返しますが、これは制御された仮想環境であり、ネットワーク機器は使用されていません。
前もって感謝します。