目標:LinuxでFPSゲームを実行する場合、ネットワークトラフィックの優先度の高い設定を自動化します。
このようなタスクは通常、iptables(特定の基準を満たすIPパケットをマークするため)とtc(それらのIPパケットに優先順位を付けるため)の組み合わせで実行されることを私は知っています。
問題:
私は次のようなラッパーシェルスクリプトを目指しています。
これは可能ですか?役立つものがあれば、カスタムnetfilterモジュールを扱うところまで進んでいきます。
クライアントのQoSを台無しにしたくないと思います。ルーターでは多分ですが、クライアントマシンでは、余分なパケット処理を導入しているだけで、実際には速度が低下します。ルーターでは、これらのパケットを他のパケットよりも優先しているため(他のhttp接続やルーターを通過する他のトラフィックなど)、それは成功ですが、クライアントでは、パケットを直接渡すのではなく、追加のフィルタリングを行っています。プロセスに。
ただし、Nice
を使用してクライアントプロセスの優先度を調整すると、同じマシンで実行されているバックグラウンドのものよりもCPUへのアクセスが高速になります。
再送信を最小限に抑えるために、ネットワークの受信/送信バッファサイズを調整することをお勧めします。
コンピューターによって生成される実際の帯域幅を制御しようとしている場合は、FPSトラフィックが正確にどの程度で、どれだけ近いかについて、より多くのデータが必要になります。優先順位を下げたいのは「他の」トラフィックです。 FPSがUDPを使用し、他のトラフィックがすべてTCPである場合は、「TCPよりもUDPを優先する」という単純な方法で回避できる可能性があります。または、より複雑な場合もあります。ただし、トラフィックの各セットを特徴付ける方法がわかったら、 otheranswers for details を確認する必要があります。
Iptablesだけでは不可能ですが、TCでは可能です。デフォルトのiptablesはFIFO "先入れ先出し"ですが、TCを使用すると、ポート、プロトコル、ipsに優先順位を付けることができます。
Iptables netfilterを使用すると、ipt_ownerモジュールを引き続き使用できます。
-m owner –uid-owner replace_with_user
owner
This module attempts to match various characteristics of the packet
creator, for locally generated packets. This match is only valid in the
OUTPUT and POSTROUTING chains. Forwarded packets do not have any socket
associated with them. Packets from kernel threads do have a socket, but
usually no owner.
[!] --uid-owner username
[!] --uid-owner userid[-userid]
Matches if the packet socket's file structure (if it has one) is
owned by the given user. You may also specify a numerical UID,
or an UID range.
[!] --gid-owner groupname
[!] --gid-owner groupid[-groupid]
Matches if the packet socket's file structure is owned by the
given group. You may also specify a numerical GID, or a GID
range.
[!] --socket-exists
Matches if the packet is associated with a socket.
[!] -m or --match / -p or --protocol
iptables can use extended packet matching modules. These are loaded
in two ways: implicitly, when -p or --protocol is specified, or with
the -m or --match options, followed by the matching module name;
after these, various extra command line options become available,
depending on the specific module.
パケットがネットワーク内のいずれかのコンピューターから送信されている場合は機能しませんが、アプリケーションがファイアウォールサーバー内で実行されている場合は機能します。それ以外の場合は、MACを照合することをお勧めします。