QoS概要とSNMP概要と設定


CCNAの試験に向けて学習中。
復習に見返せるようにメモしていきます。
ほぼ自分の勉強メモです。
過度な期待はしないでください。

1. QoS概要

1-1. QoSとは?

QoS(Quality of Service)とは、ネットワーク上で提供するサービス品質を保つ為の技術です。
ネットワーク機器に QoSを実装する事で、ある特定の通信を優先して伝送させたり、
帯域幅を確保する
事が出来ます。

何も対策をしていないネットワークでは、先に到達した通信を先に出すという動作をする為、
例えば、IP電話による通話やビデオ会議などのデータは、パケットの遅延や到着のばらつきが、
生じやすくなります。その為、通話などに支障を来す恐れがあります。
こうした際に、QoSを設定を行う事で、遅延やばらつき、損失に敏感な音声データを優先的に転送
する事
が出来ます。


1-2. QoSのアーキテクチャ

QoSを実現する為のアーキテクチャとして、
● ベストエフォート
● IntServ(Integrated Services)
● DiffServ(Differentiated Services)
の3つがあります。

■ ベストエフォート

ベストエフォートは、パケットのやサイズに関係なく、先着順にパケットを送出していくという
処理を行います。よって、何も設定がなければQoSのデフォルトの動作として、全トラフィックで
処理される。

■ IntServ(Integrated Services)

IntServは、RSVP(リソース予約プロトコル)というプロトコルを使用して、
アプリケーションの通信フロー事に帯域を予約する方式。アプリの通信フローは膨大であることから、
それを各ネットワーク機器で保持する必要があり機器の負荷が高くなるので大規模ネットワークでは
適していない。一般的に使用されていない。

■ DiffServ(Differentiated Services)

DiffServは、各ルータやスイッチ事に、パケットの優先順位に基づいて区別して転送処理を
行うアーキテクチャです。
広く採用されているQoS方式であり、一般的にQoSといえばDiffServモデルの事を指します。


1-3. QoS(DiffServモデル)の仕組み

DiffServモデルでは、
「 ①分類 ②マーキング ③キューイング ④スケジューリング 」
の順番で処理されます。

①分類

DiffServモデルは、パケットの優先順位に基づいて区別して転送処理を行う為、
先ずは、パケットの分類が必要になります。
分類では、届いたパケットの種類などを調べてクラスと呼ばれるカテゴリに分けます。
IPアドレス、TCP/UDPポート番号、CoS / DSCP / IP Precendence値などの情報を基に
優先度の高いクラスなのか、低いクラスなのかを分類します。

②マーキング

マーキングでは、分類によりクラス分けされたパケットに優先度を付けます。
ここで分類とマーキングでは CoSと DSCPが使用されています。

▶︎ CoS
CoS(Class of Service)とは、イーサネットフレームの優先度を表すものです。
通常のイーサネットフレームには、送信元MACアドレスや宛先MACアドレス、タイプフィールド
しかない為、優先度を表す事が出来ません。
しかし802.1Qで付与される4バイトのタグの中には、VLAN IDを示すフィールド以外に
PRI(PCP)というCoS値を表す事が出来るフィールドがあります。
3ビットのフィールドで 0 ~ 7 の8段階の優先度を定義することができます。
値が大きい程優先度が高くなっていきます。
音声は 5、ビデオ会議は 4、普通のデータは 0 ~ 2と分類する事を推奨されています。

▶︎ DSCP
DSCP(Differentiated Services Code Point)とは、IPパケットの優先度を表すものです。
これらの値はIPv4ヘッダの中のToS(Type of Service)フィールドで定義されます。
ToSフィールドでは8ビットあるのですが、そのうちの先頭6ビットを使用して 0~63の64段階
優先度を表します。

また、DSCP以外に同様にIPパケットの優先度を表すものとして IP Precedence(IPプレジデンス)
いうものがあります。ToSフィールドでは、8ビットあるうちの先頭3ビットだけを使用して、
0~7の8段階
で優先度を表します。

DSCPの値に応じて各ルータやスイッチは転送処理を行います。こうしたホップ事の
動作を決めた PHB(Per Hop Behavior)に応じてトラフィックは処理されます。
PHBごとのDSCP値は以下を参照。

