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のデータそのもの」と理解して、ネットワーク層のプロトコルと納得するべきなんだろうな、と思っている。。

「ICMPはネットワーク層のプロトコルなのか?」への3件のフィードバック

  1. 私も同じ疑問を持って色々調べていたらここに辿り着きました。
    同じ疑問を持つ他人の解釈ほど共感でき、これ以上参考になるものはありません。
    ありがとうございます。

  2. 自分もCCNAの勉強をしていて全く同じ疑問を持ちました。TCP/IPでIPとICMPは同じインターネット層なのに。。なぜ。。
    この点に関して疑問に持つのは自分だけじゃなかったのですね。。

  3. 資格の勉強をしていて同じく疑問に思い検索していました。
    参考書には、icmpはipから見ると上位プロトコルだが機能的にはネットワーク層に分類される、とありました。
    icmpにはtcpやudpのようにポート番号でアプリケーションを識別する機能はないので、確かにトランスポート層ではなくネットワーク層というのは確かに、、と。
    そうなると、ipヘッダの「プロトコル」の”上位”プロトコルを識別するというのは、OSI参照モデルの”上位”ではなくて、ipからみて上位のプロトコル、ということなんですかね。

匿名 へ返信する コメントをキャンセル

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