【文献】
大津 繁樹,HTTP/2の最新動向,電子情報通信学会誌 第97巻 第8号,日本,一般社団法人電子情報通信学会,2014年 8月 1日,第97巻 第8号,727〜733
【文献】
桐生 直輝,SPDYを用いたHTTPのセッション管理方式の提案と実装,2014年 暗号と情報セキュリティシンポジウム SCIS2014 [CD−ROM] 2014年 暗号と情報セキュリティシンポジウム概要集,電子情報通信学会情報セキュリティ研究専門委員会(ISEC研),2014年 1月24日,1〜8
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
以下、本発明の実施形態について図面に基づいて説明する。
【0009】
<実施形態1>
図1は、通信システムのシステム構成の一例を示す図である。
通信システムは、ネットワーク100を介して、通信装置101とサーバ102とが通信可能に接続されている。本実施形態におけるネットワーク100は、インターネット、WAN(Wide Area Network)、LAN(Local Area Network)等の複合であってもよい。
通信装置101は、ネットワーク100を通じて、サーバ102とHTTP/1.1及びHTTP/2通信を行う。通信装置101の一例としては、例えば、デジタルカメラ等である。但し、このことは本実施の形態を制限するものではない。通信装置101は、接続要求元の通信装置、第1の通信装置の一例である。また、サーバ102は、接続先の通信装置、第2の通信装置の一例である。
【0010】
図2は、通信装置等のハードウェア構成の一例を示す図である。
より具体的説明すると、
図2(a)は、通信装置101のハードウェア構成の一例を示す図である。
図2(b)は、サーバ102のハードウェア構成の一例を示す図である。
図2(a)に示されるように、通信装置101は、ハードウェア構成として、CPU10と、メモリ11と、HD12と、ネットワーク制御装置13と、操作表示装置14と、撮像装置15と、を含む。そして、これらのハードウェア構成が、バス16を介して接続されている。
CPU10は、通信装置101の全体を制御する制御部である。CPU10が、メモリ11又はHD12等に記憶されているプログラムに基づき処理を実行することによって、後述する通信装置101のソフトウェア構成及び通信装置101のフローチャートの処理が実現される。メモリ11は、ブートプログラムや、CPU10が処理を実行する際に利用する予め定められたデータ等を記憶する。HD12は、プログラムやCPU10が処理を実行する際に利用するデータ、画像データ等を記憶する。ネットワーク制御装置13は、通信装置101をネットワーク100に接続し、CPU10の制御に基づき、ネットワーク100を介した他の装置との通信を制御する。操作表示装置14は、CPU10の制御に基づき、画像データ等を表示したり、ユーザ操作を受け付け、受け付けた操作に係る操作情報をCPU10に通知したりする。撮像装置15は、CPU10の制御に基づき、撮像を制御する。尚、
図2(a)のハードウェア構成は、通信装置101をデジタルカメラとした場合の一例である。
【0011】
また、
図2(b)に示されるように、サーバ102は、ハードウェア構成として、CPU20と、メモリ21と、HD22と、ネットワーク制御装置23と、表示装置24と、入力装置25と、を含む。そして、これらのハードウェア構成が、バス26を介して接続されている。
CPU20は、サーバ102の全体を制御する制御部である。CPU20が、メモリ21又はHD22等に記憶されているプログラムに基づき処理を実行することによって、後述するサーバ102のソフトウェア構成及びサーバ102のフローチャートの処理が実現される。メモリ21は、ブートプログラムや、CPU20が処理を実行する際に利用する予め定められたデータ等を記憶する。HD22は、プログラムやCPU20が処理を実行する際に利用するデータ等を記憶する。ネットワーク制御装置23は、サーバ102をネットワーク100に接続し、CP210の制御に基づき、ネットワーク100を介した他の装置との通信を制御する。表示装置24は、CPU20の制御に基づき、データを表示する。入力装置25は、ユーザ操作を受け付け、受け付けた操作に係る操作情報をCPU20に通知する。
【0012】
図3は、通信装置101のソフトウェア構成の一例を示す図である。
通信部201は、TCP/IP処理、及び、TLS(Transport Layer Security)処理を行う。
表示部202は、接続完了や接続エラーの表示を行う。表示部202は、操作表示装置14を用いて表示を行う。通信装置101は、接続完了や接続エラーを表示してもよいし、これに限らず、イベント情報をユーザに音や振動等で通知してもよい。
データ保存部203は、サーバの識別子に関連付けられた設定情報(後述する
図8を参照)をHD12等に保持、管理する。本実施形態では、
図8に示されるような情報を通信装置101内で保持するものとして説明を行う。しかし、これに限らず、通信装置101は、ネットワークを介した別の装置上に登録されている情報を参照等、利用するようにしてもよい。サーバの識別子は、接続先の通信装置(サーバ)を識別する識別情報の一例である。
設定部204は、データ保存部203で保持している設定情報に基づき通信のパラメータを設定する。
判断部205は、指定された識別子に応じて保持している設定情報の設定を行うか否かを判断する。更に、判断部205は、セキュリティ通信の有無、設定フェーズをスキップできるか否か等を判断する。
【0013】
通信手順切り替え部206は、HTTP/1.1とHTTP/2との通信を切り替える。
通信手順スキップ部207は、通信開始時のハンドシェイク及び設定の手順をスキップする。
選択部208は、HTTP/1.1とHTTP/2とからプロトコルを選択する。
入力部209は、URI、IPアドレス及びポート番号、Session−ID等の識別子の入力を行う。入力部209は、操作表示装置14等に表示されたUIを介したユーザ操作に応じて、識別子を入力してもよいし、NFCやBluetooth(登録商標)等を用いて他の装置等より取得された識別子を入力してもよい。また、入力部209は、通信装置101のアプリケーション等が記憶している識別子をアプリケーション等より受け取り、入力してもよい。
本実施形態では、プロトコルとしてHTTP/1.1とHTTP/2とを例にあげて説明するが、これに限らず、SPDY、QUICであってもよいし、その他の異種のプロトコル間の切り替えであってもよい。HTTP/1.1は、第
2の通信プロトコルの一例である。HTTP/2は、第
1の通信プロトコルの一例である。
【0014】
図4は、サーバ102のソフトウェア構成の一例を示す図である。
通信部801は、TCP/IP処理、及び、TLS(Transport Layer Security)処理を行う。
応答部802は、通信切り替えに対する受領メッセージを送信する。応答部802は、通信の切り替え方法がClient connection prefaceである場合、HTTP 200 OKを送信する。また、応答部802は、通信の切り替え方法がHTTP/1.1 Upgrade headerである場合、HTTP 101 Switching Protocolsを送信する。応答部802は、通信の切り替え方法がTLS ALPNフィールド付きのClient Helloである場合、TLS ALPN付きServer Helloを送信する。
データ保存部803は、識別子に関連付けられた設定情報をHD22等に保持、管理する。本実施形態では、設定情報等をサーバ102内で保持するものとして説明を行う。しかし、これに限らず、サーバ102は、ネットワークを介した別の装置上に保持されている設定情報を参照等、利用するようにしてもよい。
設定部804は、データ保存部803で保持している設定情報に基づき通信のパラメータを設定する。
【0015】
判断部805は、指定された識別子に応じて保持している設定情報の設定を行うか否かを判断する。更に、判断部805は、セキュリティ通信の有無や、設定フェーズをスキップできるか否かを判断する。
通信手順切り替え部806は、HTTP/1.1とHTTP/2との通信を切り替える。
通信手順スキップ部807は、通信開始時のハンドシェイク及び設定の手順をスキップする。
選択部808は、HTTP/1.1とHTTP/2とからプロトコルを選択する。
入力部809は、URI、IPアドレス及びポート番号、Session−ID等の識別子の入力を行う。入力部809は、入力装置25等に表示されたUIを介したユーザ操作に応じて、識別子を入力してもよいし、NFCやBluetooth等を用いて他の装置等より取得された識別子を入力してもよい。また、入力部809は、アプリケーション等が記憶している識別子をアプリケーション等から受け取り、入力してもよい。
【0016】
図5は、通信装置101がサーバ102と通信を開始する際の情報処理の一例を示すフローチャートである。
S301において、入力部209は、ユーザ、又は、アプリケーションから識別子を受け付け、入力し、S302に進む。ここでの識別子とは、URI、IPアドレス及びポート番号、Session−ID、その他、通信相手であるサーバ102を識別するための情報である。
S302において、判断部205は、入力された識別子から、通信処理のハンドシェイク及び設定等の処理のスキップを行うか否かの判断を行う。判断部205は、指定された識別子が
図8に示すようなテーブルに含まれているかを確認し、含まれている場合、前記処理をスキップすると判断し(S302においてYes)、S303に進む。一方、判断部205は、指定された識別子が前記テーブルに含まれていない場合、前記処理はスキップしないと判断し(S302においてNo)、S312に進む。
【0017】
S303において、判断部205は、セキュリティ通信ありの通信であるか、セキュリティ通信なしの通信であるかを確認する。本実施形態では、識別子に紐付けて、セキュリティ通信ありかなしが予め設定されているものとする。これに限らず、例えば、TLSを利用するように明示された場合に、判断部205は、セキュリティ通信ありと判断してもよい。識別子の他に、識別子と対応付けてTLS通信を行うか否かを示す情報が設定されていてもよいし、TLS通信を行うか否かを示す情報が識別子に含まれる形であってもよい。本実施形態におけるセキュリティ通信とはTLSのことを示しており、別のレイヤのセキュリティ通信(例えば、IPsecや無線の暗号化等)は含んでいない。判断部205は、セキュリティ通信ありであると判断すると(S303においてYes)、S305に進み、セキュリティ通信なしであると判断すると(S303においてNo)、S304に進む。
S304において、通信部201は、サーバ102にTCP接続を開始し、S306に進む。
一方、S305において、通信部201は、サーバ102にTLS接続を開始し、S306に進む。
S306において、通信手順スキップ部207は、サーバ102にHTTP/2通信を開始するためにClient connection prefaceを送信する。通信手順スキップ部207は、HTTP/1.1からHTTP/2にアップグレードを行うための通信手順をスキップしている。Client connection prefaceは、第
1の通信プロトコルによる接続開始要求の一例である。
【0018】
S307において、判断部205は、サーバ102から、Client connection prefaceの受け付けを完了したメッセージ(例えば、HTTP 200 OK)を受信したか否かを確認する。判断部205は、受け付けを完了したメッセージを受け付けた場合(S307においてYes)、S310に進む。HTTP 200 OKは、接続開始応答の一例である。判断部205は、受け付けエラーメッセージ(例えば、Internal Server ErrorやHTTP Bad Request等)を受け付けた場合(S307においてNo)、S308に進む。
S308において、判断部205は、通信途中にプロトコルを変更できる機能があるか否かを判断する。判断部205は、通信途中にプロトコルを変更できる機能があると判断すると(S308においてYes)、S309に進み、通信途中にプロトコルを変更できる機能が無いと判断すると(S308においてNo)、S316に進む。
S309において、判断部205は、TCP又はTLSの接続を切断した上で、S312に進む。
一方、S310において、設定部204は、
図8に示す設定情報を適用し、S311に進む。
S311において、通信手順スキップ部207は、SETTINGSフレームによる通信情報の設定のフェーズをスキップし、
図5に示す処理を終了する。
【0019】
S312において、判断部205は、セキュリティ通信ありの通信であるか否かの確認を行う。判断部205は、セキュリティ通信ありの通信であると判断すると(S312においてYes)、S313に進み、セキュリティ通信なしの通信であると判断すると(S312においてNo)、S315に進む。
S313において、通信部201は、サーバ102にTLS接続を開始し、S314に進む。
S314において、通信手順切り替え部206は、TLSのClient HelloメッセージのALPN(Layer Protocol Negotiation)領域を利用して、プロトコルアップグレードの要求をサーバ102に送信し、S317に進む。
S314からS317に進んだ場合、S317において、通信手順切り替え部206は、サーバ102から受信したServer HelloメッセージのALPNフィールドに含まれるメッセージを解析し、プロトコルアップグレードに成功したか否かを判断する。
【0020】
一方、S315において、通信部201は、サーバ102とTCP接続を開始し、S316に進む。
S316において、通信手順切り替え部206は、HTTPのupgradeヘッダを用いたプロトコルアップグレードをサーバ102に送信し、S317に進む。
S316からS317に進んだ場合、S317において、通信手順切り替え部206は、サーバ102から受信したSwitching Protocolのレスポンスを解析し、プロトコルアップグレードに成功したか否かを判断する。
S317において、通信手順切り替え部206は、プロトコルアップグレードに成功し、HTTP/2接続が可能であると判断した場合(S317においてYes)、S318に進む。一方、通信手順切り替え部206は、プロトコルアップグレードに成功せず、HTTP/2接続が可能でないと判断した場合(S317においてNo)、S321に進む。
S317の処理は、通信可否判断の処理の一例である。
【0021】
S318において、通信手順切り替え部206は、HTTP/2の通信手順に従って、Client connection prefaceを送信し、S319に進む。
S319において、通信手順切り替え部206は、SETTINGSフレームの交換による設定情報を取得し、S320に進む。SETTINGSフレームの交換による設定情報は、例えば、ヘッダのテーブルサイズ、サーバのプッシュのありなし、最大ストリーム数、初期Window Size、データ圧縮のありなし等の情報である。
S320において、データ保存部203は、サーバ102の識別子に対応付けて、交換した設定情報を保存し、
図5に示す処理を終了する。
一方、S321において、通信部201は、HTTP/1.1での通信を開始し、S322に進む。
S322において、データ保存部203は、サーバ102の識別子に対応付けて、HTTP/1.1接続にのみ対応したサーバであることを保存し、
図5に示す処理を終了する。
【0022】
図6は、通信装置101とサーバ102との間で通信の設定をスキップする場合の情報処理の一例を示すシーケンス図である。
本実施形態では、通信装置101は、指定された識別子に応じてサーバ102との間で設定のスキップを行うと決定する。通信装置101とサーバ102とは、TLSによるセキュリティ通信を行う(
図5のS302でYes、S303でYes)。通信装置101は、通信装置101のアプリケーションによって指定された識別子(session−ID)を取得する。そして、通信装置101は、識別子を鍵として
図8に示されるテーブルを検索し、設定情報があるか否かの判断を行い、識別子に対応する設定情報があった場合には設定情報を利用する。
M401において、通信装置101は、サーバ102にClient helloを送信する(
図5のS305)。
M402において、サーバ102は、通信装置101にServer helloを送信する(
図5のS305)。
本実施形態では、M401、及び、M402において、ALPNフィールドで指定されるプロトコルアップグレードを省略しているが、これに限らず、省略せずに記載するようにしてもよい。
通信装置101は、HTTP/2を開始すると判断する。
【0023】
M403において、通信装置101は、Client connection prefaceをサーバ102に送信する。HTTP/2を開始すると判断すると、M404において、サーバ102は、HTTP 200 OKを通信装置101に送信する。
その後、通信装置101とサーバ102とは、過去の設定情報を適用した上で、HTTP/2通信を開始する。
本実施形態では、設定情報とは、例えば、ヘッダのテーブルサイズ、サーバのプッシュのありなし、最大ストリーム数、初期Window Size、データ圧縮のありなし、ヘッダ圧縮辞書等である。通信装置101とサーバ102とは、ヘッダ圧縮の辞書として、予め設定してあるものを利用してもよいし、通信開始後の手順によって追記、更新された辞書を利用してもよい。また、本実施形態では、通信装置101とサーバ102とは、過去の設定情報を適用するものとして説明を行ったが、これに限るものではない。例えば、通信装置101とサーバ102とは、それぞれ別の装置上のデータベースに保存してある予め決められた設定情報をダウンロードして適用してもよい。
【0024】
図7は、サーバ102が通信装置101と通信を開始する際の情報処理の一例を示すフローチャートである。
S501において、通信部801は、通信装置101とTCP接続又はTLS接続を行い、S502に進む。
S502において、判断部805は、通信装置101からClient connection prefaceを受信したか否かの判断を行う。判断部805は、Client connection prefaceを受信したと判断した場合(S502においてYes)、S503に進む。一方、判断部805は、Client connection prefaceを受信しなかったと判断した場合(S502においてNo)、S507に進む。
【0025】
S503において、判断部805は、通信装置101の識別子(IPアドレスポート番号、URI、session−ID等)から、データ保存部803に識別子に対応したエントリがあるか否かによって、以下の判断を行う。即ち、判断部805は、前記エントリがあるか否かに基づいて、通信処理の設定をスキップできる通信相手か否かの判断を行う。本実施形態では、判断部805は、データ保存部803にエントリが保持されているか否かをチェックしていたが、これに限らず、ネットワークを介した別の装置上のデータベースにエントリが保持されているか否かをチェックするようにしてもよい。判断部805は、前記エントリがある場合、設定スキップ可能であると判断し(S503においてYes)、S504に進み、前記エントリがない場合、設定スキップ可能でないと判断し(S503においてNo)、S516に進む。
【0026】
S504において、設定部804は、データ保存部803の前記エントリに基づき設定情報を適用し、S505に進む。本実施形態では設定部804は、過去の設定情報を適用するものとして説明を行うが、これに限らず、別の装置上のデータベースに保存してある予め決められた設定情報をダウンロードして適用してもよい。
S505において、通信手順スキップ部807は、SETTINGSフレームによる通信情報の設定のフェーズをスキップし、S506に進む。実施形態では、通信手順スキップ部807は、全ての設定フェーズをスキップするものとして説明を行ったが、これに限らず、設定された一部の設定フェーズのみをスキップするようにしてもよい。
S506において、応答部802は、通信装置101にClient connection prefaceの受信を示すHTTP 200 OKの応答を返信し、
図7に示す処理を終了する。
【0027】
S516において、応答部802は、設定のスキップができないクライアントである場合、エラーメッセージ(Invalid method)を通信装置101に返信し、S507に進む。又は、S516において、応答部802は、サーバ102の電源オンオフ等によりエントリが存在しない場合、エラーメッセージ(Internal server error)を通信装置101に送信し、S507に進む。
S507において、判断部805は、プロトコルアップグレードの要求を受信したか否かを判断する。判断部805は、プロトコルアップグレードの要求を受信したと判断すると(S507においてYes)、S508に進み、プロトコルアップグレードの要求を受信しなかったと判断すると(S507においてNo)、S515に進む。
S508において、通信手順切り替え部806は、プロトコルのアップグレード方法を確認する。通信手順切り替え部806は、通信装置101から受信した内容等に基づいて、プロトコルのアップグレード方法を判断する。通信手順切り替え部806は、TLS ALPNフィールドを用いたClient Helloでプロトコルアップグレードを行うと判断した場合(S508においてClient Hello ALPN)、S509に進む。通信手順切り替え部806は、HTTP/1.1 Upgradeヘッダによる切り替えと判断した場合(S508においてプロトコルアップグレードヘッダ)、S511に進む。
【0028】
S509において、通信手順切り替え部806は、TLSのClient HelloメッセージのALPNフィールドを利用したプロトコルアップグレードの要求を通信装置101より受信し、S510に進む。
S510において、応答部802は、TLS ALPNフィールドを用いたServer Helloでプロトコルのアップグレードを受け付けたことを通信装置101に返信し、S513に進む。
【0029】
S511において、通信手順切り替え部806は、HTTP/1.1 Upgradeヘッダを通信装置101より受信し、S512に進む。
S512において、応答部802は、HTTP 101 Switching Protocolsでプロトコルのアップグレードを受け付けたことを通信装置101に返信し、S513に進む。
S513において、通信部201は、SETTINGSフレームの交換を行い、通信の設定情報を受信し、S514に進む。
S514において、データ保存部803は、交換した設定情報を保存し、
図7に示す処理を終了する。
一方、S515において、通信部201は、HTTP/1.1通信を継続し、
図7に示す処理を終了する。
【0030】
通信装置101とサーバ102とにおける設定情報は、初期設定以後、SETTINGSフレームの交換や辞書の追加に応じて更新されてもよい。これによって、通信装置101とサーバ102とは、同じ設定情報を共有することができる。また、通信装置101又はサーバ102が、別の装置に設定情報をアップロードし、再接続時に通信装置101とサーバ102とがダウンロードして利用してもよい。これにより、通信装置101とサーバ102とはエントリを保持しなくてよくなり、リソースの使用を軽減することができる。
【0031】
図8は、通信装置101の設定情報のエントリを示す図である。
ここでのサーバの識別子は、session−ID、IPアドレス及びポート番号、URI等である。これに限るものではなく、通信相手を一意に指定できればいいため、例えば、SIP URI等の他の識別子であってもよい。
設定情報としては、ヘッダのテーブルサイズ、サーバプッシュの有無、最大ストリーム数、初期Window Size、データ圧縮の有無、ヘッダ圧縮の辞書、暗号通信の有無等である。本実施形態では、SETTINGSフレームで交換する情報のみを設定情報として記憶するものとして説明を行ったが、これに限らず、他のレイヤの設定情報等を利用してもよい。例えば、MTUサイズ、TCPのWindow Size、アプリケーションのプロトコル情報、アプリケーションの設定情報等である。
尚、説明の簡略化のため省略しているが、サーバ102でも
図8と同様のエントリを保持する。その場合、サーバの識別子としている部分は通信装置101の識別子となる。通信装置101の識別子は、接続要求元の通信装置の識別情報の一例である。
【0032】
図9は、通信装置101とサーバ102とがHTTP/1.1通信の途中からHTTP/2通信に変更する場合の情報処理の一例を示すシーケンス図である。
M701において、通信装置101は、サーバ102にTCP接続を行い、HTTP/1.1による通信を開始する。
M702において、サーバ102は、通信装置101のTCP接続を受け付け、HTTP/1.1による通信を開始する。
これ以後、通信装置101とサーバ102とはHTTP/1.1通信を行う(M706)。
通信装置101は、HTTP/1.1を利用していたが、アプリケーションの決定によりHTTP/2通信に変更する。
M703において、通信装置101は、HTTP/2にプロトコルをアップグレードするために、サーバ102にHTTP/1.lのupgrade headerを送信する。
M704において、サーバ102は、通信装置101からのプロトコルのアップグレードを受け付けると、HTTP 101 Switching Protocolsを返信する。
M703〜M704において、通信装置101とサーバ102とは通信手順をスキップするか否かの判断を行い、スキップする場合、設定情報を適用した上でHTTP/2通信を行う(M705)。
【0033】
このように、本実施形態の処理は、通信の途中からのプロトコルのアップグレードにも適用できる。HTTP/1.1とHTTP/2とでは、HTTP/1.1に戻すことはできないが、プロトコルをダウングレード(変更)できる場合には、プロトコルの変更処理にかかる処理を低減でき、待ち時間を低減できるようになる。
また、通信装置101とサーバ102との間で最適なパラメータを予め設定、又は、設定情報用のデータベース上に設置しておけば、煩雑なプロトコル開始時の設定処理を低減することができる。例えば、通信装置101とサーバ102とがカメラのような組み込み機器の場合、通信の接続と切断とが頻繁に発生する。このとき、通信装置101とサーバ102との通信手順やパラメータ設定の処理回数が多くなるため、更に上述した実施形態による処理の効果が見込める。
【0034】
<その他の実施形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読み出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【0035】
以上、上述した各実施形態によれば、デバイスが接続したことがある接続先に対して、再接続時の設定処理を低減することができる。また、デバイスが再接続するときのデータ送信開始処理までの時間を短縮することができる。また、通信の接続に係る時間を短縮することができる。