Linux でネットワーク パケット損失と遅延をシミュレートする方法

Linux でネットワーク パケット損失と遅延をシミュレートする方法

netem と tc:

netem は、Linux カーネル バージョン 2.6 以降で提供されるネットワーク シミュレーション モジュールです。この機能モジュールを使用すると、パフォーマンスの良好なローカル エリア ネットワークで、低帯域幅、伝送遅延、パケット損失などの複雑なインターネット伝送パフォーマンスをシミュレートできます。 Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian など、Linux 2.6 (またはそれ以降) カーネル バージョンを使用する多くの Linux ディストリビューションでは、このカーネル機能が有効になっています。

tc は Linux システムのツールであり、正式名称はトラフィック制御です。 tc は netem の動作モードを制御するために使用できます。つまり、netem を使用する場合は、少なくとも 2 つの条件が必要です。1 つはカーネルに netem 関数が含まれていること、もう 1 つは tc が必要であることです。

この記事で紹介したフロー制御は、パケットの送信動作のみを制御でき、パケットの受信動作を制御できないことに注意してください。同時に、物理インターフェースに直接影響を及ぼします。物理 eth0 を制御すると、論理ネットワーク カード (eth0:1 など) も影響を受けます。逆に、論理ネットワーク カードを制御すると、制御が無効になる可能性があります。 (注: 仮想マシン内の複数のネットワーク カードは、仮想マシン内の複数の物理ネットワーク カードとみなされます)。

Linux には、ネットワーク パケットの損失と遅延をシミュレートするために使用できるトラフィック制御という tc ツールがあります。バックエンド サーバーを開発するときに、特定のネットワーク パケット損失条件下でサーバーが適切に機能するかどうかを知りたい場合は、tc を使用してパケット損失率をシミュレートできます。

パケット損失のシミュレーション

次のコマンドはパケット損失をシミュレートすることができ、eth0 ネットワーク ポートから送信されるパケットの 10% がランダムに失われます。

sudo tc qdisc add dev eth0 root netem 損失 10%

アナログディレイ

次のコマンドは、eth0 ネットワーク ポートから送信されるパケットを 40 ミリ秒遅延します。

sudo tc qdisc add dev eth0 root netem 遅延 40ms

特定のシナリオにおけるパケット損失と遅延

上記で紹介したコマンドは eth0 ネットワーク ポート全体に有効であることに注意してください。つまり、eth0 から送信されるすべてのパケットでランダムなパケット損失または遅延が発生します。しかし、場合によっては、パケット損失と遅延が特定の宛先アドレスにのみ影響するようにしたいことがあります。どうすればよいでしょうか?

sudo tc qdisc dev eth0 ルートハンドル 1 を追加します: prio
sudo tc qdisc add dev eth0 parent 1:3 handle 30: netem 損失 13% 遅延 40ms
sudo tc フィルターを追加 dev eth0 プロトコル ip 親 1:0 u32 一致 ip dst 199.91.72.192 一致 ip dport 36000 0xffff フロー ID 1:3

上記のコマンドでは、199.91.72.192:36000 に送信されるネットワーク パケットに対して 13% のパケット損失と 40 ミリ秒の遅延を生成するように tc に指示していますが、他の宛先アドレスに送信されるネットワーク パケットには影響はありません。

ルールの削除

パケット損失と遅延をシミュレートした後、ルールを削除することを忘れないでください。

sudo tc qdisc del dev eth0 ルート

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Linux でデュアル ネットワーク カードを設定する方法
  • Linux ネットワーク プログラミング: UDP に基づく信頼性の高いファイル転送の例
  • Linuxでnetstatを使用してネットワークステータスとポートステータスを表示する
  • Linux コマンド学習: 10 個のネットワーク コマンドと監視コマンド
  • Linux ネットワークの状態を確認する 2 つのスクリプト
  • Linux でネットワーク トラフィックを監視するためのスクリプト
  • Linuxの基本的なネットワーク設定方法の紹介
  • Linuxはサーバーがネットワークに接続されているかどうかを検出します
  • Linux の一般的なネットワーク コマンド
  • Linuxのネットワーク監視技術の1つ

<<:  React Hook の使用例 (一般的なフック 6 つ)

>>:  MySQL がユーザー名とパスワードの漏洩を引き起こす可能性のある Riddle の脆弱性を公開

推薦する

MySQL初心者のための基本操作のまとめ

図書館運営クエリ1.SHOW DATABASE; ----すべてのデータベースを照会する2. SHO...

Linux ユーザー状態とカーネル状態間の通信方法の詳細な説明

CPU 権限の制限により、Linux ユーザー状態とカーネル状態間の通信は、プロセス間通信を使用した...

CSS3 で六角形の境界線を実装するサンプルコード

一番外側の boxF は 120 度回転し、2 番目の boxS は -60 度回転し、3 番目の ...

MySQL の基本ステートメントを最適化するための 10 の原則の概要

序文データベースの応用において、プログラマーは継続的な実践を通じて多くの経験を積んできました。これら...

uniapp エントリーレベル nvue クライミングピット記録の分析

目次序文こんにちは世界画像 境界線の半径を設定する実ピクセルを設定する外部CSSをインポートttfフ...

impress.js プレゼンテーション層フレームワーク (デモツール) - 初めての体験

半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...

MySQL の列から行への変換と年月グループ化の例

以下のように表示されます。 SELECT count(DISTINCT(a.rect_id)) zc...

Dockerデータのバックアップとリカバリプロセスの詳細な説明

データのバックアップ操作は非常に簡単です。次のコマンドを実行します。 docker run --vo...

Node.jsを使用してホットリロードページを実装する方法の詳細な説明

序文少し前に、browser-sync+gulp+gulp-nodemon を組み合わせて、本番環境...

docker ログが取得できない問題の解決方法

毎日サービスをチェックしているときに、portainer からコンテナ ログを確認しようとしたところ...

Alibaba Cloud Server Tomcatにアクセスできません

目次1. はじめに2. 解決策2.1 ファイアウォールを設定してポートを開く2.3 ポートを確認し、...

vueプロジェクトは特定の領域に透かしを描くことを実現する

この記事では、Vueを使用して特定の領域に透かしを描く方法を紹介します。具体的な内容は次のとおりです...

ウェブ開発で遭遇した問題と経験

<br />以下は開発中に遭遇した問題と、そこから得た経験です。デバッグに時間がかかりま...

浮遊要素によって引き起こされる問題と解決策の詳細な説明

1. 問題複数のフローティング要素は親要素の幅を拡張できず、親要素の高さが 0 になる可能性がありま...