プロトコル番号
IPヘッダーの中にある、IPパケットのデータ部分に入っている上位のプロトコルを示す番号。TCPなら6、UDPなら17のように決まっている。
イマシルちゃんの解説
IPパケットを受け取ったパソコンは、「この中身は誰に渡せばいいの?」って迷っちゃうよね。
TCPに渡すのか、UDPに渡すのか、ICMPなのか。
そこで、IPヘッダーには「中身はこれですよ」っていう番号札が付いてるんだ。
それがプロトコル番号! 番号を見れば、すぐに正しい相手に渡せるんだよ。
より深い解説
定義
プロトコル番号は、IPv4ヘッダーにある8ビットの「プロトコル」フィールドの値で、IPパケットのデータ部分に入っている上位プロトコルの種類を示す。IPv6では、同じ役割をNext Header(次ヘッダー)フィールドが担う。番号はIANAが管理している。
代表的なプロトコル番号
| 番号 | プロトコル |
|---|---|
| 1 | ICMP |
| 2 | IGMP |
| 6 | TCP |
| 17 | UDP |
| 41 | IPv6(IPv4の中にIPv6を入れて運ぶとき) |
| 47 | GRE |
| 50 | ESP(IPsec) |
| 51 | AH(IPsec) |
| 58 | ICMPv6 |
| 89 | OSPF |
OSPFは、TCPやUDPを使わず、IPの上に直接載るルーティングプロトコルである点もよく問われる。
階層ごとの「中身を示す番号」
ネットワークの各層には、それぞれ「次はどの層の誰に渡すか」を示す番号がある。この3つを混同しないことが大事である。
| 層 | どこにあるか | 何を示すか | 例 |
|---|---|---|---|
| データリンク層 | イーサネットのタイプフィールド | 中身のネットワーク層プロトコル | 0x0800=IPv4 |
| ネットワーク層 | IPヘッダーのプロトコル番号 | 中身のトランスポート層などのプロトコル | 6=TCP |
| トランスポート層 | TCP・UDPヘッダーのポート番号 | 中身を受け取るアプリケーション | 443=HTTPS |
たとえば、受信したイーサネットフレームのタイプが0x0800ならIPv4に渡し、IPヘッダーのプロトコル番号が6ならTCPに渡し、TCPヘッダーの宛先ポート番号が443ならWebサーバのプログラムに渡す、という順で中身が届けられる。
IPv6の拡張ヘッダー
IPv6では、Next Headerが上位プロトコルだけでなく、拡張ヘッダー(経路制御ヘッダー、フラグメントヘッダーなど)の種類も示す。拡張ヘッダーがいくつも連なる場合は、各ヘッダーのNext Headerが次のヘッダーを指し、最後にTCPやUDPにたどり着く。