なかっちゃんtech blog

勉強会とか日々の勉強の記録

ICMP ってL3のプロトコルですよね?

仮配属でCISCOルータで遊ばせてもらってるので久々にネットワークで遊んで楽しんでます.んでいろいろ調べてたわけですが

changineer.info

こちらのサイトに

ICMPは、以下の誤解が巷にあふれています。
- ICMPはUDPである
- ICMPはLayer3のプロトコルである
これら主張は大嘘です。知恵袋などの質問サイトを見ると、「pingのポート番号を教えて下さい」等の質問がありますが、ICMPはTCPでもUDPでもありません。このような誤った概念を持たないようにするには、まずはIPのprotocol numberの概念を理解する必要があります。

って書いてあって「はえええ??? ICMPってL3のプロトコルじゃないの???」って思いですね,流石に調べた.

いや...他のサイトはL3プロトコルって書いてるんだけどというわけで勉強ついでにRFC792に行きました.

イントロの

The Internet Protocol (IP) [1] is used for host-to-host datagram service in a system of interconnected networks called the Catenet [2]. The network connecting devices are called Gateways. These gateways communicate between themselves for control purposes via a Gateway to Gateway Protocol (GGP) [3,4]. Occasionally a gateway or destination host will communicate with a source host, for example, to report an error in datagram processing. For such purposes this protocol, the Internet Control Message Protocol (ICMP), is used. ICMP, uses the basic support of IP as if it were a higher level protocol, however, ICMP is actually an integral part of IP, and must be implemented by every IP module.

ってことで「Gateway to Gatewayでやってるときにエラーのレポートしてくれたらいいよね.それをICMPとする.んでこの機能はIPを前提としているのでIPよりも上のレベルのプロトコルのようだが,IPにとって不可欠なものであり,全てのIPモジュールはこれを実装しなければならない.」って書いてますね.んでTCP/IPのモデルで考えてICMPがL4のプロトコルだと仮定してもL3のIPにとってL4のICMPが不可欠なものだとしたらそれは思想に反し,下のレイヤが上のレイヤに依存していることになる.というわけで仮定はおかしいということになりますね.

んー やっぱ本質とかなんでそれができたかどうかを知るときはRFCを読むに限りますね.