私は macvlan を使用して仮想ネットワークを設定しており、それぞれのネットワークにトラフィック制御 tc を接続しています。それぞれの遅延を 90 ミリ秒に設定しました。しかし、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 は macvlan です。
答え1
あなたの問題はルーティングの実行方法に関係しており、tc、ネットムまたはマックVLAN。
ホストに属する IP アドレスからホストに属する別の IP アドレスに到達する場合、ルートはlo
ローカル ルーティング テーブル (hidden、try ip route show table local
) を参照して (ループバック) インターフェイスを使用し、IP アドレスが割り当てられた実際のインターフェイスは使用しません。
これを確認するには、カーネルに選択するルートを問い合わせます。たとえば、1 メートルそして平方メートル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が1 メートルのLAN(および平方メートルインターフェースは、無関係なARPの問題を回避するためにダウンしたままにされていたため、ping 192.0.2.1
遅延が表示される。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
最初の ping では、IP リンクを解決するためにその前に ARP 要求も実行され、これも遅延されるため、通常は 2 倍の遅延ペナルティが発生します。