Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux でネットワークのサービス品質 (Quality of Service, QoS) ポリシーが有効かどうかを確認する方法を学びます。強力な tc コマンドを使用して、ネットワークインターフェイスに設定された QoS 規則 (discipline) とクラスを一覧表示し、調査します。

具体的には、まず tc qdisc show を使用してアクティブなキューイング規則 (queueing discipline) を一覧表示し、ネットワークトラフィックの管理におけるそれらの役割を理解します。次に、tc class を使用して QoS クラスを確認する方法を探ります。これらのクラスは、異なるタイプのトラフィックを分類し、優先順位を付けるために使用されます。最後に、/etc/network のネットワーク設定ファイルを調査して、QoS ポリシーが永続的に設定される方法を理解します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicSystemCommandsGroup -.-> linux/help("Command Assistance") linux/BasicSystemCommandsGroup -.-> linux/man("Manual Access") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/RemoteAccessandNetworkingGroup -.-> linux/ifconfig("Network Configuring") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") linux/RemoteAccessandNetworkingGroup -.-> linux/ip("IP Managing") subgraph Lab Skills linux/help -.-> lab-558741{{"Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法"}} linux/man -.-> lab-558741{{"Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法"}} linux/ls -.-> lab-558741{{"Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法"}} linux/cat -.-> lab-558741{{"Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法"}} linux/ifconfig -.-> lab-558741{{"Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法"}} linux/netstat -.-> lab-558741{{"Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法"}} linux/ip -.-> lab-558741{{"Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法"}} end

tc qdisc で QoS 規則を一覧表示する

このステップでは、tc コマンドを使用してサービス品質 (Quality of Service, QoS) 規則 (discipline) を一覧表示する方法を学びます。QoS は、パケット損失、遅延、ジッタを低減するためにネットワークトラフィックを管理する一連の技術です。tc コマンドは、Linux でトラフィック制御を設定するための強力なツールです。

tc qdisc コマンドは、キューイング規則 (queueing discipline) を管理するために使用されます。キューイング規則 (qdisc) は、パケットのスケジューリングを決定する Linux カーネルの一部です。

ネットワークインターフェイスに現在設定されている QoS 規則を一覧表示するには、ターミナルを開き、次のコマンドを入力します。

tc qdisc show

Enter キーを押します。

以下のような出力が表示されるはずです。

qdisc noqueue 0: dev lo root refcnt 2
qdisc fq_codel 0: dev eth0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn

出力を分解して説明しましょう。

  • qdisc: この行がキューイング規則を説明していることを示します。
  • noqueue 0: dev lo: ループバックインターフェイス (lo) の qdisc を示します。noqueue は、ループバックインターフェイス上のトラフィックは通常シェイピングの対象にならないため、キューイングが行われていないことを意味します。
  • fq_codel 0: dev eth0: eth0 ネットワークインターフェイスの qdisc を示します。fq_codel は、公平キューイング (Fair Queueing, FQ) と制御遅延 (Controlled Delay, CoDel) を組み合わせた特定のタイプの qdisc です。
  • root: これがデバイスのルート qdisc であることを示します。
  • 残りのパラメータ (refcnt, limit, flows など) は、fq_codel qdisc に固有のもので、その動作を制御します。

表示される出力は、LabEx 環境のネットワークインターフェイスのデフォルト設定によって異なる場合があります。重要なのは、tc qdisc show がアクティブなキューイング規則を一覧表示することを理解することです。

次に、特定のインターフェイス (例えば eth0) の qdisc を一覧表示してみましょう。

tc qdisc show dev eth0

Enter キーを押します。

このコマンドは、eth0 インターフェイスに設定された qdisc のみを表示します。

tc qdisc show の出力を理解することは、tc を使用してネットワークトラフィックを管理する最初のステップです。

続ける をクリックして次のステップに進みます。

tc class で QoS クラスを確認する

前のステップでは、キューイング規則 (qdisc) について学びました。今度は、tc class コマンドを使用して QoS クラスを調べてみましょう。

qdisc はインターフェイス上の全体的なスケジューリング動作を定義しますが、クラスは特定の qdisc (例えば HTBCBQ) 内で使用され、階層構造を作成し、異なるタイプのトラフィックに異なるルールを適用します。クラスは、qdisc 内のカテゴリまたはサブセクションと考えることができます。

現在設定されている QoS クラスを一覧表示するには、ネットワークインターフェイスと親の qdisc またはクラスを指定する必要があります。eth0 のデフォルトの fq_codel qdisc は、他のいくつかの qdisc と同じようにクラス階層を使用しないため、直接 tc class show dev eth0 を実行すると、最初はクラスが表示されないことがあります。

とにかくこのコマンドを試して、出力を見てみましょう。

tc class show dev eth0

Enter キーを押します。

おそらく出力が表示されないか、クラスが定義されていないことを示す出力が表示されるでしょう。例えば以下のようになります。

