これから『ping』の話をしよう…

>この記事では、《&ensp;ping&ensp;》について、
業務を通して学習した内容をまとめています。

- __『ping試験』とは…？__
- __『ping』の使い方__

こういった内容についてまとめています。

__※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。__

##『ping試験』とは…？

![study-1968077_1920.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255884/966e2e57-ee94-a0cc-ced1-ced3f8d68a92.jpeg)


クライアントPCをネットワークに接続し、サーバーと通信できなかった際には、一般的に故障切り分けが行われます。

この故障切り分けの手順としては…

- __PCに設定されたTCP/IP通信ソフトが正常に動作しているか__
- __途中のルーターまでは正常に通信できているか__
- __目的とするサーバーからレスポンスが返ってくるか__

などの試験を順次行っていくのですが、この時に行われる試験が__『ping試験』__です。

『ping試験』では、コマンドプロンプトから…

~~~
ping <通信相手のIPアドレスやホスト名>
~~~

と入力し、『応答があるかどうか』によって、接続が正常かどうかを確認します。

*__※`http://`、`https://`は入力しないよう注意してください。__*

##実際に『ping』を使ってみよう



例えば・・・

メジャーなホストの`www.apple.com`に対して『ping試験』を実行するには、下記のコマンドを打ちます。

~~~
ping www.apple.com
~~~

そして・・・

__正常に通信できていると、下記のような表示が出力されます。__

###正常に通信できている場合

####＜Windowsの場合＞

~~~
C:\Users\ユーザー名>ping www.apple.com
www.apple.com [104.71.136.133]に ping を送信しています 32 バイトのデータ:
104.71.136.133 からの応答: バイト数 =32 時間 =23ms TTL=55
104.71.136.133 からの応答: バイト数 =32 時間 =31ms TTL=55
104.71.136.133 からの応答: バイト数 =32 時間 =26ms TTL=55
104.71.136.133 からの応答: バイト数 =32 時間 =21ms TTL=55
104.71.136.133 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 21ms、最大 = 31ms、平均 = 25ms
~~~

###＜Macの場合＞

__Macはオプションで回数を制限しないと、送信を無限に繰り返す__ので…

- __『Control + C』で止める__
- __オプションで回数を制限する（`-c 10`を付ける）__

などで対応してください。
（下記では、`-c 10`オプションで回数を１０回と指定しています。）

~~~
MacBook-puro:~ ユーザー名$ ping -c 10  www.apple.com
PING www.apple.com (104.71.136.133): 56 data bytes
64 bytes from 104.71.136.133: icmp_seq=0 ttl=55 time=5.661 ms
64 bytes from 104.71.136.133: icmp_seq=1 ttl=55 time=6.589 ms
64 bytes from 104.71.136.133: icmp_seq=2 ttl=55 time=9.536 ms
64 bytes from 104.71.136.133: icmp_seq=3 ttl=55 time=6.663 ms
64 bytes from 104.71.136.133: icmp_seq=4 ttl=55 time=7.040 ms
64 bytes from 104.71.136.133: icmp_seq=5 ttl=55 time=6.796 ms
64 bytes from 104.71.136.133: icmp_seq=6 ttl=55 time=6.890 ms
64 bytes from 104.71.136.133: icmp_seq=7 ttl=55 time=7.406 ms
64 bytes from 104.71.136.133: icmp_seq=8 ttl=55 time=7.194 ms
64 bytes from 104.71.136.133: icmp_seq=9 ttl=55 time=6.125 ms

--- www.apple.com ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 5.661/6.990/9.536/0.976 ms
~~~

###通信が正常でない場合

~~~
C:\Users\ユーザー名>ping www.apple.com
www.apple.com [104.71.136.133]に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
104.71.136.133 の ping 統計:
パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)
~~~

##【おまけ】もう少し詳しく解説

![surfing-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255884/d4d52e00-9dbe-2dbb-bcef-b0e98495fd3a.jpeg)

『ping』は・・・

&ensp;Packet InterNet Groper&ensp;の略称で、『ピン』『ピング』と両方の呼ばれ方があります。

__*※本来『ping』は『ピン』と読みますが、日本では『ピング』と読むのが一般的なようです。*__

インターネットでは、`TCP/IP`というプロトコル（約束事）を使用し、このプロトコルに従って各コンピューターが通信をしているわけですが・・・

それが正常に通信されているかどうかを確認するためのコマンドが『ping』です

『pingコマンド』は、ICMP（※1）の__『エコー要求』__と__『エコー応答』__を使用して、実現されています。

- （※1）IPパケットが宛先まで届かなかった場合、その状況を送信元に通知するために使用されるプロトコル。

___

『エコー要求』とは・・・

__"送ったパケットを改変せず、そのまま返してくれ"__

という要求で、『エコー要求』に対して『エコー応答』が返ってくれば…

__"正常に通信できている"__

と判断できるわけです。

反対に、応答が返ってこない場合は・・・

`要求がタイムアウトしました`

という結果をコマンドプロンプトに表示してくれるので…

__"正常に通信できていない"__

と判断できるわけです。