eth0 と lo のポートにトラフィックを転送します。
同じポートと異なるポートの同じトラフィックに対して tcpdump を実行し、パケット数を数えると、時間 t の間、eth0 と比較してループバックのパケット数が半分だけ表示されます。
私は異なるポート番号、異なるトラフィックレートでこれを試しましたが、loのパケット数は常にeth0の半分です。
これを説明できる lo と eth インタフェースの間に根本的な違いはありますか?
更新:ループバックIPアドレスを使用してすべてのデバイスで同じトラフィックを送信しています。パケットが2つのデバイスと対応するループバックポートの間で分割される可能性はありますか?
アップデート2:tcpdumpで見られるのは、eth0の場合、パケットの100%がフィルタによって受信されてキャプチャされることです。ただし、Loでは、フィルタは受信したパケットの50%しか処理しません。フィルタから受信したすべてのパケットではなく、キャプチャされたパケットのみを計算します。
しかし、なぜLoはパケットの50%だけをキャプチャしたのですか?
答え1
インターフェイスの例は次のとおりです。
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether be:1a:e0:7d:22:6e brd ff:ff:ff:ff:ff:ff link-netns test
そしてMTUはイーサネット01500、MTUルオ65536です。これは、TCPを介して何かを送信する場合、より少ないパケットが必要であることを意味します。ルオ終わりよりイーサネット0同じ全体のデータサイズに対して。
データマージの正確な動作は、さまざまな要因といくつかの要因によって異なります。TCPオプション。例えばTCP_CORKこの動作を優先して使用しますTCP_NODELAYこの動作は防止されます(無効にするとNagelのアルゴリズム)。