Ciscoの拡張Pingは最近ではあまり出番はなくなっていた。
昔は良く使用していたんだけどなぁ。
そんな拡張Pingだが、ふとToS値を変更できることに気づいた。
Router#ping
Protocol [ip]:
Target IP address: 192.168.1.254
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface:
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]:
前々からあったのだろうが、送信元と回数指定くらいしか使用していなかったので、
そのあたりはEnterを連打してサラッと流してしまっていたわ。
ToS値が変更できるということはIP PrecedenceやDSCP値を変更して
Pingを打つことができるということだ。
前にポート番号指定のTelnetやASAでのTCP番号指定Pingについて触れたが、
これらのTCP穴空き確認に加えて、IP PrecedenceやDSCP値の確認もできるということだ。
色々と検証もやりやすくなりそうだということで、早速メモしておく。
拡張PingでToS値を変更する
IPヘッダの中にはType of Service(ToS)と呼ばれる1byteのフィールドがある。
主に優先制御などで使用されるフィールドであるが、
この1byte(8bit)の前から3bitをIP Precedence、前から6bitをDSCPと呼ぶ。
IP PrecedenceはDSCPの6bit中の前半3bitにあたる。
まとめるとこんな感じ。
IP Precedenceの後ろに000を付けてあげればDSCP値になるので、
今回は主にDSCP値を付与する場合について触れていく。
ちなみにこのToS値の入力方法だが、2進数8bitを10進数で入力しないといけない。
なので、付与したいDSCP値(6bit)を8bitに変換してあげなければならないのだが、
幸いDSCP値の後ろに00を付けてあげればToS値に変換することができる。
2進数で後ろに0を2つ付けるということは、要するに10進数で4倍すれば良い。
なので、DSCP値1であれば、ToS値は1×4=4。
DSCP値46であれば、ToS値は46×4=184となる。
とりあえず通常のPingではDSCP値は0のままであることを確認するため、
Wiresharkでパケットキャプチャしてみた。
結果は以下になるが、やはり0だった。
では実際にやってみる。
とりあえずDSCP1で試したいので、×4してToS値4を入力
Type of service [0]: 4キャプチャの結果。
確かに「1」になっている。
では次に最優先のDSCP値である46を付与してみる。
×4すると184なので、この値を入力する。
Type of service [0]: 184キャプチャの結果。
おぉ!確かに「46」だ。
最後に適当に29でも付与してみる。
×4すると116になるので、この値を入力する。
Type of service [0]: 116キャプチャの結果。
うむ!想定通りだ!
これでDSCPの確認もできることになった。
始めはpolicy-mapでマーキングすりゃいいだろと考えてもいたが、
軽く確認するくらいなら拡張Pingの方がお手軽で全然楽だ。
まぁあくまでPingなので、アプリケーションの中身を見ているような機器では
ICMPにDSCP値が付けられていることがバレバレなので使えないかもしれないが、
ルータを通過させるだけなのであれば拡張Pingで十分かなと。
以上。
日経ITエンジニアスクール
ネットワークプロトコル最強の指南書
この記事へのコメント