初めに、図1を用いて一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
上述のように、分割されたIPパケットの転送を低遅延にて行う通信装置(メディアゲートウェイ)が望まれる。
そこで、一例として図1に示す通信装置100を提供する。通信装置100は、生成部101と、ヘッダ構築部102と、送信部103と、を備えている。生成部101は、第1及び第2端末間で送受信されるパケットを伝送するための制御情報に基づき、第1端末と自装置の間に形成されるセッションに関する第1セッション情報と第2端末と自装置の間に形成されるセッションに関する第2セッション情報を1組とするセッション情報を生成する。ヘッダ構築部102は、符号化されたマルチメディアデータが複数のパケットに分割されて送信され、複数のパケットのうちの先頭パケットを第1端末から受信し、且つ、第2端末にて符号化されたマルチメディアデータが復号される場合に、第1端末から受信した先頭パケットに対応するパケットであって、第2端末に送信する先頭パケットのヘッダを、少なくともセッション情報に基づき構築する。送信部103は、第1端末から受信した先頭パケットのペイロードに構築されたヘッダを付与したパケットを第2端末に向けて送信する。
通信装置100は、フラグメント化されたIPパケットを第1端末から受信し、当該分割されたIPパケットのコーデック変換が不要な場合(第2端末にてデータの復号が行われる場合)には、先頭パケットのペイロードに格納されたデータをコーデック変換することなく、第2端末に送信する。第2端末に送信する先頭パケットにはIPヘッダ、UDPヘッダ、RTPヘッダ等の各種ヘッダが必要となるが、通信装置100は、各端末と自装置間に形成されるセッションの情報に基づいて、上記各種ヘッダを構築する。通信装置100は、構築されたヘッダを、第1端末から受信した先頭パケットのペイロードに付与して、第2端末に送信する。
従って、通信装置100は、分割されたパケットの全てを受信せずに、第1端末から送信された先頭パケットを第2端末に向けて送信できるので、低遅延にてパケットの転送を実現できる。
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。
[第1の実施形態]
第1の実施形態について、図面を用いてより詳細に説明する。
図2は、第1の実施形態に係るネットワークシステムの概略構成の一例を示す図である。図2を参照すると、ネットワークシステムは、端末10−1及び10−2と、メディアゲートウェイ20と、MGC(Media Gateway Controller)&CSCF30と、を含んで構成される。ネットワークシステムに含まれる各装置は、IP網を介して接続される。なお、以降の説明において、端末10−1と10−2を区別する特段の理由が無い場合には、単に「端末10」と表記する。
第1の実施形態では、2つの端末10にTVoIPに係るサービスを提供するネットワークシステムを例示して説明を行う。但し、ネットワークシステムにて提供するサービスを限定する趣旨ではない。また、図2に示す構成は例示であって、システム構成を限定する趣旨ではない。例えば、MGC&CSCF30は同じ装置にて実現する形態を図2では図示しているが、MGCとCSCFが異なる装置にて実現されていてもよい。
図2において、端末10−1は、呼制御プロトコルにSIPを用いて、MGC&CSCF30に対し端末10−2とのセッション確立を要求する。
MGC&CSCF30は、SCTP(Stream Control Transmission Protocol)を用いてメディアゲートウェイ20に対する制御信号を伝送する。その際、MGC&CSCF30は、Megaco(media gateway control)に係るプロトコルを用いてメディアゲートウェイ20の動作を制御する(図3参照)。具体的には、MGC&CSCF30は、端末10−1と端末10−2の間で送受信されるパケットを伝送するための制御情報を、メディアゲートウェイ20に設定する。
端末10−1及び10−2は、確立されたセッション上にてTVoIPに係るマルチメディアデータ(音声データ、画像データ等)を格納するRTPパケットを送受信する。なお、本実施形態では、端末10−1から端末10−2に向けてパケットが送信される場合について説明する。
図4は、メディアゲートウェイ20の内部構成の一例を示す図である。図4を参照すると、メディアゲートウェイ20は、Megaco処理部201と、受信部202と、コーデックスルー処理部203と、コーデック変換部204と、送信部205と、記憶部206と、を含んで構成される。なお、メディアゲートウェイ20を構成する各要素は、メディアゲートウェイ20に搭載されたコンピュータに、そのハードウェアを用いて、後に詳述する処理を実行させるコンピュータプログラムにより実現することもできる。
Megaco処理部201は、MGC&CSCF30から送信されてくる制御情報を処理する手段である。Megaco処理部201には、MGC&CSCF30に対するインターフェイスとなるMegacoI/F部301と、RTPセッション情報管理部302と、が含まれる。
RTPセッション情報管理部302は、MGC&CSCF30から受信した制御情報に応じて(同期して)、RTPセッション情報を生成し、記憶部206に格納する。RTPセッション情報管理部302は、自装置(メディアゲートウェイ20)を基準として受信側と送信側それぞれのRTPセッション情報を生成する。なお、端末10−1とメディアゲートウェイ20の間に形成されるセッションであって、端末10−1から受信するパケットが属するセッションを受信側セッションとすれば、メディアゲートウェイ20から端末10−2の間に形成されるセッションであってメディアゲートウェイ20から送信されるパケットが属するセッションが送信側セッションとなる。
生成されるRTPセッション情報には、少なくとも、Megacoにより指定される送信元及び宛先IPアドレス、送信元及び宛先ポート番号、RTP情報(例えば、ペイロードタイプ、送信元ID(SSRC))、メディア情報(例えば、コーデック情報)が含まれる。
図5は、RTPセッション情報の一例を示す図である。図5に示す受信側セッション情報における「MGWアドレス」は、端末10からRTPパケットを受信する場合の宛先IPアドレスが設定される。また、受信側セッション情報における「対向アドレス」は、RTPパケットを送信する端末10の送信元IPアドレスが設定される。
同様に、送信側セッション情報における「MGWアドレス」は、端末10へRTPパケットを送信する場合の送信元IPアドレスが設定される。送信側セッション情報における「対向アドレス」は、RTPパケットを送信する端末10の宛先IPアドレスが設定される。
「MGWポート」及び「対向ポート」も同様であり、送信元ポート番号と宛先ポート番号が適宜設定される。
RTPセッション情報管理部302は、MGC&CSCF30から送信される制御情報に応じて、図5に示すRTPセッション情報を生成し、記憶部206に格納する。また、RTPセッション情報管理部302は、受信側セッション情報と送信側セッション情報を1組として、セッション番号を用いて管理可能に構成する。
受信部202は、端末10から送信されてくるRTPパケットを処理する手段である。受信部202は、受信パケットに付与されたIPアドレス、ポート番号、RTPヘッダ情報を参照し、当該受信パケットに対応するRTPセッション情報を記憶部206に格納されたRTPセッション情報のなかから検索する。
受信部202は、検索したRTPセッション情報に基づき、受信パケット(RTPパケット)に内部的なヘッダを付与することで、受信パケットを内部フォーマットAに変換する。内部フォーマットAの詳細は後述する。
受信部202は、コーデック変換が不要と判断された受信パケットを、コーデックスルー処理部203に出力する。受信部202は、コーデック変換が必要と判断された受信パケットを、コーデック変換部204に出力する。
受信部202は、受信処理部311と、パケット種別決定部312と、フォーマット変換部313と、受信側フラグメント情報管理部314と、チェックサム検証部315と、を含んで構成される。
受信処理部311は、端末10から送信されてくるパケット(RTPパケット)を受信するインターフェイスとなる。受信処理部311は、受信パケットをパケット種別決定部312に引き渡す。
パケット種別決定部312は、受信パケットのIPアドレス、ポート番号、RTPヘッダ情報に基づいて、当該受信パケットに対応するセッション情報を検索する。パケット種別決定部312は、検索結果と受信パケットのヘッダに応じて受信パケットの内部的な種別を決定する。具体的には、パケット種別決定部312は、受信パケットを以下の4種類の種別に振り分ける。
第1のパケット種別は、受信パケットがIPフラグメントされず送信され、且つ、RTPペイロードに格納されたマルチメディアデータ(以下単にデータと表記する)のコーデック変換が不要なパケットに与えられる。
第2のパケット種別は、受信パケットがIPフラグメントされた先頭のパケットであり、且つ、RTPペイロードに格納されたデータのコーデック変換が不要なパケットに与えられる。
第3のパケット種別は、受信パケットがIPフラグメントされた先頭のパケットに続く後続のパケットであり、且つ、RTPペイロードに格納されたデータのコーデック変換が不要なパケットに与えられる。
第4のパケット種別は、IPフラグメントの有無に関わらず、RTPペイロードに格納されたデータのコーデック変換が必要なパケットに与えられる。
パケット種別決定部312は、受信パケットがIPフラグメントされているか否かに関し、受信パケットのIPヘッダを参照することで決定する(図6参照)。
パケット種別決定部312は、RTPペイロードに格納されたデータのコーデック変換の要否に関し、検索されたセッション情報のメディア情報フィールドを参照することで決定する。例えば、図5を参照すると、セッション番号0x0001に属するパケットは、受信側と送信側とで同じコーデック(CodecA)を用いて処理されることが判明する。
パケット種別決定部312は、受信パケットが属するセッション番号におけるメディア情報フィールドの値が受信側と送信側で一致していれば、当該受信パケットにはコーデック変換は不要と判断する。一方、図5に示すセッション番号0x0003のように、受信側と送信側とで異なるコーデック(CodecA、CodecB)が使用される場合には、パケット種別決定部312は、当該受信パケットにはコーデック変換が必要と判断する。
パケット種別決定部312は、受信パケットが第1〜第3のパケット種別に該当する場合には、当該受信パケットをフォーマット変換部313に引き渡す。
パケット種別決定部312は、受信パケットが第4のパケット種別に該当する場合には、受信パケットを内部フォーマットAに変換する必要がないので、コーデック変換部204に出力する。
パケット種別決定部312は、受信パケットが第2又は第3のパケット種別(IPフラグメント化されたパケット)に該当する場合には、当該受信パケットをフォーマット変換部313に加えて、受信側フラグメント情報管理部314に引き渡す。なお、パケット種別決定部312は、受信パケットをフォーマット変換部313や受信側フラグメント情報管理部314に引き渡す際には、先に検索した受信パケットに対応するセッション番号を付帯情報として併せて通知する。
フォーマット変換部313は、受信パケットのフォーマットを内部フォーマットAに変換する手段である。フォーマット変換部313は、受信パケットをパケット種別ごとに異なる内部フォーマットAに変換する。具体的には、フォーマット変換部313は、第1のパケット種別に係る受信パケットを内部フォーマットA1に、第2のパケット種別に係る受信パケットを内部フォーマットA2に、第3のパケット種別に係る受信パケットを内部フォーマットA3に、それぞれ変換する。
図7は、内部フォーマットAの一例を示す図である。図7(a)が内部フォーマットA1、図7(b)が内部フォーマットA2、図7(c)が内部フォーマットA3にそれぞれ該当する。
図7(a)を参照すると、内部フォーマットA1は、受信パケット(RTPパケット)本来のRTPヘッダとRTPペイロードに加え、フォーマット(FMT)フィールド、セッション番号フィールドを有するフォーマットである。フォーマットフィールドには、内部フォーマットAに変換された受信パケットが内部フォーマットA1に相当することを識別する値が設定される。図7(a)では、フォーマットフィールドには「001」が設定されている。また、セッション番号には、記憶部206に格納されたRTPセッション情報から得られる値を設定する。
図7(b)を参照すると、内部フォーマットA2は、RTPヘッダとRTPペイロードに加え、フォーマットフィールド、セッション番号フィールド、送信元アドレスフィールド、フラグメントIDフィールド、フラグメントオフセットフィールド、Mフラグ、UDPチェックサム計算用フィールドを有するフォーマットである。フォーマットフィールドとセッション番号フィールドは、図7(a)に示す内部フォーマットA1の同種のフィールドであるため説明を省略する。
上記の内部フォーマットA2の各種フィールドのうち、フォーマットフィールド、セッション番号フィールド及びUDPチェックサム計算用フィールド以外のフィールドには、対応するRTPセッション情報又はIPヘッダから得られる値を格納する。
フォーマット変換部313は、UDPチェックサム計算用フィールドに設定する値を、先頭パケットのUDPチェックサムと、受信側のUDP擬似ヘッダ、UDPヘッダ及びRTPヘッダから計算する。即ち、フォーマット変換部313は、端末10−1から受信した先頭パケットに含まれ、符号化されたデータの正当性を検証するためのUDPチェックサムと、受信側セッション情報から得られる値と、に基づいてUDPチェックサム計算用フィールドに設定する値を計算する。具体的には、フォーマット変換部313は、先頭パケットに付与されたUDPチェックサムの1の補数に対して、UDP擬似ヘッダ、UDPヘッダ、RTPヘッダそれぞれの値を2バイトごとに減算し、UDPチェックサム計算用フィールドに設定する4バイトの値を計算する。
図7(c)を参照すると、内部フォーマットA3は、IPペイロードに加え、フォーマットフィールド、セッション番号フィールド、送信元アドレスフィールド、フラグメントIDフィールド、フラグメントオフセットフィールド、Mフラグ、全パケット受信判定フラグを有するフォーマットである。フォーマットフィールドとセッション番号フィールドは、図7(a)に示す内部フォーマットA1の同種のフィールドであるため説明を省略する。
上記の内部フォーマットA3の各種フィールドのうち、フォーマットフィールド、セッション番号及び全パケット受信判定フラグ以外のフィールドには、対応するRTPセッション情報又はIPヘッダから得られる値を格納する。フォーマット変換部313は、全パケット受信判定フラグに設定する値を、受信側フラグメント情報管理部314が生成する受信側フラグメント情報に基づいて決定する。全パケット受信判定フラグ及び受信側フラグメント情報の詳細は後述する。
受信側フラグメント情報管理部314は、受信側フラグメント情報を生成し、記憶部206に格納する。先頭パケットに続く後続パケットには、セッションを特定するために必要となるUDPポート番号が付与されていない。そのため、後続パケットが属するセッションを特定するための情報として受信側フラグメント情報が生成される。
受信側フラグメント情報管理部314は、第2のパケット種別に係る受信パケット(IPフラグメント化された先頭パケット)を入力するたびに、当該先頭パケットに対応する受信側フラグメント情報を生成する。また、受信側フラグメント情報管理部314は、第3のパケット種別に係る受信パケット(IPフラグメント化されたパケットのうちの後続パケット)を入力するたびに、先頭パケットの入力に応じて生成された受信側フラグメント情報の一部を更新する。
図8は、受信側フラグメント情報の一例を示す図である。図8を参照すると、受信側フラグメント情報は、送信元アドレスフィールド、フラグメントIDフィールド、変換フラグ、セッション番号フィールド、UDPレングスフィールド、UDPチェックサムフィールド、検証用UDPレングスフィールド、検証用UDPチェックサムフィールドを有する。
受信側フラグメント情報管理部314は、受信側フラグメント情報の各種フィールドのうち、セッション番号フィールドに関しては、受信パケットに対応するRTPセッション情報から得られる値を設定する。受信側フラグメント情報管理部314は、送信元アドレスフィールド、フラグメントIDフィールド、UDPレングスフィールド、UDPチェックサムフィールドに関しては、先頭パケットのIPヘッダ、UDPヘッダから得られる値を設定する。
受信側フラグメント情報管理部314は、UDPレングスフィールドに、先頭パケットに付与されたUDPレングス値を設定する。
受信側フラグメント情報管理部314は、UDPチェックサムフィールドに、先頭パケットに付与されたUDPチェックサム値を設定する。
受信側フラグメント情報管理部314は、変換フラグにはコーデック変換が不要(コーデックスルー)であることを明示する「0」を設定する。
受信側フラグメント情報管理部314は、検証用UDPレングスフィールドに、先頭パケットのIPペイロードサイズからフラグメントヘッダのバイト数を減算した値を設定する。検証用UDPレングスフィールドは、メディアゲートウェイ20にて端末10−1が送信する複数のパケットの受信が完了したか否かを検証するために設けられている。
受信側フラグメント情報管理部314は、検証用UDPチェックサムフィールドに、UDP擬似ヘッダ、UDPヘッダ及び先頭パケットに含まれるUDPペイロードの1の補数を2バイト単位で合計した値を設定する。検証用UDPチェックサムフィールドは、端末10−1から送信されてくる先頭パケットに含まれるUDPチェックサムの正当性を事後的に検証するために設けられる。
受信側フラグメント情報管理部314は、第3のパケット種別に係る受信パケット(後続パケット)を入力するたびに検証用UDPレングスフィールド及び検証用UDPチェックサムフィールドを更新する。
チェックサム検証部315は、端末10−2に送信する先頭パケットに付与したUDPチェックサム値と、検証用UDPチェックサムに所定の演算を施した結果得られる値と、を比較することで、受信した先頭パケットのUDPチェックサムの正当性を検証する手段である。
コーデックスルー処理部203は、コーデック変換が不要と判断された受信パケットを処理する手段である。コーデックスルー処理部203は、内部フォーマットAに変換された受信パケット(RTPパケット)に関し、パケット種別に応じて必要な処理を実行する。
コーデックスルー処理部203は、送信側フラグメント情報管理部321と、ヘッダ構築部322と、を含んで構成される。
送信側フラグメント情報管理部321は、送信側フラグメント情報を生成し、記憶部206に格納する。送信側フラグメント情報管理部321は、受信パケットがIPフラグメント化されたパケットである場合に、送信側フラグメント情報を生成し、記憶部206に格納する。
送信側フラグメント情報管理部321は、内部フォーマットA2に変換された受信パケットを入力した場合には、当該受信パケットのフラグメントIDとセッション番号を関連付けると共に送信用のフラグメントIDを付与する。
図9は、送信側フラグメント情報の一例を示す図である。図9を参照すると、例えば、0xaaaaaaaaのフラグメントID値と0x0001のセッション番号が関連付けられると共に、これらに対して送信側フラグメント情報に登録されていない(直近では使用されていない)0xbbbbbbbbの送信用フラグメントIDが付与されている。
ヘッダ構築部322は、内部フォーマットAに変換された受信パケットに付与するIPヘッダ、UDPヘッダ及びRTPヘッダを構築する手段である。その際、ヘッダ構築部322は、IPヘッダ等を受信パケットに付与すると共に、内部ヘッダを付与することで受信パケットを内部フォーマットBに変換する。
具体的には、ヘッダ構築部322は、内部フォーマットA1に変換されたパケットを内部フォーマットB1に、内部フォーマットA2に変換されたパケットを内部フォーマットB2に、内部フォーマットA3に変換されたパケットを内部フォーマットB3に、それぞれ変換する。
図10は、内部フォーマットBの一例を示す図である。図10(a)が内部フォーマットB1、図10(b)が内部フォーマットB2、図10(c)が内部フォーマットB3にそれぞれ該当する。
図10(a)を参照すると、内部フォーマットB1は、フォーマットフィールド、セッション番号フィールド、IPヘッダ、UDPヘッダ、RTPヘッダ、RTPペイロードを有するフォーマットである。
図10(b)を参照すると、内部フォーマットB2は、フォーマットフィールド、セッション番号フィールド、IPヘッダ、フラグメントヘッダ、UDPヘッダ、RTPヘッダ、RTPペイロードを有するフォーマットである。
図10(c)を参照すると、内部フォーマットB3は、フォーマットフィールド、セッション番号フィールド、IPヘッダ、フラグメントヘッダ、IPペイロードを有するフォーマットである。
内部フォーマットB1〜B3におけるフォーマットフィールドとセッション番号フィールドが内部ヘッダである。フォーマットフィールドとセッション番号フィールドは、対応する内部フォーマットAの値と同じである。
ヘッダ構築部322は、受信パケットを内部フォーマットA1から内部フォーマットB1に変換する際、記憶部206に格納されたRTPセッション情報から、当該受信パケットに対応するRTPセッション情報を検索する。具体的には、ヘッダ構築部322は、内部フォーマットA1のセッション番号フィールドに一致するRTPセッション情報を検索し、当該RTPセッション情報の送信側セッション情報に含まれる各フィールド値を取得する。
ヘッダ構築部322は、この送信側セッション情報に含まれる各フィールド値を用いて、端末10−1から受信したパケットに対応するパケットであって、端末10−2に送信するパケットのIPヘッダ、UDPヘッダ及びRTPヘッダを構築する。
ヘッダ構築部322は、受信パケットを内部フォーマットA2から内部フォーマットB2に変換する際にも、RTPセッション情報を検索し、当該RTPセッション情報の送信側セッション情報に含まれる各フィールド値を取得する。ヘッダ構築部322は、この送信側セッション情報に含まれる各フィールド値を用いて、端末10−1から受信した先頭パケットに対応するパケットであって、端末10−2に送信する先頭パケットのIPヘッダ、UDPヘッダ及びRTPヘッダを構築する。
なお、UDPヘッダを構築する際、UDPチェックサムが必要となる。しかし、先頭パケットを受信した段階では、先頭パケットに続く後続パケットの受信が行えていないので、正規のUDPチェックサムを計算することはできない。
そこで、ヘッダ構築部322は、内部フォーマットA2のUDPチェックサム計算用フィールドに設定された値と送信側セッション情報から得られる情報を用いて、送信パケットのUDPヘッダに設定するUDPチェックサムの予測値を生成する。具体的には、ヘッダ構築部322は、UDPヘッダに設定するUDPチェックサムを、内部フォーマットA2のUDPチェックサム計算用フィールドに設定されている値に送信側のUDP擬似ヘッダ、UDPヘッダ及びRTPヘッダの1の補数を加算することで計算する。ヘッダ構築部322により生成されたUDPチェックサムの予測値は、端末10-2にて、符号化されたデータの正当性を検証するためのチェックサムとして使用される。
ヘッダ構築部322は、受信パケットを内部フォーマットA3から内部フォーマットB3に変換する際にも、RTPセッション情報を検索し、当該RTPセッション情報の送信側セッション情報に含まれる各フィールド値を取得する。ヘッダ構築部322は、この送信側セッション情報に含まれる各フィールド値を用いて、IPヘッダを構築する。また、ヘッダ構築部322は、記憶部206に格納された送信側フラグメント情報を参照し、フラグメントヘッダを構築する。
コーデック変換部204は、受信パケット(RTPパケット)に対してコーデック変換が必要な場合に、RTPパケットのペイロードから得られるデータに対してコーデック変換を行い、変換後のデータを送信部205に出力する。
送信部205は、内部ヘッダ除去部331にて不要な内部ヘッダ(フォーマットフィールド、セッション番号フィールド)を除去し、送信処理部332によりIPパケットを端末10に向けて送信する。つまり、送信部205は、端末10−1から受信したパケットのペイロードに、ヘッダ構築部322により構築されたヘッダを付与したパケットを端末10−2に向けて送信する。
次に、第1のネットワークシステムの動作について説明する。
初めに、図11及び図12を参照しつつ、メディアゲートウェイ20が非フラグメントパケットを受信した際の動作について説明する。
図11において、端末10−1とメディアゲートウェイ20は、IPv6アドレス/ポート番号(X:X:X:10/20000、X:X:X:2/10000)を使用してRTPパケットの送受信を行うものとする。端末10−2とメディアゲートウェイ20は、IPv6アドレス/ポート番号(X:X:X:20/30000、X:X:X:2/10002)を使用してRTPパケットの送受信を行うものとする。
端末10−1からメディアゲートウェイ20宛てのRTPパケットのヘッダには、UDPチェックサムフィールドに0xaaaaが、IPv6ペイロードレングスに1000バイトが設定されているものとする。
メディアゲートウェイ20のMegaco処理部201では、上記のRTPパケットに対応するRTPセッション情報をセッション番号0x0001として管理するものとする(図5参照)。
ステップS101において、パケット種別決定部312は、受信したRTPパケットに付与されているIPv6アドレス、ポート番号、RTPペイロードタイプに一致するセッション情報を、記憶部206に記憶されているRTPセッション情報から検索する。この場合、図5に示すセッション番号0x0001が検索される。
受信パケットは非フラグメントパケットであって、且つ、受信側と送信側で同一のコーデックを利用するものであるから、パケット種別決定部312は、受信パケットの種別を第1のパケット種別とし、フォーマット変換部313に引き渡す。
ステップS102において、フォーマット変換部313は、受信パケットを内部フォーマットA1に変換する(図7(a)参照)。フォーマット変換部313は、フォーマットフィールドに001を、セッション番号フィールドに0x0001を設定し、受信パケットを内部フォーマットA1に変換する。なお、内部フォーマットA1のRTPヘッダとRTPペイロードは、受信パケットのRTPヘッダとRTPペイロードのとおりとする。内部フォーマットA1に変換された受信パケットはコーデックスルー処理部203に出力される。
ステップS103において、ヘッダ構築部322は、内部フォーマットA1に変換された受信パケットを内部フォーマットB1に変換する。ヘッダ構築部322は、記憶部206に格納されたRTPセッション情報を検索し、セッション番号0x0001に該当する送信側セッション情報を特定する。この場合には、図5のセッション番号0x0001の送信側セッション情報が特定される。
ヘッダ構築部322は、セッション番号0x0001の送信側セッション情報として格納されている値を用いてIPヘッダ、UDPヘッダ及びRTPヘッダを構築し、受信パケットを内部フォーマットB1に変換する。その際、ヘッダ構築部322は、RTPヘッダにおけるペイロードタイプ及びSSRCを、送信側セッション情報のペイロードタイプ及びSSRCに置き替える。
ヘッダ構築部322は、内部フォーマットB1に変換した受信パケットを送信部205に出力する。
ステップS104において、送信部205は、内部フォーマットB1の内部ヘッダ(フォーマットフィールド及びセッション番号)を除去し、RTPパケットとして端末10−2に送信する。
次に、図13〜図15を参照しつつ、3つに分割されたフラグメントパケットを受信した場合のメディアゲートウェイ20の動作について説明する。IPv6アドレス及びポート番号の設定とセッション情報については、図11に例示する場合と同様とする。
端末10−1からメディアゲートウェイ20宛てにIPフラグメント化されたRTPパケットの先頭パケットのオフセットフィールドには0x0000が、Mフラグには1が、フラグメントIDフィールドには0xaaaaaaaaが、UDPチェックサムフィールドには0x1234が、IPv6ペイロードレングスには1448バイトが、それぞれ設定されているとする。
後続パケットのオフセットフィールドには0x00b5が、Mフラグには1が、フラグメントIDフィールドには0xaaaaaaaaが、IPv6ペイロードレングスには1456バイトが、それぞれ設定されているとする。
最終パケットのオフセットフィールドには0x016aが、Mフラグには0が、フラグメントIDフィールドには0xaaaaaaaaが、IPv6ペイロードレングスには1008バイトが、それぞれ設定されているとする。
メディアゲートウェイ20のMegaco処理部201では、上記のRTPパケットに対応するRTPセッション情報をセッション番号0x0001として管理しているものとする(図5参照)。
<先頭パケットの受信>
初めに、先頭パケットを受信した場合のメディアゲートウェイ20の動作を、図14を参照しつつ説明する。
ステップS201において、パケット種別決定部312は、受信パケットに付与されているIPv6アドレス、ポート番号、RTPペイロードタイプに一致するセッション情報を、記憶部206に記憶されているRTPセッション情報から検索する。この場合、図5のセッション番号0x0001が検索される。
受信パケットはフラグメントパケットの先頭パケットであって、且つ、受信側と送信側で同一のコーデックを利用するものであるから、パケット種別決定部312は、受信パケットの種別を第2のパケット種別とし、フォーマット変換部313及び受信側フラグメント情報管理部314に引き渡す。
ステップS202において、受信側フラグメント情報管理部314は、後続パケットの属するセッションを特定するための受信側フラグメント情報を生成する。図13に示す例では、送信元アドレスフィールドにはX:X:X:10が、フラグメントIDフィールドには0xaaaaaaaaが、変換フラグには0が、セッション番号フィールドには0x0001が、UDPレングスフィールドには3888が、UDPチェックサムフィールドには0x1234が、検証用UDPレングスフィールドには1440が、検証用UDPチェックサムフィールドには0xXXXXが、それぞれ受信側フラグメント情報として生成される(図8参照)。
なお、UDPレングスフィールドに設定する値は先頭パケットに付与されたUDPレングスが用いられる。UDPチェックサムフィールドに設定する値は先頭パケットに付与されたUDPチェックサムが用いられる。
検証用UDPレングスフィールドに設定する値は、先頭パケットのIPv6ペイロードサイズからフラグメントヘッダのバイト数(8バイト)を減算することで算出される。検証用UDPレングスフィールドの値は、フラグメント化されたパケットの全てが到達したか否かの判断に使用される。
検証用UDPチェックサムフィールドに設定する値は、UDP擬似ヘッダ、UDPヘッダ及び先頭パケットに含まれるUDPペイロードの1の補数を2バイト単位で合計することで算出される。
ステップS203において、フォーマット変換部313は、受信パケットを内部フォーマットA2に変換する(図7(b)参照)。具体的には、フォーマット変換部313は、フォーマットフィールドには010、セッション番号フィールドには0x0001、送信元アドレスフィールドにはX:X:X:10、フラグメントIDフィールドには0xaaaaaaaa、フラグメントオフセットフィールドには0x0000、Mフラグには1を、それぞれ設定する。
また、フォーマット変換部313は、UDPチェックサム計算用フィールドに設定する値を、先頭パケットに付与されたUDPチェックサムと、受信側のUDP擬似ヘッダ、UDPヘッダ及びRTPヘッダと、から算出する。
より具体的には、フォーマット変換部313は、先頭パケットに付与されたUDPチェックサムの1の補数に対して、受信側のUDP擬似ヘッダ、UDPヘッダ、RTPヘッダそれぞれの値を2バイトごとに減算し、4バイトのUDPチェックサム計算用フィールドに設定する値を計算する。図13に示す例では、UDPチェックサム計算用フィールドに設定する値として0xAAAAが計算されたものとする。
なお、フォーマット変換部313は、内部フォーマットA2のRTPヘッダとRTPペイロードは、受信したRTPパケットのRTPヘッダとRTPペイロードのとおりとする。
内部フォーマットA2に変換された受信パケットは、コーデックスルー処理部203に出力される。
ステップS204において、送信側フラグメント情報管理部321は、内部フォーマットA2に変換された受信パケットを入力したので、送信側フラグメント情報を生成し、記憶部206に格納する(図9参照)。
ステップS205において、ヘッダ構築部322は、内部フォーマットA2に変換された受信パケットを内部フォーマットB2に変換する。図13に示す例では、送信元アドレスにはX:X:X:2が、宛先アドレスにはX:X:X:20が、フラグメントID値には0xbbbbbbbbが、送信元ポート番号には10002が、宛先ポート番号には30000が、UDPチェックサム値には0x5678が、RTPペイロードタイプ値=102が、SSRC値にはxxx@xxxが、それぞれ用いられ、IPヘッダ、フラグメントヘッダ、UDPヘッダ及びRTPヘッダが構築される。上記以外のフィールド値については、内部フォーマットA2の各フィールド値がそのまま使用される。
ヘッダ構築部322は、内部フォーマットA2のUDPチェックサム計算用フィールドに設定されている値(図13の例では0xAAAA)に送信側のUDP擬似ヘッダ、UDPヘッダ及びRTPヘッダ(8バイト)の1の補数を2バイト単位で加算することで、4バイトのUDPチェックサム値(図13の例では0x5678)を得る。
ヘッダ構築部322は、送信側フラグメント情報を参照することで、フラグメントID値として0xbbbbbbbbをフラグメントヘッダに設定する。
ヘッダ構築部322は、内部フォーマットB2に変換した受信パケットを送信部205に出力する。
ステップS206において、送信部205は、内部フォーマットB2の内部ヘッダ(フォーマットフィールド及びセッション番号)を除去し、RTPパケットとして端末10−2に送信する。なお、UDPヘッダのUDPチェックサムフィールドには3つのIPパケットにフラグメント化されたパケットを受信して算出したチェックサムではなく、先頭パケットのUDPチェックサムから予測されたUDPチェックサムが設定されている。
<後続パケットの受信>
次に、後続パケットを受信した場合のメディアゲートウェイ20の動作を、図15を参照しつつ説明する。
ステップS301において、パケット種別決定部312は、受信パケットに付与されているIPv6アドレス、ポート番号、RTPペイロードタイプに一致するセッション情報を、記憶部206に記憶されているRTPセッション情報から検索する。この場合、図5のセッション番号0x0001が検索される。
受信パケットはフラグメントパケットの後続パケットであって、且つ、受信側と送信側で同一のコーデックを利用するものであるから、パケット種別決定部312は、受信パケットの種別を第3のパケット種別とし、フォーマット変換部313及び受信側フラグメント情報管理部314に引き渡す。
ステップS302において、受信側フラグメント情報管理部314は受信側フラグメント情報を更新する。後続パケットにはUDPポート番号が付与されていない。そこで、受信側フラグメント情報管理部314は、記憶部206を検索し、先頭パケットを受信した際に生成された受信側フラグメント情報の中に、受信パケットの送信元アドレスとフラグメントIDが一致する受信側フラグメント情報が存在するか否かを確認する。
受信側フラグメント情報を検索すると、受信した後続パケットの送信元アドレス(X:X:X:10)とフラグメントID(0xaaaaaaaa)に一致する受信側フラグメント情報が発見される(図8の1段目)。
受信側フラグメント情報管理部314は、受信側フラグメント情報を構成する各種フィールドのうち検証用UDPレングスフィールドと検証用UDPチェックサムフィールドを、受信パケット(後続パケット)から算出する値に更新する。具体的には、受信側フラグメント情報管理部314は、既に検証用UDPレングスフィールドに設定されている値に、後続パケットのIPv6ペイロードサイズからフラグメントヘッダのバイト数(8バイト)を減算した値を加算することで、検証用UDPレングスフィールドの値を更新する。
図13の例では、既に設定されている1440に1448(1456−8)を加算することで、検証用UDPレングスフィールドの値が更新される。
また、受信側フラグメント情報管理部314は、既に検証用UDPチェックサムフィールドに設定されている値に、後続パケットのIPペイロード値の1の補数を2バイト単位で加算することで、検証用UDPチェックサムフィールドを更新する。図13の例では、検証用UDPチェックサムフィールドの値は0xYYYYに更新される。
ステップS303において、フォーマット変換部313は、受信パケットを内部フォーマットA3に変換する(図7(c)参照)。具体的には、フォーマット変換部313は、フォーマットフィールドには100、セッション番号フィールドには0x0001、送信元アドレスフィールドにはX:X:X:10、フラグメントIDフィールドには0xaaaaaaaa、フラグメントオフセットフィールドには0x00b5、Mフラグには1、全パケット受信判定フラグには0(未受信パケットあり)を、それぞれ設定する。
フォーマット変換部313は、受信パケットを内部フォーマットA3に変換する際に、受信側セッション情報を参照し、UDPレングスフィールドの値と検証用UDPレングスの値が同じか否かに応じて、未受信パケットの有無を判定する。具体的には、UDPレングスフィールドの値と検証用UDPレングスフィールドの値が不一致であれば、フォーマット変換部313は未受信パケットありと判定し、全パケット受信判定フラグに0を設定する。
一方、UDPレングスフィールドの値と検証用UDPレングスフィールドの値が一致すれば、フォーマット変換部313は未受信パケットなしと判定し、全パケット受信判定フラグに1を設定する。
内部フォーマットA3に変換された受信パケットは、コーデックスルー処理部203に出力される。
ステップS204において、ヘッダ構築部322は、内部フォーマットA3に変換された受信パケットを内部フォーマットB3に変換する。その際、ヘッダ構築部322は、内部フォーマットA3に変換された受信パケットに付与されたセッション番号を用いて、RTPセッション情報を検索し、対応する送信側セッション情報を特定する。図13に示す例では、図5のセッション番号0x0001に対応する送信側セッション情報が特定される。
続いて、ヘッダ構築部322は、特定された送信側セッション情報を用いて、内部フォーマットA3から内部フォーマットB3へ受信パケットを変換する。図13に示す例では、セッションIDには0x0001が、送信元アドレスにはX:X:X:2が、宛先アドレスにはX:X:X:20が、フラグメントID値には0xbbbbbbbbが、オフセット値には0x00b5が、Mフラグには1が、それぞれ用いられ、IPヘッダ、フラグメントヘッダが構築される。
なお、フラグメントID値は、内部フォーマットA3に付与されているセッション番号とフラグメントIDをキーとして、送信側フラグメント情報を検索することで得られる(図9参照)。
ヘッダ構築部322は、内部フォーマットB3に変換した受信パケットを送信部205に出力する。
ステップS305において、送信部205は、内部フォーマットB3の内部ヘッダ(フォーマットフィールド及びセッション番号)を除去し、RTPパケットとして端末10−2に送信する。
<最終パケットの受信>
次に、最終パケットを受信した場合のメディアゲートウェイ20の動作について説明する。
最終パケットにもUDPポート番号が付与されていない。従って、最終パケットを受信すると、メディアゲートウェイ20は、後続パケットと同様に受信側フラグメント情報の更新処理と内部フォーマットA3への変換処理を行う。そのため、最終パケットを受信した際のメディアゲートウェイ20の動作に関しては、後続パケットの受信時の動作と異なる点を中心に説明する。
受信側フラグメント情報管理部314は、最終パケットの受信を受けて受信側フラグメント情報の更新を行う。受信側フラグメント情報管理部314は、検証用UDPレングスフィールドに設定されている2888に1000(1008−8)を加算することで、検証用UDPレングスフィールドの値を更新する。
受信側フラグメント情報管理部314は、既に検証用UDPチェックサムフィールドに設定されている値に、後続パケットのIPペイロード値の1の補数を2バイト単位で加算することで、検証用チェックサムフィールドを更新する。図13の例では、検証用UDPチェックサムフィールドの値は0xEDCBに更新される。
フォーマット変換部313は、受信パケット(最終パケット)のフォーマットを変換する。具体的には、フォーマット変換部313は、フォーマットフィールドには100、セッション番号フィールドには0x0001、送信元アドレスフィールドにはX:X:X:10、フラグメントIDフィールドには0xaaaaaaaa、フラグメントオフセットフィールドには0x016a、Mフラグには0、全パケット受信判定フラグには1(全パケット受信)を、それぞれ設定する。
フォーマット変換部313は、受信側フラグメント情報を確認すると、UDPレングスフィールドの値と検証用UDPレングスフィールドの値が一致するので、全パケット受信(未受信パケットなし)と判定し、全パケット受信判定フラグに1を設定する。
チェックサム検証部315は、受信側フラグメント情報のUDPチェックサムフィールドの値と検証用UDPチェックサムフィールドの値の1の補数値と、を比較する。比較した結果、同値であれば、チェックサム検証部315は一連のIPフラグメント化されたIPパケットのチェックサム値は正常であると判定する。なお、異常の場合は、チェックサム検証部315は、ログに残す等の対処を行う。
図13の例では、検証用UDPチェックサムフィールドの最終的な値は0xEDCBであり、UDPチェックサムフィールドの1の補数となっている。そのため、IPフラグメント化されたIPパケットのチェックサムは正常であると判断される。チェックサムが正常である場合には、チェックサム検証部315はその旨を受信側フラグメント情報管理部314に通知する。受信側フラグメント情報管理部314は、該当する受信側フラグメント情報を記憶部206から削除する。
内部フォーマットA3に変換された受信パケットは、コーデックスルー処理部203に出力される。ヘッダ構築部322は、内部フォーマットA3から内部フォーマットB3へ最終パケットを変換する。図13に示す例では、セッションIDには0x0001が、送信元アドレスにはX:X:X:2が、宛先アドレスにはX:X:X:20が、フラグメントID値には0xbbbbbbbbが、オフセット値には0x016aが、Mフラグには0が、それぞれ用いられ、IPヘッダ、フラグメントヘッダが構築される。その後、送信部205から内部ヘッダが除去された最終パケットが送信される。
以上、図11〜図15を参照しつつ、メディアゲートウェイ20のコーデックスルーに係る動作を説明した。メディアゲートウェイ20が、コーデック変換を要するパケットを受信した場合には、コーデック変換部204にてコーデック変換が行われ、送信パケットが生成される。生成された送信パケットは送信部205を介して端末10に送信される。
なお、特許文献1が開示する技術では、フラグメント化されたパケットに対する考慮がなく、仮に特許文献1が開示する技術をフラグメント化されたパケットに対応するならば、デフラグメント処理を行う必要がある。一方、第1の実施形態に係るメディアゲートウェイ20では、デフラグメント処理を行うことなく、フラグメント化されたパケットを端末10に転送することができる。
また、特許文献2が開示する技術は、パケットのバッファリングを行わないことでフラグメント転送処理の低遅延化を実現するものである。その際、全てのフラグメントパケットを受信した後にUDPチェックサムの計算を行い、先頭パケットに付与している。従って、特許文献2が開示する技術では、フラグメント化されたパケットを低遅延で端末10に転送することができない。
第1の実施形態では、メディアゲートウェイを例に取り、フラグメント化されたパケットの転送について説明したが、メディアゲートウェイに限定されず、Megaco設定によりフラグメントパケットを転送するような装置であれば同様の動作が実現できる。
以上のように、第1の実施形態に係るメディアゲートウェイでは、RTPパケットのコーデック変換を行う場合(コーデック終端時;図16参照)には、端末10から受信したパケットのコーデックを変換し、他の端末10に送信する。一方、コーデック変換が不要な場合(コーデックスルー時;図17参照)には、端末10から受信したパケットのペイロードには何らの処理を施すことなく、MGC&CSCF30により設定される制御情報に基づき、他の端末10に送信するヘッダを構築し、他の端末10に送信する。
その結果、符号化されたマルチメディアデータが複数のパケットに分割されて転送される場合であっても、分割されたパケットの受信を待つことがないので、メディアゲートウェイ20は他の端末にパケットを低遅延にて転送できる。また、メディアゲートウェイ20は、先頭パケットを送信した後に、検証用UDPチェックサムを用いて受信したデータの正当性を検証しているので、提供するサービスの信頼性が低下することもない。さらに、メディアゲートウェイ20は、パケットのバッファリングを要せず、パケットを中継するという簡易な処理(簡易な実装)で実現できるコーデックスルーを実現できる。
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
[付記1]
第1及び第2端末間で送受信されるパケットを伝送するための制御情報に基づき、前記第1端末と自装置の間に形成されるセッションに関する第1セッション情報と前記第2端末と自装置の間に形成されるセッションに関する第2セッション情報を1組とするセッション情報を生成する生成部と、
符号化されたマルチメディアデータが複数のパケットに分割されて送信され、前記複数のパケットのうちの先頭パケットを前記第1端末から受信し、且つ、前記第2端末にて前記符号化されたマルチメディアデータが復号される場合に、前記第1端末から受信した先頭パケットに対応するパケットであって、前記第2端末に送信する先頭パケットのヘッダを、少なくとも前記セッション情報に基づき構築するヘッダ構築部と、
前記第1端末から受信した先頭パケットのペイロードに前記構築されたヘッダを付与したパケットを前記第2端末に向けて送信する送信部と、
を備える通信装置。
[付記2]
前記第1端末から受信した先頭パケットに含まれ、前記符号化されたマルチメディアデータの正当性を検証するための第1チェックサムと前記第1セッション情報に基づいて、計算用チェックサムを計算する計算部をさらに備え、
前記ヘッダ構築部は、前記計算用チェックサムと前記第2セッション情報に基づいて、前記第2端末に送信する先頭パケットに含まれ、前記符号化されたマルチメディアデータの正当性を検証するための第2チェックサムを生成する、付記1の通信装置。
[付記3]
前記計算部は、前記第1セッション情報から前記第1チェックサムの生成に使われる第1ヘッダ情報を取得し、前記第1チェックサムの値から前記第1ヘッダ情報に係る値を減算することで、前記計算用チェックサムを計算し、
前記ヘッダ構築部は、前記計算用チェックサムの値に、前記第2セッション情報から得られるヘッダ情報であって、前記第1ヘッダ情報と同種の第2ヘッダ情報に係る値を加算することで、前記第2チェックサムを生成する、付記2の通信装置。
[付記4]
前記第1端末から先頭パケットを受信することに応じて、前記第1端末から送信される先頭パケットに続く後続パケットが属するセッションを特定するためのフラグメント情報を生成するフラグメント情報生成部をさらに備える、付記3の通信装置。
[付記5]
前記フラグメント情報には、
前記第1端末から受信した先頭パケットの少なくともペイロードサイズから算出され、且つ、自装置にて前記第1端末が送信する前記複数のパケットの受信が完了したか否かを検証するための検証用レングスが少なくとも含まれる、付記4の通信装置。
[付記6]
前記フラグメント情報には、前記第1チェックサムの正当性を事後的に検証するための検証用チェックサムが含まれ、
前記フラグメント情報生成部は、
前記第1端末から先頭パケットを受信した場合に、前記第1ヘッダ情報に係る値と前記第1端末から受信した先頭パケットのペイロードから算出した値を前記検証用チェックサムとし、
前記第1端末から送信される先頭パケットに続く後続パケットを受信した場合に、前記後続パケットのペイロードの値と前記検証用チェックサムの値を加算することで、前記検証用チェックサムを更新する、付記4又は5の通信装置。
[付記7]
前記第2チェックサムと、前記検証用チェックサムに所定の演算を施した結果と、を比較することで、前記第1チェックサムの正当性を検証する検証部をさらに備える付記6の通信装置。
[付記8]
前記第1セッション情報には、前記第1端末におけるマルチメディアデータの符号化方式に関する情報が含まれ、
前記第2セッション情報には、前記第2端末における符号化されたマルチメディアデータの復号化方式に関する情報が含まれ、
前記第1セッション情報に含まれる符号化方式と前記第2セッション情報に含まれる復号化方式を比較することで、自装置での符号化方式を変換する必要があるか否かを判定する判定部をさらに備える付記1乃至7のいずれか一に記載の通信装置。
[付記9]
第1及び第2端末間で送受信されるパケットを伝送するための制御情報に基づき、前記第1端末と自装置の間に形成されるセッションに関する第1セッション情報と前記第2端末と自装置の間に形成されるセッションに関する第2セッション情報を1組とするセッション情報を生成する工程と、
符号化されたマルチメディアデータが複数のパケットに分割されて送信され、前記複数のパケットのうちの先頭パケットを前記第1端末から受信し、且つ、前記第2端末にて前記符号化されたマルチメディアデータが復号される場合に、前記第1端末から受信した先頭パケットに対応するパケットであって、前記第2端末に送信する先頭パケットのヘッダを、少なくとも前記セッション情報に基づき構築する工程と、
前記第1端末から受信した先頭パケットのペイロードに前記構築されたヘッダを付与したパケットを前記第2端末に向けて送信する工程と、
を含む通信方法。
[付記10]
第1及び第2端末間で送受信されるパケットを伝送するための制御情報に基づき、前記第1端末と自装置の間に形成されるセッションに関する第1セッション情報と前記第2端末と自装置の間に形成されるセッションに関する第2セッション情報を1組とするセッション情報を生成する処理と、
符号化されたマルチメディアデータが複数のパケットに分割されて送信され、前記複数のパケットのうちの先頭パケットを前記第1端末から受信し、且つ、前記第2端末にて前記符号化されたマルチメディアデータが復号される場合に、前記第1端末から受信した先頭パケットに対応するパケットであって、前記第2端末に送信する先頭パケットのヘッダを、少なくとも前記セッション情報に基づき構築する処理と、
前記第1端末から受信した先頭パケットのペイロードに前記構築されたヘッダを付与したパケットを前記第2端末に向けて送信する処理と、
を通信装置を制御するコンピュータに実行させるプログラム。
なお、付記9の形態及び付記10の形態は、付記1の形態と同様に、付記2の形態〜付記8の形態に展開することが可能である。
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。