PHBの各項目           説明   
Default(デフォルト PHB) 6ビット全て0で、ベストエフォートの転送処理を行う
CS(クラスセレクタ PHB) 6ビットの内、下位3ビットが 0のもの / IP Precedenceとの下位互換性用
AF(Assured Forwarding) 6ビットの内、上位3ビットが 1 ~4のもの
EF(Expedited Forwarding) 最優先のパケットで、ビットとしては 101110となり、音声トラフィックに通常割り当てる
③キューイング

キューイングでは、送信するパケットをキューと呼ばれる領域に並べていきます。
キューとは、パケットの格納場所の事であり、通常1つのインターフェースに複数のキューがあります。

キューには、ソフトウェアキューとハードウェアキューがあり、
キューイングではソフトウェアキューにパケットを格納していきます。ソフトウェアキューには
優先度によって複数のキューがあり、マーキングによって設定された優先度によって、
どのソフトウェアキューに格納されるかが変わります。

④スケジューリング

スケジューリングでは、ソフトウェアキューに格納したパケットをどういう割合や順番で
ハードウェアキューに格納するか
を決定します。
つまり、複数あるキューのうち、どのキューにあるパケットから送出していくのかを決めていく事です。

■ キューイング及びスケジューリング方式

▶︎ FIFO(First In First Out))
着信してきた順番でパケットを送出していく方式。デフォルトのキューイング方式はこれになります。

▶︎ PQ(Priority Queuing)
優先度が高いキューを4つ用意してキューイングする方式です。
優先度が高い方から、High、Medium、Normal、Lowです。
これらのキューに振り分けれ、優先度の高いキューからハードウェアに送られ、インターフェイスから
送信されます。優先度の高いキューなくなるまで、優先度の低いキューは送信されません。

▶︎ WFQ(Weighted Fair Queuing)
アプリケーションの通信フローごとにキューを自動的に作成し、どのキューからのパケットでも
転送されるようにしたキューイング方式です。
ただ全てのキューが平等ではなく、キューの優先度に応じてパケットを送出ていく方式。

▶︎ CB-WFQ(Class Based WFQ)
ユーザーが定義したクラスごとにキューを割り当てる方式です。
ユーザーが定義したクラスごとに帯域幅を割り当て、最低帯域幅の指定によって送信される
パケットの比率を変えられます。

◇ LLQ(Low Latency Queuing)
CB-WFQにPQ(Priority Queuing)を追加した方式です。
PQのパケットは優先的に送信されますが、そのキューだけが優先的に送信されるだけでなく
帯域幅の制限をかける事で他のキューにも順番が回るようにしています。


■ 信頼境界

DSCPとCoSの値を信頼する部分と信頼しない部分の境界を信頼境界といいます。
デフォルトのスイッチの設定では、全てのポートが信頼されず、受信したパケットの優先度は
0に設定されています。一般的に信頼境界は、送信元に近い所に設定します。

それぞれの機器で分類からマーキングを行うと、負荷が掛かる事から、DSCPとCoSの値だけを
信頼する事でその負荷を減らすようにしています。

■ ポリシングやシェーピング

▶︎ ポリシング
定義した通信速度を超過した場合、それ以上のパケットを破棄したり、優先度を変えたりします。
特定の通信が回線を占有してしまう事を防ぎますが、超過した分は破棄されてしまう為、
TCPの通信は再送や通信量の抑制などが行われてしまいます。
ポリシングは、パケットが着信した際や発信した際に適用出来ます。

▶︎ シェーピング
定義した通信速度を超過した場合、それ以上のパケットはバッファに格納しておいて
通信速度の超過が落ち着いてきてからトラフィックを送信していく方式です。
シェーピングは、パケットが発信した際に適用出来ます。

■ 輻輳(ふくそう)の管理

輻輳とは、同時に大量の通信が届くなどの状況でネットワーク機器の処理が追いつかなくなり、
送受信が出来なくなる状況です。

大量に通信が届いた場合、送信されるパケットよりも、受信されるパケットが多くなってしまい、
キューにパケット溜まってしまった場合、優先順位に関係なくパケットが破棄されてしまいます。
これを、テールドロップといいます。

テールドロップにより発生するこうした現象を回避する為に、輻輳を管理する必要があります。
管理する仕組みとして、RED※1やWRED※2があります。

