要約

  • tcpActiveOpensなど多くの管理オブジェクトは、接続の下でIPv4とIPv6のどちらが使われても意味が変わらず、RFC 2452はそれらを複製しなかった。
  • IPv6の接続表では、同じノード上の四つのアドレス・ポート値だけでは行が一意にならない場合があり、ipv6TcpConnIfIndexが第五の索引として加わった。

四つの値が一意でないとき

管理システムが読む接続レコードには、ローカルアドレスとポート、リモートアドレスとポートが並ぶ。平らな一覧なら、それで一つの接続を特定できそうに見える。しかしIPv6のアドレスにはスコープがある。リンクローカルの値は特定のリンク上で意味を持ち、複数のインターフェースを持つノードでは、同じアドレス値が異なる接続文脈に現れ得る。

1998年12月に公開されたRFC 2452は、IPv6 TCPの管理表に ipv6TcpConnIfIndex を追加した。これが第五の索引となり、四つのエンドポイント値にインターフェース文脈を加える。TCPパケットのフィールドが五つになったわけではなく、ネットワーク上のTCP接続タプルが変わったわけでもない。変化したのは管理情報ベースの行キーである。

その判断の前半は、あえて複雑にしないことだった。RFC 2452はTCPの動作について、下位のIP版は大部分が見えないと説明した。IPv6アドレスへの対応は必要だが、新たな「TCPng」を作る必要はない。RFC 2012の管理オブジェクトの多くは、IPv4のみ、IPv6のみ、あるいは両方のノードに適用できる。

例として挙げられたのが tcpActiveOpens だ。これはCLOSEDからSYN-SENTへの直接遷移を数えるもので、両端の間でどちらのIP版が使われたかは問わない。ひとつのTCPイベントの定義が変わらないなら、ファミリー別カウンターを作る理由もない。ただし、共通の数値からIPv4とIPv6を振り分けられるわけではない。値だけでは接続、インターフェース、プロセスや利用者を特定できない。また、RFCは各実装内部で同じカウンター格納領域が使われたと報告しているのではない。

表だけを分けた理由

RFC 2012の接続表はSMIv2の IpAddress を使っていた。これは4オクテットでIPv4アドレスを表す型なので、IPv6のエンドポイントを収められない。そこでRFC 2452はIPv6両端間の接続用に別の ipv6TcpConnTable を定義し、IPv4の接続は以前の表に残した。両ファミリーを一つの新表へ置き換える案ではRFC 2012やIPv4専用実装にも変更が及ぶため、既存系をそのままにすることが利点とされた。将来のTCP-MIB更新へ統合される想定から、モジュールは実験用MIB配下に置かれている。

第五の値の意味はアドレス条件で変わる。リモートがリンクローカルでローカルがそうでない場合、索引はリモート側と同じリンク上のローカルインターフェースを示す。それ以外では、ローカルIPv6アドレスに対応するインターフェースを指す。ゼロでない値は同じ番号の ipv6IfIndex と同一のインターフェースであり、接続の存続中は一定でなければならない。

インターフェースを特定できない場合はゼロを使える。ワイルドカードのローカルアドレス ::0 は、その可能性の一例として挙げられている。ゼロはインターフェース番号ゼロの実物を指すのではなく、判定できないという限界を残す値だ。後から推測で埋めれば、記録に含まれていた不確実性を事実に見せかけることになる。

その行は接続とともに消える

この表が記述するのは現在のTCP接続である。接続がCLOSEDになるとき、またはその直後に行は存在しなくなる。したがって、それは一時点の管理観測であって、端末、利用者、プロセスやサービスの永続識別子ではない。第五の索引があっても、相手の本人性、アドレスの所有、到達性、アプリケーションの成功までは証明できない。

表には書き込み可能な deleteTCB(12) も継承された。この値を設定すれば管理対象ノード上の接続を終了させ得るが、その介入の歴史は既刊のRFC 2012記事が扱う。ここでは、管理上の観測面が機微な制御面にもなり得ることを示す限定的な補足にとどめる。索引が精密でも、書き込みの権限や相手側での結果が自動的に証明されるわけではない。

2005年のRFC 4022はRFC 2012とRFC 2452を置き換え、汎用アドレス規約を使うIP版非依存のTCP-MIBを定めた。IPv6だけの表と第五の索引をそのまま残したのではない。RFC 4001は InetAddressType と InetAddress の対、およびゾーンを含む形式を定義し、RFC 4007はIPv6のスコープとゾーンを説明する。さらに2017年のRFC 8096は、リポジトリー保守向けに旧IPv6固有モジュールをobsoleteとしたうえで、RFC 2452をHistoricに再分類した。技術的な統合と、その後の歴史的な再分類は別の出来事である。

出典