これは、fq_codel がクラスレス qdisc であるため予想される結果です。クラスレス qdisc は、トラフィックを異なるグループに分類する必要なく動作します。

ただし、HTB (Hierarchical Token Bucket) や CBQ (Class Based Queueing) のような qdisc が設定されている場合、その qdisc の下に定義されたクラスのリストが表示され、帯域幅制限、優先度などのパラメータが示されます。

たとえば、eth0HTB が設定されている場合、出力は次のようになるかもしれません(これは単なる例であり、現在の環境ではこの出力は表示されません)。

class htb 1:1 root prio 0 rate 100Mbit ceil 100Mbit burst 1600b cburst 1600b
class htb 1:10 parent 1:1 prio 1 rate 50Mbit ceil 80Mbit burst 1600b cburst 1600b
class htb 1:20 parent 1:1 prio 2 rate 20Mbit ceil 30Mbit burst 1600b cburst 1600b

この仮想的な例では:

  • class htb: HTB クラスを示します。
  • 1:1: ルートクラスのハンドルです。
  • 1:10, 1:20: ルートクラス 1:1 の下の子クラスのハンドルです。
  • rate, ceil: クラスの保証帯域幅と最大帯域幅を定義します。
  • prio: クラスの優先度を定義します。

デフォルト設定ではクラスが表示されませんが、tc class show コマンドを理解することは、クラス付き qdisc が設定されたときに作業を行うために重要です。

続ける をクリックして次のステップに進みます。

/etc/network 内の QoS 設定を調べる

前のステップでは、tc コマンドを使用して現在アクティブな QoS 設定を表示しました。tc は実行時の状態を示しますが、設定ファイルはシステム起動時またはネットワークインターフェイスが有効になったときにこれらの設定がどのように適用されるかを決定することが多いです。

Ubuntu のような Debian ベースのシステムでは、ネットワークインターフェイスの設定は、多くの場合 /etc/network/interfaces ファイルと /etc/network/interfaces.d/ ディレクトリ内のファイルで管理されます。これらのファイルには、インターフェイスが設定されたときに実行されるコマンドが含まれている場合があり、それには QoS を設定する tc コマンドも含まれます。

メインのネットワーク設定ファイルを調べてみましょう。ターミナルを開き、cat コマンドを使用して /etc/network/interfaces の内容を表示します。

cat /etc/network/interfaces

Enter キーを押します。

基本的なネットワークインターフェイスの設定が表示されます。この LabEx 環境では、出力は次のようになるかもしれません。

## interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

このファイルは、ループバックインターフェイス (lo) と主なネットワークインターフェイス (eth0) を定義しており、eth0 は DHCP を使用して IP アドレスを取得するように設定されています。

複雑な設定では、QoS 設定は通常 /etc/network/interfaces に直接記述されることはありません。代わりに、インターフェイスが有効になったときに実行される個別のスクリプトまたは設定スニペットに含まれることが多いです。これらのスニペットは /etc/network/if-up.d/ ディレクトリに配置されることがあります。このディレクトリ内のスクリプトは、ネットワークインターフェイスが有効になった後に実行されます。

/etc/network/if-up.d/ ディレクトリ内のファイルを一覧表示して、QoS またはトラフィック制御に関連するスクリプトがあるかどうかを確認しましょう。

ls /etc/network/if-up.d/

Enter キーを押します。

出力には、そのディレクトリ内に存在するファイルが表示されます。ネットワーク設定に関連する様々なスクリプトが表示されるかもしれませんが、この基本的な環境では複雑な QoS 設定に特化したスクリプトはない可能性が高いです。

## Example output (may vary)
avahi-autoipd  ethtool  mountnfs  ntp  openssh-server  resolvconf  upstart

起動時に tc ルールを適用するためのスクリプトがある場合、通常はここに配置されます。たとえば、このディレクトリ内の qos-setup という名前のスクリプトには、qdisc とクラスを設定する tc コマンドが含まれている可能性があります。

この基本的な環境ではこれらの標準的な場所に明示的な QoS 設定が見つからなかったかもしれませんが、どこを調べればよいか (/etc/network/interfaces/etc/network/interfaces.d/、および /etc/network/if-up.d/) を知ることは、Linux システムで QoS が永続的に設定される方法を理解するために重要です。

続ける をクリックしてこの実験を完了します。

まとめ

この実験では、Linux でネットワーク QoS ポリシーがアクティブかどうかを確認する方法を学びました。まず、tc qdisc show コマンドを使用してネットワークインターフェイス上のアクティブなキューイング規則 (qdisc) を一覧表示し、qdisc がパケットのスケジューリングを決定し、QoS 設定の重要な部分であることを理解しました。出力を調べて qdisc のタイプと関連するネットワークインターフェイスを特定し、tc qdisc show dev <interface> を使用して特定のインターフェイスの qdisc を一覧表示する方法も学びました。