※1 RED(ランダム早期検出
キューが一杯になる前に、少しずつパケットを破棄していく方式です。
只、ランダムに破棄していくので、優先度の高いパケットも破棄される可能性があります。
※2 WRED(重み付けランダム早期検出
キューが一杯になる前に、少しずつパケットを破棄していく事はREDと同様ですが、
パケットの優先順位考慮して破棄します。

2. SNMP概要

2-1. SNMPとは?

SNMP(Simple Network Management Protocol)とは、TCP/IPネットワーク機器の状況を監視し、
様々な情報を収集する為のプロトコルです。つまり、ネットワーク機器の情報をサーバで一元収集し、
そのサーバにアクセスする事で一括で確認出来るようにするものです。

具体的に言うと、後述するSNMPマネージャとSNMPエージェントとの間で情報を伝達する為の
プロトコルがSNMPとなります。

SNMPを利用する事により、導入したネットワーク機器を監視する事が出来るので、
ネットワークに障害が発生した場合にどの機器に障害が発生したのかをすぐに突き止められるなど、
迅速な障害復旧に役立ちます。

SNMPは、UDPを使用して通信を行います。

2-2. SNMPの構成要素

SNMPの構成要素は、管理する側のネットワーク管理ステーションと管理対象となる
ネットワーク要素から成り立ちます。
ネットワーク管理ステーションでは SNMPマネージャ※3
ネットワーク要素では SNMPエージェント※4というプログラムが動作します。

※3 SNMPマネージャとは、SNMPエージェントを監視しネットワーク機器の情報を収集する
サーバの役割を担います。また、UDP(ポート161)を使用して通信を行います。
※4 SNMPエージェントとは、ネットワーク機器の情報をSNMPマネージャに送信します。
また、UDP(ポート162)を使用して通信を行います。

2-3. MIB(ミブ)

MIB(Management Information Base)とは、SNMPエージェントが持っている
機器情報の集合体の事です。
SNMPマネージャとSNMPエージェントは、このMIBをやりとりすることで、
SNMPエージェントのCPU使用率、インターフェースの使用状況等を確認しています。
MIBにより分類された情報は下記のようなツリー構造で管理されます。

MIBに格納されている情報をオブジェクトといい、それぞれOID(オブジェクトID)という
オブジェクトを識別する為の識別子が付けられます。
例えば、ciscoの情報は 「iso(1)、org(3)、dod(6)、internet(1)、private(4)、enterprises(1)、
cisco(9)」
を順番に並べたものOIDになります。

このMIBには、標準MIB※5拡張MIB※6があります。

※5 標準MIBは、RFCで規定されているMIBです。機器の種類の問わず対応している一般的な
システムの情報が規定されています。例えば、ホスト名やインターフェイス情報など
※6 拡張MIBは、ベンダーが独自に規定した固有のMIBです。
例えば、Ciscoが自社の機器を管理する為に規定したMIBは、この拡張MIBにあたります。

2-4. SNMPで使用するメッセージ

SNMPマネージャとSNMPエージェントがやりとりするメッセージは大きく5つがあります。

その他にも、SNMPv2からSNMPマネージャから送信する、SNMPエージェントに対して
複数のOIDをまとめて要求する「Get Bulk Request」という要求がある。

2-5. SNMPの通信

▶︎ SNMPポーリング
SNMPマネージャから要求を出して、SNMPエージェントの情報を受け取る方式をいいます。

SNMPマネージャから「Get Request」「GetNext Request」「Set Request」などの要求が
送信され、それに対してSNMPエージェントが「Get Response」で応答を返します。

▶︎ SNMPトラップ
SNMPエージェントからSNMPマネージャに通知を行う事をいいます。
SNMPトラップでは、何か問題が発生した時や指定した基準値を超えた時にSNMPマネージャに
通知する事が可能です。

「TRAP」が、SNMPトラップに該当する

▶︎ SNMPインフォーム
SNMPインフォームは、SNMPトラップ同様に、SNMPエージェントからSNMPマネージャに
通知を行うものです。SNMPトラップと異なる事は、SNMPマネージャからの応答が必要な事です。
SNMPインフォームは、SNMPマネージャの要求に対して確認応答を返す為、
SNMPマネージャへ確実に情報を送信する事が可能です。

SNMPインフォームを受け取ったSNMPマネージャはさらに確認応答を返します。
返ってこなかった場合、SNMPエージェントは再度SNMPインフォームを送信します。

2-6.SNMPのバージョン

SNMPには「SNMPv1、SNMPv2c、SNMPv3」という3つバージョンがあります。

■ 2-6-1.SNMPv1

SNMPコミュニティ名を使用して認証を行います。
しかし、コミュニティ名や内容が暗号化されず、ネットワーク上に流れる為、
盗聴の危険性があります。また、SNMPトラップにしか対応しておらず、
SNMPインフォームは対応していない。

SNMPコミュニティーは、SNMPマネージャが情報を読み書き出来るSNMPエージェントの集合を
表します。
コミニュティ名は、SNMPエージェント側とSNMPマネージャ側で合わせておく必要があります。
同一のSNMPコミュニティーに所属するSNMPエージェントの情報は、SNMPマネージャから読み書き
出来る為、SNMPv1およびSNMPv2cでは、認証情報として使用されます。

■ 2-6-2.SNMPv2c

SNMPコミュニティ名を使用して認証を行います。また、SNMPv1と同様に暗号化されていない為、
不正アクセスが発生する場合があります。しかし、SNMPv2cではSNMPv1では対応していなかった
「Get Bulk Request」「SNMPインフォーム」が対応しています。

■ 2-6-3.SNMPv3

コミュニティ名を使用して認証する変わりに、ユーザ名によるの暗号化されたパスワード認証
導入されました。そして、今まではデータがそのまま回線を流れていましたが、SNMPv3では、
データを暗号化出来るようになりました。
「Get Bulk Request」「SNMPインフォーム」にも対応しています。

また、v3には3つのセキュリティレベルがあります。


2-7. SNMPの設定

■ 2-7-1. SNMPビューの設定

SNMPエージェント側でSNMPビューを設定する事で特定のMIBだけの情報を、
SNMPマネージャに取得させたり、させないといった事が出来るようになります。
つまり、SNMPビューを使用する事で、特定のMIB情報だけを取得させる事が出来ます。

SNMPビューを設定するには、グローバルコンフィギュレーションモード
次のsnmp-server view コマンドを実行します。

(config)# snmp-server view < ビュー名 > < OID > < include | exclude >

<ビュー名>には、作成したいビュー名の名前を指定します。
<OID>には、取得を許可もしくは拒否するオブジェクトのOIDを指定します。
<include | exclude>には、取得させたい場合は include、拒否する場合は excludeを指定します。

■ 2-7-2.コミュニティ名の設定

「SNMPv1、SNMPv2c」では、コミニュティ名を使用して認証を行います。

コミュニティ名を設定するには、グローバルコンフィギュレーションモード
次のsnmp-server community コマンドを実行します。

(config)# snmp-server community < コミニュティ名 > [ view <ビュー名>  ]  [ ro | rw ] [ <ACL> ]

<コミニュティ名>には、SNMPエージェント側とSNMPマネージャ側で合わせておく必要があります。
[ view <ビュー名> ]には、SNMPビューを使用して取得できる情報を制限する場合に使用します。
[ ro ]には、SNMPマネージャの読み取りを許可します。
[ rw ]には、SNMPマネージャの読み書きを許可します。
<ACL>には、ACLで許可されたSNMPマネージャだけがアクセスできるようにACL番号を指定します。

■ 2-7-3.通知機能の設定

▶︎ 通知の送信先を設定
SNMPトラップやSNMPインフォームといったSNMPの通知機能を設定するには、
まずSNMPエージェント側で、通知の送信先であるSNMPマネージャを指定します。

通知の送信先のSNMPマネージャを指定するには、グローバルコンフィギュレーションモード
次のsnmp-server host コマンドを実行します。

(config)# snmp-server host < IPアドレス > [ traps | informs ]  
      [ version < 1 | 2c | 3 <auth | noauth | priv> > ]  < コミニュティ名 | ユーザー名 >

<IPアドレス>には、通知の送信先のIPアドレスを指定します。
[ traps | informs ]は、通知する方式を選択、SNMPv1の場合は trapsのみ指定可能になります。
[ version ]には、1、2c、3 のいずれかを指定。v3 の場合は auth、noauth、priv を選択します。
<コミニュティ名 | ユーザー名>では、v1とv2では認証のコミニュティ名を指定して、
v3では認証のユーザー名を指定します。

▶︎ トラップの有効化
SNMPトラップやSNMPインフォームを有効化するには、グローバルコンフィギュレーションモード
次のsnmp-server enable traps コマンドを実行します。

(config)# snmp-server enable traps [< 通知タイプ >]

<通知タイプ>は、特定のタイプだけ通知したい場合はキーワードを指定します。
省略すると、全てのタイプのトラップが有効となります。

■ 2-7-4.SNMPv3の設定

SNMPv3では、ユーザー名やパスワードにより認証します。
SNMPユーザーはSNMPグループに参加して、グループ単位でSNMPビューの指定や
セキュリティレベルの設定を行います。設定は、グループ、ユーザーの順に行います。

▶︎ SNMPグループの作成
SNMPグループの作成するには、グローバルコンフィギュレーションモード
次のsnmp-server group コマンドを実行します。

(config)# snmp-server group < グループ名 > v3 < noauth | auth | priv > [ read <ビュー名> ]
      [ write <ビュー名> ] [ access <ACL> ]

<グループ名>には、作成したいグループ名を指定します。
< noauth | auth | priv >は、いずれかのセキュリティレベルを指定します。詳しい内容は下記の表参照。
noauthは noAuthNoPriv、authは authNoPriv、privは authPriv
[ read <ビュー名> ]は、読み込みを許可するビューを指定します。
[ write <ビュー名> ]は、書き込みを許可するビューを指定します。
<ACL>には、ACLで許可されたSNMPマネージャだけがアクセスできるようにACL番号を指定します。

▶︎ SNMPユーザーの作成
SNMPユーザーは、SNMPグループと関連づける必要があります。ユーザーはグループの
セキュリティレベルを引き継ぎます。

SNMPユーザーを作成するには、グローバルコンフィギュレーションモード
次のsnmp-server user コマンドを実行します。

(config)# snmp-server user <ユーザー名> <グループ名> v3 [auth <md5 | sha> <authのパスワード>]
          [ priv < des | 3des | aes< 128 | 192 | 256> > <privのパスワード>]

<ユーザー名>は、作成するユーザー名を指定します。
<グループ名>は、ユーザーが所属するグループを指定します。
<md5 | sha>による認証を行う場合、authで認証方法とパスワードを指定します。
<priv [ des | 3des | aes ]>で privで暗号化を行うには、暗号化方式とパスワードを指定します。
暗号化レベルには「DES」「3DES」「AES128」「AES192」「AES256」で指定可能。

2-8. SNMPの確認

■ 2-8-1.SNMPビューの確認

SNMPビューを確認するには、特権EXECモードで次のshow snmp view コマンドを実行します。

# show snmp view

show snmp view 実行画面です

  項番   説明                                    
(1) SNMPビュー名を表示します。
(2) OIDツリーをSNMPビューに含めるか除外するかを表示します。
(3) OIDツリーの頂点のオブジェクト識別子を表示します。


■ 2-8-2.SNMPグループの確認

SNMPグループを確認するには、特権EXECモードで次のshow snmp group コマンドを実行します。

# show snmp group

show snmp view 実行画面です

  項番   説明                                    
(1) SNMPビュー名を表示します
(2) セキュリティーモデルを表示します ※1
(3) グループのユーザーに読み取りを許可するSNMPビュー(read-view)を表示します
(4) グループのユーザーに書き込みを許可するSNMPビュー(write-view)を表示します
(5) グループのユーザーにSNMPトラップの送信を許可するSNMPビュー(notify-view)を表示します
(6) グループと関連付ける標準IPアクセスリストを表示します

※1
v1:SNMPv1、 v2c:SNMPv2c、 v3/noauth:SNMPv3(認証なし、暗号化なし)
v3/auth:SNMPv3(認証あり、暗号化なし)、 v3/priv:SNMPv3(認証あり、暗号化あり)


■ 2-8-3.SNMPユーザーの確認

SNMPユーザーを確認するには、特権EXECモードで次のshow snmp user コマンドを実行します。

# show snmp user