PC画面配信システムTreeVNCの NAT への対応
Tatsuki IHA
画面共有を利用したコミュニケーション
授業やゼミ等で、それぞれが PC 端末を持っている場合では、PC の機能を活かした コミュニケーションが可能である
画面配信システム TreeVNC は参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる 仕組みを取っている。そのため, 多人数が参加しても処理性能が下がらない
ツリー のルートが参照している VNC サーバーを変更することで、ケーブルの差し替えなしに画面の切替が行える
TreeVNC の問題点
TreeVNC を実際に使用していく中で様々な問題が発生
講義等を大学外の遠隔地から受けたい場合がある
TreeVNC は NAT を越えた接続が行うことができない
TreeVNC の問題点
ゼミ等で発表者毎に画面切り替えを行う際、デュアルディスプレイを使っている学生がいた
その際 VNC サーバーからはすべての画面データが送信されており、発表とは関係ない画面も配信されていた
この発表は
TreeVNC の概要
構造
原理
画面切り替え
今回の改良
NAT 対応
マルチディスプレイの対応
TreeVNC の評価
画像データ送信の遅延
ネックになってるノードへの対処
TreeVNC
TreeVNC は本研究室で開発している VNC を利用した画面配信システム
配信コストを分散させることで大人数でも画面配信が可能
スムーズな配信画面の切替を行う
VNC
VNC(Virtual Network Computing) は RFBプロトコルを用いて遠隔操作を行うソフトウェア
サーバー側とクライアント側に分かれており、サーバーを起動し、クライアントがサーバーに接続を行うことで遠隔操作を可能とする
RFB プロトコル
RFB(Remote Frame Buffer)プロトコルは VNC で用いられているプロトコル
自身の画面をネットワーク越しに他者の画面に表示する
Framebuffer と呼ばれるメモリ上に置かれた画像データを使用して画面表示を行う
サーバーは Framebuffer が更新されるたびにクライアントに対して変更部分だけを送信する。
TreeVNC の構造
Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている
様々なメッセージで通信を行う
クライアント同士をバイナリツリー状に接続する
バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ
Root Node が参照している VNC サーバーから FrameBuffer を取得して、 木構造を辿って Node に送信する。
TreeVNC の原理
ポート一本あたりの負荷
従来のVNC : Node数 * データ量
TreeVNC : (2(子供の数) + 1) * データ量
従来のVNCはNode数に比例
TreeVNCはNode数に関係なく一定
共有画面切り替え
TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている
画面を配信されている側のビューワにある Share Screen ボタンが押す
Root Node に SERVER_CHANGE_REQUEST を木構造を辿りながら送信
Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を開始
Direct Connection
NATを越えたネットワークからの接続は直接配信側の Root Node に接続を行うことで実現する
Direct Connection した Node はそのネットワークの Root Node になる
Direct Connection された Root Node では NAT を越えたネットワーク先の Node の管理を行わない
マルチディスプレイ
画面切り替えの際のSERVER_CHANGE_REQUESTに共有するディスプレイの座標を付加する
Root Node は 接続した VNC サーバーから画像データを要求する FRAME_BUFFER_UPDATE_REQUEST に受け取った座標を付加する
VNC サーバーは要求された座標内の画像データを FRAME_BUFFER_UPDATE で Root Node に送信する
TreeVNC の評価
木の深さによる画像データの遅延を調べる
実験環境
実際に講義を受講している学生が TreeVNC を使用
約20名の接続
実測方法
Root Node は 送信時間と画像データを持った CHECK_DELAY を 末端 Node まで木構造を辿りながら伝達する
CHECK_DELAY を受け取った各 Node は 付加された送信時間を CHECK_DELAY_REPLY に付加し、 Root Node に送信する
CHECK_DELAY_REPLY を受け取った Root Node は CHECK_DELAY の送信にどれだけ時間がかかったかの計算を行う
深さ1, 2
深さ3, 4
結果から
画像データの伝達はほぼ1秒以内に収まっている
容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の遅延が残っているためだと考えられる
深さ3が遅い原因として1つの Node がボトルネックになっている事が判明した。
ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある
ネックになっているノードへの対処
CHECK_DELAY_REPLY で Root Node は ネックかどうかのを判断をする
ネックになっているなら、その Node を木構造のリストから削除
最後の Node を削除した Node の場所に移動
ネックになったところは三分木になる
まとめと課題
今回TreeVNCの様々な問題点の解決を行った
NAT
マルチディスプレイ
画面切り替えの安定化
エラー通知
NATを越えた画面切り替え
音声配信等の共有機能の追加