TC を使用して Linux でネットワーク電流制限をエレガントに実装する
1. Linux でのフロー制御の原理
パケットをキューに入れることで、パケットの送信方法を制御できます。この制御はデータ シェーピングと呼ばれ、データに対して次の操作を実行します。
-
遅延を増やす
- パケットをドロップ
- 並べ替え
- # 重複または破損しています
- 制御レート
構造では、トラフィックを制御するには 3 つの手順が必要です。
qdisc キューを作成します
- Linux はパケットをキューに入れることでトラフィックを制御するため、最初にキューが必要です。
クラス分類の作成
- class は、実際にはトラフィック ポリシーを分類するために使用されます。たとえば、2 つのトラフィック速度制限レベルを 10MBps と 20MBps に分けることができます。
フィルタの作成 filter
- クラス分類は作成されましたが、IP やポートがクラスにバインドされていないため、現時点では制御効果はありません。また、フロー制御クラスがリソース上で有効になるように、指定された IP とポートをクラスにバインドするフィルターを作成する必要もあります。
2. 指定した IP とポートのこのマシンへのアクセス速度を制限します
2.1 ネットワークカードを確認する
リーリー 2.2 構成
qdisc-class-filter
qdisc ルートキューを作成します
- rree すべての帯域幅リソースをバインドする第 1 レベルのクラスを作成します。
- ここでの単位は
- 6 MBps、つまり 48 Mbps
リーリー
サブカテゴリクラスの作成
- 複数のサブカテゴリを作成して、リソース トラフィックの詳細な管理を行うことができます。
- リーリー ここで ceil は上限を設定します。通常の状況では、速度制限は 6MBps ですが、ネットワークがアイドル状態の場合は 10MBps に達する可能性があります。
フィルターフィルターを作成し、IP
を制限します
rree- ここでは、
- 1.2.3.4 の帯域幅は 1:10
1.2.0.0/16 に直接追加することもできます。
2.3 查看并清理配置
- 查看 class 配置
tc class show dev eth0 class htb 1:10 parent 1:1 leaf 10: prio 0 rate 48Mbit ceil 80Mbit burst 15Kb cburst 1600b class htb 1:1 root rate 48Mbit ceil 48Mbit burst 15Kb cburst 1590b
- 查看 filter 配置
tc filter show dev eth0 filter parent 1: protocol ip pref 1 u32 chain 0 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800: ht divisor 1 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 f lowid 1:10 not_in_hw match 01020303/ffffffff at 16
- 清理全部配置
tc qdisc del dev eth0 root
3. 限制本机对指定 IP、Port 的访问速度
由于排队规则主要是基于出口方向,不能对入口方向的流量(Ingress)进行限制。因此,我们需要将流量重定向到 ifb 设备上,再对 ifb 的出口流量(Egress)进行限制,以最终达到控制的目的。
3.1 启用虚拟网卡
- 将在 ifb 设备
modprobe ifb numifbs=1
- 启用 ifb0 虚拟设备
ip link set dev ifb0 up
3.2 配置 qdisc-class-filter
- 添加 qdisc
tc qdisc add dev eth0 handle ffff: ingress
- 重定向网卡流量到 ifb0
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress re direct dev ifb0
- 添加 class 和 filter
tc qdisc add dev ifb0 root handle 1: htb default 10 tc class add dev ifb0 parent 1:0 classid 1:1 htb rate 6Mbps tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 6Mbps tc filter add dev ifb0 parent 1:0 protocol ip prio 16 u32 match ip dst 1.2.3.4 flowid 1: 10
3.3 查看并清理配置
- 下面是限速本机对指定 IP 访问的监控图

进入的流量被限制在 6 MBps 以下,而出去的流量不被限制。
- 查看 class 配置
tc class show dev ifb0 class htb 1:10 parent 1:1 prio 0 rate 48Mbit ceil 48Mbit burst 1590b cburst 1590b class htb 1:1 root rate 48Mbit ceil 48Mbit burst 1590b cburst 1590b
- 查看 filter 配置
tc filter show dev ifb0 filter parent 1: protocol ip pref 16 u32 chain 0 filter parent 1: protocol ip pref 16 u32 chain 0 fh 800: ht divisor 1 filter parent 1: protocol ip pref 16 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10 not_in_hw match 01020304/ffffffff at 16
- 清理全部配置
tc qdisc del dev eth0 ingress tc qdisc del dev ifb0 root modprobe -r ifb
以上がTC を使用して Linux でネットワーク電流制限をエレガントに実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

サーバーには、要求されたリソースにアクセスする許可がなく、NGINX 403エラーが発生します。ソリューションには以下が含まれます。ファイル許可を確認します。 .htaccess構成を確認してください。 nginx構成を確認してください。 SELINUXアクセス許可を構成します。ファイアウォールルールを確認してください。ブラウザの問題、サーバーの障害、その他の可能なエラーなど、他の原因をトラブルシューティングします。

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Centosは、上流の分布であるRhel 8が閉鎖されたため、2024年に閉鎖されます。このシャットダウンはCentos 8システムに影響を与え、更新を継続し続けることができません。ユーザーは移行を計画する必要があり、提案されたオプションには、Centos Stream、Almalinux、およびRocky Linuxが含まれ、システムを安全で安定させます。

Centosのインストール手順:ISO画像をダウンロードし、起動可能なメディアを燃やします。起動してインストールソースを選択します。言語とキーボードのレイアウトを選択します。ネットワークを構成します。ハードディスクをパーティション化します。システムクロックを設定します。ルートユーザーを作成します。ソフトウェアパッケージを選択します。インストールを開始します。インストールが完了した後、ハードディスクから再起動して起動します。

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。
