ICMPはネットワーク層のプロトコルなのか?

ネットワークを勉強しているとOSI参照モデルをよく目にするのだけど、これは各プロトコルを階層にわけて整理したものです。それで、IPはネットワーク層、TCPおよびUDPはトランスポート層のプロトコルとして分類されています。TCPとUDPはIPの上位プロトコルということ。

ICMPはIPと同じネットワーク層のプロトコルとして位置づけられているのだけど、ICMPはIPのデータ部に以下のフォーマットで格納されています。

TCPもUDPもIPのデータ部に格納されるわけだけど、そうするとICMPもTCPやUDPと同じようにトランスポート層のプロトコルとして扱うべきでは?という気がしてならない。

これをどう理解すれば良いかだけど、、、考えてみました。

ICMPのフォーマットにある「タイプ」、「コード」、「チェックサム」はICMPヘッダっぽく見えるのだけれども実際はそうではなくて、「タイプ、コード、チェックサム、データ」のまるまる(そのもの)がIPのデータ部となっていると考えるべきなのだろう。つまり、ICMPヘッダというのは存在しないということ。タイプ、コード、チェックサム、データをまとめてICMPメッセージと呼ばれているようだ。

IPヘッダには上位プロトコルを識別するためにIPヘッダのフィールドに「プロトコル」というものがあります。ICMPの場合はこのプロトコル番号が「1」とてされている。ちなみにTCPは「6」、UDPは「17」です。IPを実装する場合はICMPも実装しなければならないとRFCに書かれているようだし、IPとICMPは一心同体なんでしょう。ICMPは「IPのデータそのもの」と理解して、ネットワーク層のプロトコルと納得するべきなんだろうな、と思っている。。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。