EC2のネットワークの設定をしている際、疎通確認としてpingをしてもレスポンスが返ってこなかったため原因を調べました。
原因
セキュリティグループのインバウンドルールでICMPの通信を許可していなかったことが原因でした。
pingとは
元々pingを「ネットワークの疎通を確認するもの」として曖昧に理解していました。
pingの仕組みを調べたところ、
指定したIPアドレス宛てにICMPエコー要求メッセージを送信しています。これは「送ったデータをそっくりそのまま送り返してください」という内容です。ICMPエコー要求メッセージを受け取ると、ICMPエコー応答メッセージとして、データをそのまま送り返します。ICMPエコー応答メッセージが返ってくれば、Pingは成功です。
とあります。1
ここで ICMP
という単語が出てきました。
詳細に理解するにはこの部分を知る必要がありそうです。
ICMPとは
まずICMPとは、Internet Control Message Protocolの略で、TCP/IPにおけるインターネット層で利用され、接続しているサーバ間の通信状態を確認するプロトコルです。2
HTTPやSMTPなどがTCP/IPの一番上の層にあたるアプリケーション層であるのに対し、インターネット層というのはそれよりも下の層で、複数のネットワーク間のデータ転送を担っています。
TCP/IPに関してはこちらの説明がとてもわかりやすかったです。
https://www.itmanage.co.jp/column/tcp-ip-protocol/
平たくいうと、ICMPはそのネットワーク間の通信状態を確認するためのプロトコルとなります。
その上でpingというのは、ICMPのプロトコルを利用して通信状態を確認できるソフトウェア、という位置付けになります。
今回の事例では、pingが通らなかったのはICMPの通信を許可していなかったためであり、設定してpingが通ることが確認できました。
結論
pingはICMPを利用してインターネット層における通信状態を確認できるものであり、EC2サーバへpingを通すにはICMPを使った通信を許可する必要があります。