はじめに
前回の記事ではPingを基礎から抑えるために使用しているプロトコルについて調べました。
今回は第二弾、Pingを基礎から理解するために色々調べていきます。
もう一度Pingの定義に立ち返ってみましょう。
Pingコマンドとは
pingは、ネットワーク疎通を確認したいホストに対してIPパケットを発行し、そのパケットが正しく届いて返答が行われるかを確認するためのコマンド
引用元
と書かれている。
だいたいわかりますよね、しかし気になったのがパケットと言うワード。
パケットって言われてどんなイメージを持っていますか?
- 小さい単位のネットワークに流すデータ
- スマホで通信するときの「パケット通信」のパケット
とかがイメージできますよね、しかし簡潔に説明することができない、、、
なので今回はパケットに焦点を当てて調べていきます!
パケットとは?
簡潔に説明するために定義をみてみました。
マスタリングTCP/IP 入門をみてみると
パケットは、何にでも使えるオールマイティな用語です
いや、それは困る!!!笑
結構用途が多い単語なんでしょうか、詳しく調べるためにググることに、
ググってみると
コンピューターでの通信で、データを小さく一定のサイズに分割して送ることを「パケット通信」と言い、その分割されたひとつひとつのデータのことを「パケット」と言います
引用元
と書かれていました。なるほど、パケットはデータを細かく切ったものでそれら一つ一つがパケットと言う名前で扱われるのですね。
Pingで送信されるパケットは通信を行うのはIPプロトコルを利用して送信されるので、IPパケットと言います!
IPパケットの中身は?
Pingで送られているパケットがなんなのかは理解することができました。
次に気になるのはIPパケットの中身、どんな内容が書かれているのでしょうか?
みてみましょう!
IPパケットの詳細構造は以下のようになっています。
上部に数字が書かれています、これは1メモリ1ビットです。ですので1行32bitで表現されていることになります。
この中に色々な情報が格納されています。
パッとわかるところで言えば
- 宛先IPアドレス
- 送信元IPアドレス
なんかはわかりやすいですよね、IPパケットにIPアドレスの記述があることでパケットを任意の相手に送信することができます。
Pingに関して言えば、大事なのはプロトコル番号です。
前回の記事でPingを構成しているプロトコルはICMPだと言う話をしましたよね???
それがここでわかります。
IPパケットのプロトコル番号とは、上の階層で利用されているプロトコルがなんなのかを表しています。
| プロトコル番号 | プロトコル |
|:-----------------|------------------:|:------------------:|
| 0 | IP | This |
| 1 | ICMP | column |
| 6 | TCP | will |
| ... | ... | will |
のように番号によって使用しているプロトコルがなんなのかを表しています。
PingコマンドはICMPなので送信されるパケットをキャッチしてプロトコル番号を確認すれば1番になっているはずです。
絶対そう。
実際にパケットの中身を確認してみた
色々IPパケットについて学んだので実際に送信しているパケットの中身をみてみたくなりました。
そこで利用したのがWiresharkというアプリです。
初めて使ったのですが、パケットキャプチャという類のアプリのようでパケットキャッチしてくれるみたいです。
今回はWiresharkを利用してPingコマンドを解析してみます。
ping www.google.co.jp
まずGoogleにPing打ちます。いけー
そうするとWiresharkでパケットをキャッチすることができました。
これがそのときの画像になります。
面白いですねこれ
さて、下にパケット詳細が出てきているのでこのプロトコル番号がしっかり1になっているのかを確認しましょう。
パケット詳細は16進数表記になっているので
数字1つで先ほどの4bitに相当するはずです。
なのでプロトコル番号格納されているのは右から19文字目の1の中であるはずです。
1ということは
0001
なのでまあただの1ですね、ICMPのプロトコル番号は1なので
一致していることを確認しました!スッキリですね!!!
終わりに
では今回調べたことをまとめます。
- IP通信はパケットという小さい単位でデータを区切って送信している
- パケットの構造は色々な情報が格納されていて、対応する場所に対応する情報が入っている
この二つを確認しました。
Pingくらい簡単なコマンドでも色々詳しくみていけば学べることってたくさんあるんですね、、、
曖昧な理解で終わっている部分が多いネットワーク領域なので、しっかりと理解して活躍できるエンジニアになりたいです。
それでは!!!