Macvlansを使用して仮想ネットワークをセットアップしており、トラフィック制御tcをそれぞれに接続しています。それぞれの遅延を90msに設定しました。しかし、pingを実行すると、0.02秒の時間が得られます。 tcがmacvlanで機能しないのはなぜですか?
次のコマンドを使用しています。
tc qdisc add dev m1 root netem delay 90ms
tc qdisc add dev m2 root netem delay 90ms
次に、m1のIPからm2のIPにpingを実行します。 m1とm2はmacvlansです。
あなたの問題は、ルーティングがどのように行われるかに関係しており、 tc 、 netem または macvlan ではありません。
ホストに属するIPアドレスからホストに属する他のIPアドレスに到達する場合、ルートはローカルルーティングテーブルを参照してlo
(ループバック)インターフェイスを使用します(非表示、ip route show table local
を試してください)また、IPアドレスが割り当てられた実際のインターフェイスを使用することはありません。
カーネルに選択するルートを尋ねることで、これを確認できます。たとえば、m1およびm2のアドレスが192.0.2.2/24および192.0.2.3/24の場合:
# ip route get from 192.0.2.2 to 192.0.2.3
local 192.0.2.3 from 192.0.2.2 dev lo table local uid 0
cache <local>
これらのインターフェイスでテストを行う必要がある場合は、それらをテストするための独自のルーティングスタックを備えた他のシステムが必要です。このシステムは、実際のホスト、VM、コンテナー、または単に(または複数の)追加のネットワーク名前空間を使用している可能性があります。
上記の私の仮定のケースでは、192.0.2.1がm1のLANにある場合(そしてm2インターフェイスは回避するために抑えられました考えられる無関係なARPの問題)、m1が使用されるため、ping 192.0.2.1
は遅延を示します。
# ip route get from 192.0.2.2 192.0.2.1
192.0.2.1 from 192.0.2.2 dev m1 uid 0
cache
IPリンクを解決する前にARP要求も行われるため、最初のpingには通常2倍の遅延ペナルティがかかります。これも遅延します。