NTMobileフレームワークのJavaラッパーの提案と実装
清水 一輝†* 八里 栄輔‡ 納堂 博史† 鈴木 秀和† 内藤 克浩§ 渡邊 晃†
†名城大学 ‡バレイキャンパスジャパン §愛知工業大学
1 はじめに
モバイルネットワークの普及に伴って,ネットワーク 環境に関わらず通信を開始することができる通信接続 性とネットワークが切り替わった際にも通信を継続でき る移動透過性が求められている.NTMobile(Network Traversal with Mobility)は両者を同時に実現する次世 代の技術である[1].
NTMobileはLinuxカーネルに実装を行っていたが,
スマートフォン等ではルート権限が必要となるため利 用できなかった.そこでNTMobileをアプリケーショ ンに移植し通信ライブラリを提供する方法として,NT- Mobileフレームワークを検討している[2].フレーム ワークはC言語によって記述されているため,Javaで 利用するには変換が必要である.そこで本研究では,
NTMobileフレームワーク用のJavaラッパーを実現す る方式について検討した.Javaアプリケーションでは NTMobileをほとんど意識することなく,Java標準API を使用すると自動的にNTMobileフレームワークを呼 び出すことができる.
2 NTMobile
2.1 概要
NTMobile の基本構成は,NTMobile 機能を有する NTM端末とNTM端末の端末情報管理やトンネルの 経路指示を行うDC(Direction Coordinator)によって 構成される.
NTM端末は,起動時に自身の実IPアドレスをDC に対して登録し,DCから仮想IPアドレスを取得する.
アプリケーションは仮想IPアドレスを利用して通信を 確立する.仮想IPアドレスにより生成されたパケット は全て実IPアドレスによってカプセル化する.この方 法によりNTM端末はIPv4グローバル/IPv4プライベー ト/IPv6アドレスの違いを意識することなく相互に通信 ができ,通信中にネットワークを切り替えることが可 能である.
Proposal and Implementation of Java Wrapper for NTMobile Frame- work
†Kazuki Shimizu,‡Eisuke Yasato,†Hiroshi Nodo,†Hidekazu Suzuki,
§Katsuhiro Naito,†Akira Watanabe
†Meijo University
‡Valley Campus Japan
§Aichi Institute of Technology
2.2 フレームワークの処理
図1にNTMobileフレームワークで行う処理を示す.
通信開始側の端末をMN(Mobile Node),通信相手側 の端末をCN(Correspondent Node)と呼ぶ.フレーム ワークの処理は大きく以下の3つに分けられる.
(i) 登録処理
MN及びCN起動時に自身の実IPアドレスを DCに登録し,DCから仮想IPアドレスの取得す る.これにより,NTMobile通信のための準備が 整う.上位アプリケーションに対してntmfw ntm init関数を提供する.
(ii) トンネル生成
MNは通信開始時にCNのFQDNを指定して DCに経路指示を依頼する.MNとCNはDCの 指示に従ってトンネル経路を構築する.上位アプ リケーションに対してntmfw getaddrinfo関数 を提供する.
(iii) トンネル通信
パケット送受信時に,フレームワークを呼び出 し,NTMobileによるトンネル通信を行う.上位 アプリケーションに対して名前が異なるCソケッ トと同じ関数を提供する.
トンネル通信
MN
DC ( i )
CN
( ii ) ( iii )
( i )
図1: NTMobileフレームワークで行う処理
3 Javaラッパーの構成
図2にJavaラッパーを用いたNTM端末のモジュー ル構成を示す.JavaアプリケーションにてNTMobile通 信を行うには,C言語で記述されたNTMobileフレー
ムワークの関数を呼び出す必要がある.C言語とJava では引数の型の違いがあるため,NTMobileフレーム ワークを呼び出す前にJavaラッパーを介して型の変換 処理を行う.NTMobileの通信処理はNTMobileフレー ムワークが行うので,Javaでは関与する必要はない.
Javaアプリケーションでは,Java標準APIを使用し て自動的にNTMobile通信を実現できるように,Java 標準の通信クラスのメソッドをNTMobile通信用のメ ソッドでオーバーライドする.これによりJavaの通信 に関するメソッドを使用した際にJavaラッパーによっ
てNTMobileフレームワークの関数を自動的に呼び出
すようになる.
図 2 の init とgetByNameの 2 つの処理は,NT- Mobileフレームワーク特有の処理を行うため,Java標 準API をオーバーライドすることができない.そこ でこの2つのメソッドは新たにクラスを作成し,そこ に定義する.initは NTMobileを起動するために必 要な処理であるため,アプリケーション側で使用する 際に引数を予め知っておく必要がある.getByNameは ntmfw getaddrinfoを呼び出すが,Java標準APIでも 提供するメソッドであるため同じ引数で使用できるよ うにした.その他のJavaソケットは,型の変換後にそ
のままNTMfw Cソケットを呼び出す.
Java アプリケーション
Java ラッパー
NTMobile フレームワーク
Linux
Java ソケット
NTMfw C ソケット
C ソケット
ntmfw_ntm_init
init getByName
ntmfw_getaddrinfo
図 2: Javaラッパーを用いたNTM端末のモジュール 構成
4 評価
Javaラッパーを実装してNTMobile通信を行い,動 作検証と処理時間の測定を行った.
1台のホストマシン上にDC,MN,CNの仮想マシ ンを構築し,DC,MN,CNを同一IPv4プライベート ネットワークに接続し,動作検証を行った.処理時間の 測定には,JavaのSystemクラスにおけるnanoTimeメ ソッドを使用した.MNとCN間で,Javaラッパーを用
いてNTMobileでUDPでのトンネル通信を行った際に 要する時間の測定を7回行った.Javaでは動的にクラ スをロードするため,初回起動時等では立ち上がりが 遅い.そこで7回測定した結果の最初の2回を除いた 5回を平均した結果を表1に示す.表1のLinuxとは,
NTMobileを利用せずJava標準APIにて用意されている UDP通信用のDatagramSocketクラスのsend/receive メソッドを使用し,送信/受信するのに要した時間であ る.この測定結果は図2のJavaラッパーとNTMobile フレームワークを除いた処理と同等であるため,表1
のLinuxの処理時間とみなすことができる.
表1:送信/受信の処理時間の平均 測定箇所 送信時[ms] 受信時[ms]
Javaラッパー 0.13 0.16
NTMobile 2.91 2.37
Linux 0.07 0.01
合計 3.11 2.54
表1より,NTMobile通信を行うと送信時では,約 3.1ミリ秒,受信時では約2.5ミリ秒の時間を要した.
NTMobile通信時にかかる時間の多くがNTMobileフ レームワークであることが分かった.NTMobileフレー ムワークにて多くの時間を要するのは,メッセージ全 体の暗号化/復号処理等が含まれるためであると考えら れる.
Javaラッパーでの処理に要した時間は送信時では,
約0.13ミリ秒,受信時では約0.16ミリ秒であった.
5 まとめ
本稿では,NTMobileフレームワーク用のJavaラッ パーを実現する方式を提案した.UDP通信部分の実装 を行い,Java標準APIを使用してNTMobile通信を実 現できることを確認した.今後は,TCP通信部分の実 装検討及び性能評価を行う予定である.
参考文献
[1] 上 醉 尾 一 真 ,鈴 木 秀 和 ,内 藤 克 浩 ,渡 邊 晃 ,”IPv4/IPv6 混 在 環 境 で 移 動 透 過 性 を 実 現 するNTMobileの実装と評価”,情報処理学会論文 誌,Vol.54,No.10,pp2288-2299,2013.
[2] K.Naito,K.Kamienoo,H.Suzuki,A.Watanabe,
K.Mori and H.Koboyashi,”End-to-end IP mobility platform in application layer for iOS and Android OS”,IEEE CCNC 2014,pp.276-281,2014.
NTMobile フレームワーク⽤
Java ラッパーの提案と実装
清⽔ ⼀輝 † ⼋⾥ 栄輔 ‡ 納堂 博史 † 鈴⽊ 秀和 † 内藤 克浩§ 渡邊 晃 †
† 名城⼤学
‡ バレイキャンパスジャパン
§愛知⼯業⼤学
研究背景
n インターネット通信の需要増加
l
スマートフォンなどの移動通信端末の普及n 通信接続性の課題
l IPv4
アドレスの枯渇に伴い,NAT
によるプライベートネットワークを 構築することが⼀般的l NAT
の外側にあるネットワークから,NAT
の内側にあるネットワークにアクセスできない(NAT
越え問題)1
NAT:Network Address Translation
端末間で⾃由に通信できない
グローバルネットワーク プライベートネットワーク
端末A 端末B
NAT
研究背景
n 移動透過性の課題
l
現在のネットワークでは,IP
アドレスを通信識別⼦としているl
端末移動時などにネットワークが切り替わると,端末の
IP
アドレスが変化し,通信を継続できない2
移動しながら通信を継続できない
ネットワークA
端末A 端末B
ネットワークB IPアドレス:A
研究背景
n 移動透過性の課題
l
現在のネットワークでは,IP
アドレスを通信識別⼦としているl
端末移動時などにネットワークが切り替わると,端末の
IP
アドレスが変化し,通信を継続できない3
ネットワークA
端末A 端末B 端末B
移動しながら通信を継続できない
移動
IPアドレス:B ネットワークB
IPアドレス:A
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
4
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network Private Network
Internet
NTM端末:MN DC
RS
NAT
NTM端末:CN
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
5
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network Private Network
Internet
NTM端末:MN DC
RS
NAT
NTM端末:CN 端末起動時
仮想IPアドレスの配布 端末情報の登録
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
6
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network Private Network
Internet
NTM端末:MN DC
RS
NAT
NTM端末:CN 通信開始時(ⅰ)
経路指⽰の要求
通信経路の指⽰
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
7
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network Private Network
Internet
NTM端末:MN DC
RS
NAT 通信開始時(ⅱ)
NTM端末:CN
トンネル構築
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
8
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network Private Network
Internet
NTM端末:MN DC
RS
NAT
NTM端末:CN トンネル通信時
トンネル通信
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
9
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network
Internet
NTM端末:MN DC
RS
NAT
NTM端末:CN
移動
端末移動時(ⅰ)
通信経路の指⽰
経路指⽰の要求
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
10
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network
Internet
NTM端末:MN DC
RS
NAT
NTM端末:CN
移動
端末移動時(ⅱ)
トンネル再構築
NTMobile
(Network Traversal with Mobility)
n 通信接続性と移動透過性を同時に実現する技術
l NTM
端末(NTMobile Node)
▶ NTMobile機能が実装された端末
l DC(Direction Coordinator)
▶ 通信経路の指⽰
▶ 仮想IPアドレスの配布
l RS(Relay Server)
▶ 直接通信不可の際,
通信を中継
n DC , RS は複数台設置可能
11
MN:Mobile Node CN:Correspondent Node
・端末の位置に依存しない
・実IPアドレスの変化を隠蔽 仮想IPアドレス
Private Network
Internet
NTM端末:MN DC
RS
NAT
NTM端末:CN
移動
トンネル通信時
トンネル通信
NTMobile フレームワーク
n NTMobile 機能をユーザ空間にて実現する実装⽅式
n アプリケーションは C ⾔語の標準ソケット API に代わり,
NTM ソケット API を使⽤する
12
API:Application Programming Interface Cアプリケーション
NTMobileフレームワーク
Linux
l ntmfw_bind l ntmfw_sendto l ntmfw_recvfrom
l bind l sendto l recvfrom
C標準ソケットAPI NTMソケットAPI
NTMobile フレームワークの構成
n 仮想 IP スタック
l
仮想IP
アドレスの提供n パケット操作
モジュール
l
パケットの暗号化/
復号l
改ざん検知のためのMAC
付与/
検証n トンネルテーブル
l
実/
仮想IP
アドレス等の 関係を所持n ネゴシエーション
モジュール
l
通信経路のやり取り13
MAC:Message Authentication Code
NTMソケットAPI
CソケットAPI 仮想IP
スタック
ネゴシエー モジュールション トンネルテーブル
パケット操作 モジュール
NTMobile フレームワーク
n フレームワークは C ⾔語によって実装
l
フレームワークを利⽤できるアプリケーションはC
⾔語に限定l
実⽤的な利⽤のためには他のプログラミング⾔語からフレームワークを 利⽤可能にするためのラッパーが必要
n ラッパーとは
l
他のプログラミング⾔語にて 実装された機能などを利⽤できるようにするもの
14
アプリケーション
NTMobileフレームワーク
Linux ラッパー
NTMobile ⽤ Java ラッパー
n Java ラッパー内での処理内容
l
ラッパーで使⽤するソケットAPI
のマッピングl C
⾔語とJava
での違いの除去l Java
標準ソケットAPI
をNTMobile
通信を⾏うように再定義15
Javaアプリケーション
NTMobileフレームワーク Javaラッパー
JNA
l ntmfw_sendto l ntmfw_recvfrom
NTMソケットAPI
l send l receive
Java標準ソケットAPI
NTMobile ⽤ Java ラッパー
n ラッパーで使⽤するソケット API のマッピング
l JNA
を使⽤するn マッピング例
l UDP
送信⽤のNTM
ソケットAPI
▶ C⾔語
▶ ntmfw_sendto(NTM_SOCK fd, const void *buff, NTM_DATALEN buff_len, int32_t flags, struct sockaddr *addr, NTM_SOCKLEN addr_len)
▶ Java
▶ ntmfw_sendto(int fd, Pointer buff, NativeSize buff_len,
int flags, sockaddr.ByReference addr, int addr_len)
16
・オープンソースのライブラリ
・C⾔語のライブラリへアクセスする⼿法を提供
・C⾔語と同じ名前でAPIを定義することでJavaで使⽤可能になる JNA(Java Native Access)
NTMobile ⽤ Java ラッパー
n UDP 送信⽤の Java 標準ソケット API との⽐較
l
マッピング後のNTM
ソケットAPI
▶ ntmfw_sendto(int fd, Pointer buff, NativeSize buff_len,
int flags, sockaddr.ByReference addr, int addr_len)
l Java
の標準ソケットAPI
▶ send(DatagramPacket p)
n 異なる点
17
マッピング後の
NTMソケットAPI Javaの
標準ソケットAPI
名前 ntmfw_sendto send
引数の数 6個 1個
NTMソケットAPIとJavaの標準ソケットAPIは⼤きく異なる
NTMobile ⽤ Java ラッパー
n C ⾔語と Java での違いの除去
l Java
の標準ソケットAPI
でNTM
ソケットAPI
を使⽤可能にする▶ send(DatagramPacket p)で
ntmfw_sendto(int fd, … , int addr_len)を使⽤可能にする
18
1. send(DatagramPacket p)を呼び出す
2. sendの引数で得た“DatagramPacket p”から メッセージやIPアドレス等の情報を取り出す
3. 2.で取り出した情報をntmfw_sendtoの引数に渡す 4. ntmfw_sendto(int fd, … , int addr_len)が実⾏される 5. send(DatagramPacket p)が終了する
Javaの標準ソケットAPIと同じ使い⽅で
マッピングしたNTMソケットAPIが使⽤可能になる
NTMobile ⽤ Java ラッパー
n C ⾔語と Java での違いの除去
l Java
の標準ソケットAPI
でNTM
ソケットAPI
を使⽤可能にする▶ send(DatagramPacket p)で
ntmfw_sendto(int fd, … , int addr_len)を使⽤可能にする
19
1. send(DatagramPacket p)を呼び出す
2. sendの引数で得た“DatagramPacket p”から メッセージやIPアドレス等の情報を取り出す
3. 2.で取り出した情報をntmfw_sendtoの引数に渡す 4. ntmfw_sendto(int fd, … , int addr_len)が実⾏される 5. send(DatagramPacket p)が終了する
Javaの標準ソケットAPIと同じ使い⽅で
マッピングしたNTMソケットAPIが使⽤可能になる
NTMobile ⽤ Java ラッパー
n C ⾔語と Java での違いの除去
l Java
の標準ソケットAPI
でNTM
ソケットAPI
を使⽤可能にする▶ send(DatagramPacket p)で
ntmfw_sendto(int fd, … , int addr_len)を使⽤可能にする
20
1. send(DatagramPacket p)を呼び出す
2. sendの引数で得た“DatagramPacket p”から メッセージやIPアドレス等の情報を取り出す
3. 2.で取り出した情報をntmfw_sendtoの引数に渡す 4. ntmfw_sendto(int fd, … , int addr_len)が実⾏される 5. send(DatagramPacket p)が終了する
Javaの標準ソケットAPIと同じ使い⽅で
マッピングしたNTMソケットAPIが使⽤可能になる
NTMobile ⽤ Java ラッパー
n C ⾔語と Java での違いの除去
l Java
の標準ソケットAPI
でNTM
ソケットAPI
を使⽤可能にする▶ send(DatagramPacket p)で
ntmfw_sendto(int fd, … , int addr_len)を使⽤可能にする
21
1. send(DatagramPacket p)を呼び出す
2. sendの引数で得た“DatagramPacket p”から メッセージやIPアドレス等の情報を取り出す
3. 2.で取り出した情報をntmfw_sendtoの引数に渡す 4. ntmfw_sendto(int fd, … , int addr_len)が実⾏される 5. send(DatagramPacket p)が終了する
Javaの標準ソケットAPIと同じ使い⽅で
マッピングしたNTMソケットAPIが使⽤可能になる
NTMobile ⽤ Java ラッパー
n C ⾔語と Java での違いの除去
l Java
の標準ソケットAPI
でNTM
ソケットAPI
を使⽤可能にする▶ send(DatagramPacket p)で
ntmfw_sendto(int fd, … , int addr_len)を使⽤可能にする
22
1. send(DatagramPacket p)を呼び出す
2. sendの引数で得た“DatagramPacket p”から メッセージやIPアドレス等の情報を取り出す
3. 2.で取り出した情報をntmfw_sendtoの引数に渡す 4. ntmfw_sendto(int fd, … , int addr_len)が実⾏される 5. send(DatagramPacket p)が終了する
Javaの標準ソケットAPIと同じ使い⽅で
マッピングしたNTMソケットAPIが使⽤可能になる
NTMobile ⽤ Java ラッパー
n C ⾔語と Java での違いの除去
l Java
の標準ソケットAPI
でNTM
ソケットAPI
を使⽤可能にする▶ send(DatagramPacket p)で
ntmfw_sendto(int fd, … , int addr_len)を使⽤可能にする
23
1. send(DatagramPacket p)を呼び出す
2. sendの引数で得た“DatagramPacket p”から メッセージやIPアドレス等の情報を取り出す
3. 2.で取り出した情報をntmfw_sendtoの引数に渡す 4. ntmfw_sendto(int fd, … , int addr_len)が実⾏される 5. send(DatagramPacket p)が終了する
Javaの標準ソケットAPIと同じ使い⽅で
マッピングしたNTMソケットAPIが使⽤可能になる
NTMobile ⽤ Java ラッパー
n Java 標準ソケット API を NTMobile 通信を⾏うように再定義
l Java
のソケット実装ファクトリへの対応24
l bind l send l receive
Java標準ソケットAPI 1. 引数で得た情報を NTMソケットAPIで 使えるように処理する 2. 処理後の値を
NTMソケットAPIの引数で渡す 3. Java標準ソケットAPIに代わり,
NTMソケットAPIが処理を⾏う 再定義後のソケットAPI
再定義
⼀括で再定義することが可能
動作検証
n 装置の仕様
l
全ての装置を1
台のホストマシン上に仮想マシンで構築25
ホストマシン OS Windows 10 64bit
CPU Intel Core i7-4770 3.40GHz Memory 8.00GB
仮想マシン MN,CN DC
OS Ubuntu 14.04 32bit Ubuntu 12.04 32bit Kernel Version 3.13.0-24-generic 3.2.0-101-generic-pae
CPU割り当て 各1Core 1Core
Memory割り当て 各2.00GB 1.00GB
DC CN
MN
動作検証
n NTM ソケット API を使⽤し, UDP による任意のメッセージを 送受信するアプリケーションを C ⾔語と Java で作成
n C ⾔語と Java , Java 同⼠の 2 通りで動作を検証
l 2
通りでUDP
送受信の成功を確認26
C Java
Java Java
性能評価
n UDP 通信時の処理時間を計測
l 5
回の平均を計算n NTMobile ではパケット暗号化 / 復号,
改ざん検知のために MAC 付与 / 検証を
⾏うため時間を要する
27
MAC:Message Authentication Code
計測箇所 送信時[ms] 受信時[ms]
(ⅰ) Javaラッパー 0.13 0.16
(ⅱ) NTMobile 2.91 2.37
(ⅲ) Linux 0.07 0.01
合計 3.11 2.54
Javaアプリケーション
Linux
NTMobileフレームワーク Javaラッパー
JNA
(ⅰ)
(ⅱ)
(ⅲ)
まとめ
n NTMobile ⽤ Java ラッパー
l NTMobile
フレームワークをJava
にて使⽤可能にするn 実装と評価
l
仮想環境にて正常に動作することを確認▶ JavaでNTMobileを使⽤可能