RFC 4566 - SDP: セッション記述プロトコル
- ステータス: Proposed Standard
- 発行日: July 2006
- ストリーム: IETF
- 廃止: RFC2327, RFC3266
- 廃止: RFC8866
- エラッタ: エラッタなし
概要 (Abstract)
本メモは、セッション記述プロトコル (Session Description Protocol, SDP) を定義します。SDPは、セッション通知、セッション招待、およびその他の形式のマルチメディアセッション開始の目的でマルチメディアセッションを記述することを目的としています。
目次 (Contents)
- 1. Introduction (はじめに)
- 2. Glossary of Terms (用語集)
- 3. Examples of SDP Usage (SDPの使用例)
- 3.1 Session Initiation
- 3.2 Streaming Media
- 3.3 Email and the World Wide Web
- 3.4 Multicast Session Announcement
- 4. Requirements and Recommendations (要件と推奨事項)
- 5. SDP Specification (SDP仕様)
- 6. SDP Attributes (SDP属性)
- 7. Security Considerations (セキュリティに関する考慮事項)
- 8. IANA Considerations (IANAに関する考慮事項)
- 9. SDP Grammar (SDP文法)
- 10. Summary of Changes from RFC 2327 (RFC 2327からの変更の概要)
- 11. Acknowledgements (謝辞)
- 12. References (参考文献)
関連リソース
- 公式RFC: RFC 4566
- 公式ページ: RFC 4566 DataTracker
- 正誤表: RFC Editor Errata
2. 用語集 (Glossary of Terms)
本文書では以下の用語を使用します。これらは本文書のコンテキストにおいて特定の意味を持ちます。
会議 (Conference): マルチメディア会議とは、通信している 2 人以上のユーザーと、通信に使用するソフトウェアの集合です。
セッション (Session): マルチメディアセッションとは、マルチメディアの送信者と受信者のセット、および送信者から受信者に流れるデータストリームです。マルチメディア会議はマルチメディアセッションの一例です。
セッション記述 (Session Description): マルチメディアセッションを発見して参加するのに十分な情報を伝えるための、明確に定義されたフォーマット。
本文書のキーワード「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」は RFC 2119 [3] の記述に従って解釈されます。
3. SDP 使用例 (Examples of SDP Usage)
3.1 セッション開始 (Session Initiation)
Session Initiation Protocol (SIP) [15] は、インターネットマルチメディア会議、インターネット電話、マルチメディア配信などのセッションを作成、変更、終了するためのアプリケーション層制御プロトコルです。セッションを作成するための SIP メッセージはセッション記述を運び、参加者が互換性のあるメディアタイプのセットについて合意できるようにします。これらのセッション記述は通常 SDP フォーマットで記述されます。SIP と組み合わせて使用する場合、提案/応答モデル (offer/answer model) [17] が SDP を使用したネゴシエーションのための限定的なフレームワークを提供します。
3.2 ストリーミングメディア (Streaming Media)
Real Time Streaming Protocol (RTSP) [16] は、リアルタイム特性を持つデータ配信を制御するためのアプリケーション層プロトコルです。RTSP は、音声や映像などのリアルタイムデータのオンデマンド配信を制御するための拡張可能なフレームワークを提供します。RTSP クライアントとサーバーは、適切なメディア配信パラメーターのセットについてネゴシエートし、これらのパラメーターを記述するために部分的に SDP 構文を使用します。
3.3 電子メールとワールドワイドウェブ (Email and the World Wide Web)
セッション記述を伝える代替方法には、電子メールとワールドワイドウェブ (WWW) があります。電子メールと WWW 配信には、メディアタイプ「application/sdp」が使用されます。これにより、アプリケーションが WWW クライアントやメールリーダーからセッションに参加するために標準的な方法で自動的に起動できます。
電子メールや WWW のみを通じたマルチキャストセッション通告は、セッション通告の受信者が必ずしもセッションを受信できるとは限らないという特性を持たないことに注意してください。マルチキャストセッションはスコープが制限される場合があり、WWW サーバーへのアクセスや電子メールの受信がそのスコープ外になる場合があります。
3.4 マルチキャストセッション通告 (Multicast Session Announcement)
マルチキャストマルチメディア会議やその他のマルチキャストセッションの広告を支援し、潜在的な参加者に関連するセッション設定情報を伝えるために、分散セッションディレクトリを使用できます。このようなセッションディレクトリのインスタンスは、セッション記述を含むパケットを定期的に既知のマルチキャストグループに送信します。これらの通告は他のセッションディレクトリによって受信され、潜在的なリモート参加者がセッション記述を使用してセッションへの参加に必要なツールを起動できます。
このような分散ディレクトリを実装するために使用されるプロトコルの一つが Session Announcement Protocol (SAP) [14] です。SDP はこのようなセッション通告に推奨されるセッション記述フォーマットを提供します。
4. 要件と推奨事項 (Requirements and Recommendations)
SDP の目的は、マルチメディアセッションのメディアストリームに関する情報を伝え、セッション記述の受信者がセッションに参加できるようにすることです。SDP は主にインターネットワーク上で使用されますが、他のネットワーク環境の会議を記述するのに十分な汎用性を持っています。メディアストリームは多対多になる場合があります。セッションは継続的にアクティブである必要はありません。
SDP セッション記述には以下が含まれます。
- セッション名と目的
- セッションがアクティブな時間
- セッションを構成するメディア
- これらのメディアを受信するために必要な情報(アドレス、ポート、フォーマットなど)
セッションへの参加に必要なリソースが限られている場合があるため、追加情報も必要になる場合があります。
- セッションが使用する帯域幅に関する情報
- セッションを担当する人の連絡先情報
一般的に、SDP はアプリケーションがセッションに参加できるよう十分な情報を伝えなければならず(暗号化キーは例外かもしれません)、使用されるリソースを知る必要がある非参加者に通知しなければなりません。
4.1 メディアとトランスポート情報 (Media and Transport Information)
SDP セッション記述には以下のメディア情報が含まれます。
- メディアタイプ(映像、音声など)
- トランスポートプロトコル(RTP/UDP/IP、H.320 など)
- メディアフォーマット(H.261 映像、MPEG 映像など)
メディアフォーマットとトランスポートプロトコルに加えて、SDP はアドレスとポートの詳細も伝えます。IP マルチキャストセッションの場合、これらには以下が含まれます。
- メディアのマルチキャストグループアドレス
- メディアのトランスポートポート
このアドレスとポートは、送信、受信、またはその両方に関わらず、マルチキャストストリームの宛先アドレスと宛先ポートです。
ユニキャスト IP セッションの場合、以下が伝えられます。
- メディアのリモートアドレス
- メディアのリモートトランスポートポート
このアドレスとポートのセマンティクスは、定義されたメディアとトランスポートプロトコルによって異なります。デフォルトでは、これはデータが送信されるリモートアドレスとリモートポートであるべきです (SHOULD)。
4.2 タイミング情報 (Timing Information)
セッションは時間的に有界または無界になる場合があります。有界かどうかにかかわらず、特定の時間にのみアクティブになる場合があります。SDP は以下を伝えることができます。
- セッションを区切る任意の開始時刻と終了時刻のリスト
- 各区切りに対して、「毎週水曜日の午前 10 時から 1 時間」などの繰り返し時間
これらのタイミング情報はグローバルに一貫しており、ローカルタイムゾーンや夏時間とは無関係です(第 5.9 節参照)。
4.3 プライベートセッション (Private Sessions)
パブリックセッションとプライベートセッションを作成できます。SDP 自体はこれらを区別しません。プライベートセッションは通常、配信中にセッション記述を暗号化することで伝えられます。暗号化の実行方法の詳細は SDP を伝えるために使用されるメカニズムによって異なります。
4.4 セッションに関する追加情報の取得 (Obtaining Further Information about a Session)
セッション記述はセッションへの参加を決定するのに十分な情報を伝えるべきです。SDP は Uniform Resource Identifiers (URI) の形式でセッションに関する追加情報へのポインターを含む場合があります。
4.5 分類 (Categorisation)
SAP または他の通告メカニズムが多くのセッション記述を配信している場合、興味のないセッション通告から興味のあるものをフィルタリングする必要がある場合があります。SDP は自動化できるセッション分類メカニズムをサポートしています(「a=cat:」属性;第 6 節参照)。
4.6 国際化 (Internationalisation)
SDP 仕様は、多くの異なる言語を表現できるよう UTF-8 エンコーディング [5] の ISO 10646 文字セットの使用を推奨しています。ただし、コンパクトな表現を支援するために、必要に応じて ISO 8859-1 などの他の文字セットも許可しています。国際化は SDP 全体ではなく、自由テキストフィールド(セッション名と背景情報)にのみ適用されます。
5. SDP 仕様 (SDP Specification)
SDP セッション記述はメディアタイプ「application/sdp」で表されます(第 8 節参照)。
SDP セッション記述は UTF-8 エンコーディングの ISO 10646 文字セットを使用したテキスト形式です。SDP フィールド名と属性名は UTF-8 の US-ASCII サブセットのみを使用しますが、テキストフィールドと属性値は完全な ISO 10646 文字セットを使用できます (MAY)。
SDP 記述フォーマット
SDP セッション記述は複数行のテキストで構成され、フォーマットは以下の通りです。
<type>=<value>
<type> は大文字小文字を区別する 1 文字でなければならず (MUST)、<value> は <type> によってフォーマットが決まる構造化テキストです。
SDP 記述構造
SDP セッション記述はセッションレベルのセクションと 0 個以上のメディアレベルのセクションで構成されます。必須の行は REQUIRED、オプションの行は OPTIONAL で、すべての行はここに示す順序で現れなければなりません (MUST)。オプション項目は「*」でマークされています。
セッション記述 (Session description):
v=(プロトコルバージョン)o=(発信者とセッション識別子)s=(セッション名)i=* (セッション情報)u=* (記述の URI)e=* (電子メールアドレス)p=* (電話番号)c=* (接続情報 - すべてのメディアに含まれる場合は不要)b=* (0 個以上の帯域幅情報行)- 1 つ以上の時間記述(「t=」と「r=」行)
z=* (タイムゾーン調整)k=* (暗号化キー)a=* (0 個以上のセッション属性行)- 0 個以上のメディア記述
時間記述 (Time description):
t=(セッションがアクティブな時間)r=* (0 個以上の繰り返し時間)
メディア記述 (Media description, if present):
m=(メディア名とトランスポートアドレス)i=* (メディアタイトル)c=* (接続情報 - セッションレベルに含まれる場合はオプション)b=* (0 個以上の帯域幅情報行)k=* (暗号化キー)a=* (0 個以上のメディア属性行)
SDP の例
v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
[email protected] (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000
サブセクション
5.1 プロトコルバージョン ("v=")
v=0
「v=」フィールドはセッション記述プロトコルのバージョンを示します。本メモはバージョン 0 を定義します。マイナーバージョン番号はありません。
5.2 発信者 ("o=")
o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
「o=」フィールドはセッションの発信者(ユーザー名とユーザーホストのアドレス)、セッション識別子とバージョン番号を示します。
5.3 セッション名 ("s=")
s=<session name>
「s=」フィールドはテキストのセッション名です。各セッション記述には「s=」フィールドが 1 つだけなければなりません (MUST)。
5.4 セッション情報 ("i=")
i=<session description>
「i=」フィールドはセッションに関するテキスト情報を提供します。
5.5 URI ("u=")
u=<uri>
「u=」フィールドはセッションに関する詳細情報への URI を含みます。
5.6 電子メールアドレスと電話番号 ("e=" と "p=")
e=<email-address>
p=<phone-number>
「e=」フィールドは会議を担当する人の電子メールアドレスを含みます。「p=」フィールドは電話番号を含みます。
5.7 接続データ ("c=")
c=<nettype> <addrtype> <connection-address>
「c=」フィールドは接続データに必要な情報を含みます。
5.8 帯域幅 ("b=")
b=<bwtype>:<bandwidth>
「b=」フィールドは推奨されるセッション帯域幅を示します。
5.9 タイミング ("t=")
t=<start-time> <stop-time>
「t=」行はセッションの開始時刻と終了時刻を指定します。
5.10 繰り返し時間 ("r=")
r=<repeat interval> <active duration> <offsets from start-time>
「r=」行は繰り返しセッションの時間を指定します。
5.11 タイムゾーン ("z=")
z=<adjustment time> <offset> <adjustment time> <offset> ...
「z=」行は夏時間やその他のタイムゾーンオフセット変更を補正するためのタイムゾーン調整を指定します。
5.12 暗号化キー ("k=")
k=<method>
k=<method>:<encryption key>
「k=」フィールドは暗号化キーを伝えるために使用されます。
5.13 属性 ("a=")
a=<attribute>
a=<attribute>:<value>
属性は SDP を拡張する主な手段です。属性はセッションレベルまたはメディアレベルで定義できます。
5.14 メディア記述 ("m=")
m=<media> <port> <proto> <fmt> ...
メディア記述は「m=」行から始まり、メディアストリームを記述するのに十分な情報を含みます。
注意: 第 5 章には多くの技術的詳細と ABNF 構文定義が含まれています。完全な仕様については RFC 4566 公式文書 を参照してください。
6. SDP 属性 (SDP Attributes)
属性 (Attributes) は SDP を拡張する主な手段であり、セッションレベルまたはメディアレベルで定義できます。セッションレベルの属性はセッション全体に適用され(メディアレベルの属性で上書きされない限り)、メディアレベルの属性は特定のメディアストリームにのみ適用されます。
属性行のフォーマットは以下の通りです。
a=<attribute>
a=<attribute>:<value>
標準属性リスト
以下は本仕様で定義される標準 SDP 属性です。
cat(カテゴリ)
a=cat:<category>
セッションを分類するために使用し、フィルタリングと検索を容易にします。
keywds(キーワード)
a=keywds:<keywords>
セッションに関するキーワードリストを提供します。
tool(ツール)
a=tool:<name and version of tool>
セッション記述を作成したソフトウェアツールを識別します。
ptime(パケット時間)
a=ptime:<packet time>
各パケット内のメディアの持続時間(ミリ秒)を示します。
maxptime(最大パケット時間)
a=maxptime:<maximum packet time>
各パケットの最大持続時間(ミリ秒)を示します。
rtpmap(RTP マッピング)
a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]
RTP ペイロードタイプをメディアエンコーディング名にマッピングします。
recvonly(受信のみ)
a=recvonly
ツールがメディアを受信のみで送信できないことを示します。
sendrecv(送受信)
a=sendrecv
ツールがメディアを送信も受信もできることを示します(これがデフォルト値です)。
sendonly(送信のみ)
a=sendonly
ツールがメディアを送信のみで受信できないことを示します。
inactive(非アクティブ)
a=inactive
メディアストリームが現在非アクティブ状態であることを示します。
orient(方向)
a=orient:<whiteboard orientation>
ホワイトボードメディアタイプに使用し、ホワイトボードの方向を示します。
type(会議タイプ)
a=type:<conference type>
会議タイプを指定します(「broadcast」「meeting」「moderated」「test」「H332」など)。
charset(文字セット)
a=charset:<character set>
セッション記述のテキストフィールドで使用する文字セットを指定します。
sdplang(SDP 言語)
a=sdplang:<language tag>
セッション記述で使用する言語を指定します。
lang(言語)
a=lang:<language tag>
メディアストリームで使用する言語を指定します。
framerate(フレームレート)
a=framerate:<frame rate>
映像のフレームレート(フレーム/秒)を示します。
quality(品質)
a=quality:<quality>
エンコーディング品質の推奨値を示します。
fmtp(フォーマットパラメーター)
a=fmtp:<format> <format specific parameters>
特定のフォーマットのパラメーターを指定するために使用します。
注意: 本章は SDP のコア属性を列挙しています。各メディアタイプとアプリケーションは追加の属性を定義する場合があります。完全な属性リストと詳細な説明については RFC 4566 公式文書 の第 6 節を参照してください。
7. セキュリティに関する考慮事項 (Security Considerations)
SDP セッション記述自体はトランスポートプロトコルを構成せず、セッション記述を参加者に配信するためにトランスポートプロトコルと組み合わせて使用しなければなりません (MUST)。本節では SDP 使用におけるセキュリティの考慮事項を説明します。
機密性 (Confidentiality)
セッション記述には以下を含む機密情報が含まれる場合があります。
- 参加者の身元情報
- 連絡先情報(電子メール、電話番号)
- 暗号化キー
- ネットワークトポロジー情報(IP アドレス、ポート)
- セッションの時間とトピック
転送中のセッション記述の機密性を保護するために、適切な暗号化メカニズム(TLS、S/MIME など)の使用が推奨されます。
完全性と真正性 (Integrity and Authenticity)
セッション記述は不正な変更から保護されなければなりません (MUST)。攻撃者はセッション記述を変更することで以下を行う可能性があります。
- メディアストリームを悪意のあるサーバーにリダイレクト
- 悪意のある属性を注入
- 暗号化キーを変更
- セッション時間を変更
セッション記述の完全性と真正性を検証するために、デジタル署名またはメッセージ認証コード (MAC) の使用が推奨されます。
サービス拒否 (Denial of Service)
攻撃者はセッション記述を使用してサービス拒否攻撃を開始する可能性があります。
- 大量の偽造セッション通告を送信
- パーサーリソースを消費する非常に大きなセッション記述を作成
- ネットワークリソースを消費するために存在しないアドレスを指定
実装はセッション記述のサイズと複雑さを制限し、解析エラーを適切に処理すべきです (SHOULD)。
暗号化キー配布 (Encryption Key Distribution)
SDP は暗号化キーを伝えるメカニズム(「k=」フィールド)を提供していますが、多くの場合、セッション記述を通じてキーを渡すことは安全でない場合があります。専用のキー管理プロトコル(MIKEY、ZRTP など)またはアウトオブバンドのキー交換方法の使用が推奨されます。
プライバシーの考慮事項 (Privacy Considerations)
「o=」フィールドにはセッションを作成したユーザー名と IP アドレスが含まれており、プライバシー情報が漏洩する可能性があります。プライバシーが必要なシナリオでは、フィールドのグローバルな一意性に影響しない限り、任意のユーザー名とプライベートアドレスを使用できます。
NAT とファイアウォール
SDP に含まれる IP アドレスとポート情報は、NAT やファイアウォールを通過する際に無効になる場合があります。アプリケーションはこれらの状況を処理するために Interactive Connectivity Establishment (ICE) などのメカニズムを使用すべきです (SHOULD)。
8. IANA に関する考慮事項 (IANA Considerations)
本節では SDP が使用する各種パラメーターの IANA 登録要件を説明します。
8.1 「application/sdp」メディアタイプ
SDP セッション記述はメディアタイプ「application/sdp」を使用します。
メディアタイプ名: application
メディアサブタイプ名: sdp
必須パラメーター: なし
オプションパラメーター: なし
エンコーディングの考慮事項: SDP ファイルは UTF-8 エンコーディングの ISO 10646 文字セットを使用するテキストファイルです。
セキュリティの考慮事項: RFC 4566 第 7 節参照
相互運用性の考慮事項: RFC 4566 参照
公開仕様: RFC 4566
このメディアタイプのアプリケーション: マルチメディアセッション設定と通告ツール
追加情報:
- ファイル拡張子: .sdp
- Macintosh ファイルタイプコード: 'sdp '
8.2 パラメーターの登録
SDP は複数のパラメータータイプを使用し、これらは IANA によって登録できます。
8.2.1 メディアタイプ ("media")
SDP が使用するメディアタイプ名は IANA に登録すべきです (SHOULD)。初期登録されたメディアタイプには以下が含まれます。
- audio(音声)
- video(映像)
- text(テキスト)
- application(アプリケーション)
- message(メッセージ)
8.2.2 トランスポートプロトコル ("proto")
初期登録されたトランスポートプロトコルには以下が含まれます。
- RTP/AVP(RTP 音声映像プロファイル)
- RTP/SAVP(RTP セキュア音声映像プロファイル)
- UDP(ユーザーデータグラムプロトコル)
8.2.3 メディアフォーマット ("fmt")
メディアフォーマット(RTP ペイロードタイプなど)の登録は RFC 3555 で定義された手順に従います。
8.2.4 属性名 ("att-field")
SDP 属性名は IANA に登録されます。新しい属性の登録には以下を含めるべきです (SHOULD)。
- 属性名
- タイプ(セッションレベル、メディアレベル、または両方)
- 値(ある場合)
- 用途とセマンティクス
- 参照仕様
8.2.5 帯域幅指定子 ("bwtype")
初期登録された帯域幅指定子には以下が含まれます。
- CT(Conference Total、会議合計帯域幅)
- AS(Application Specific、アプリケーション固有帯域幅)
8.2.6 ネットワークタイプ ("nettype")
初期登録されたネットワークタイプ:
- IN(Internet、インターネット)
8.2.7 アドレスタイプ ("addrtype")
初期登録されたアドレスタイプ:
- IP4(IPv4 アドレス)
- IP6(IPv6 アドレス)
8.3 暗号化キーアクセス方法
「k=」フィールドが使用する暗号化キーアクセス方法は IANA に登録すべきです (SHOULD)。初期登録された方法には以下が含まれます。
- clear(平文キー)
- base64(Base64 エンコードされたキー)
- uri(URI を通じて取得するキー)
- prompt(ユーザーにキー入力を促す)
10. RFC 2327 からの変更点の概要 (Summary of Changes from RFC 2327)
RFC 4566 は RFC 2327 と RFC 3266 を廃止します。本節では RFC 2327 と比較した主な変更点を概説します。
主な変更点
規範的参照
- 他の RFC への参照を更新し、規範的文書の現在バージョンを使用
- RFC 3986(URI 構文)への参照を追加
国際化ドメイン名 (IDN)
- 国際化ドメイン名は ASCII 互換エンコーディング (ACE) 形式を使用しなければならない (MUST) ことを明確化
- SDP での UTF-8 やその他のエンコーディングによる IDN の直接使用を禁止
メディアタイプ登録
- 「application/sdp」メディアタイプの登録情報を更新
- エンコーディングの考慮事項とセキュリティの考慮事項を明確化
ABNF 文法
- 現在の実践を反映するよう ABNF 文法を更新
- 一部の文法規則の細かいエラーを修正
- RFC 4234(現在は RFC 5234)の ABNF 表記法を使用
セキュリティの考慮事項
- セキュリティの考慮事項の章を拡張
- NAT トラバーサルとファイアウォールに関する議論を追加
- 暗号化キー配布のセキュリティ問題を強調
IANA の考慮事項
- パラメーター登録手順を更新
- 各種 SDP パラメーターの登録要件を明確化
- 新しい登録カテゴリを追加
属性定義
- 一部の属性のセマンティクスを明確化
- 属性使用の例を更新
接続アドレス
- 「c=」行の接続アドレスの使用を明確化
- IPv4 と IPv6 アドレスの表現を明確化
時間記述
- 時間フィールドのセマンティクスを明確化
- NTP タイムスタンプの使用説明を更新
編集上の変更
- 文書構造と可読性を改善
- 現在の実践を反映するよう例を更新
- スペルと文法エラーを修正
- 用語の使用を統一
後方互換性
RFC 4566 は RFC 2327 との後方互換性を維持しています。RFC 2327 に準拠した実装は RFC 4566 に準拠したセッション記述を処理できるべきであり、その逆も同様です。
11. 謝辞 (Acknowledgements)
SDP の開発は Multicast Backbone (MBONE) コミュニティの多くのメンバーの貢献によって実現しました。特に Eve Schooler、Steve Casner、Bill Fenner、Ron Frederick、Allison Mankin、Scott Shenker、Henning Schulzrinne、および SDP の初期バージョンにコメントと提案を提供してくださった多くの方々に感謝します。
本文書の各バージョンをレビューしコメントを提供してくださった MMUSIC ワーキンググループのすべてのメンバーに感謝します。
RFC 4566 への貢献とコメントを提供してくださった以下の方々に特に感謝します。
- Dave Singer
- Joerg Ott
- Jonathan Rosenberg
- Magnus Westerlund
- フィードバックを提供してくださったすべての IETF コミュニティメンバー
完全な謝辞リストについては RFC 4566 公式文書 の第 11 節を参照してください。