ネットワークを勉強していると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のデータそのもの」と理解して、ネットワーク層のプロトコルと納得するべきなんだろうな、と思っている。。
私も同じ疑問を持って色々調べていたらここに辿り着きました。
同じ疑問を持つ他人の解釈ほど共感でき、これ以上参考になるものはありません。
ありがとうございます。
自分もCCNAの勉強をしていて全く同じ疑問を持ちました。TCP/IPでIPとICMPは同じインターネット層なのに。。なぜ。。
この点に関して疑問に持つのは自分だけじゃなかったのですね。。
資格の勉強をしていて同じく疑問に思い検索していました。
参考書には、icmpはipから見ると上位プロトコルだが機能的にはネットワーク層に分類される、とありました。
icmpにはtcpやudpのようにポート番号でアプリケーションを識別する機能はないので、確かにトランスポート層ではなくネットワーク層というのは確かに、、と。
そうなると、ipヘッダの「プロトコル」の”上位”プロトコルを識別するというのは、OSI参照モデルの”上位”ではなくて、ipからみて上位のプロトコル、ということなんですかね。