changeset 8:a4b118dc9da9

Update Lost Child
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 10 Feb 2016 22:52:35 +0900
parents 293297611bec
children ff89546d0b50
files paper/main.pdf paper/main.tex
diffstat 2 files changed, 73 insertions(+), 60 deletions(-) [+]
line wrap: on
line diff
Binary file paper/main.pdf has changed
--- a/paper/main.tex	Mon Feb 08 02:49:37 2016 +0900
+++ b/paper/main.tex	Wed Feb 10 22:52:35 2016 +0900
@@ -30,7 +30,7 @@
 \setlength{\itemsep}{-1zh}
 \title{PC画面配信システムTreeVNCの NAT への対応}
 \icon{
-	\includegraphics[width=80mm,bb=0 0 595 842]{fig/ryukyu.pdf}
+  \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842
 }
 \year{平成27年度 卒業論文}
 \belongto{琉球大学工学部情報工学科}
@@ -93,11 +93,19 @@
 
 \section{多人数で VNC を使用する際の問題}
 VNCを使用すればクライアント側にサーバー側の画面を表示することが可能である。 
-しかし、多人数のクライアントが1つのサーバーに接続してしまうと処理性能が落ちてしまうという問題点がある。
+しかし、図\ref{fig:vnc}のように多人数のクライアントが1つのサーバーに接続してしまうと処理性能が落ちてしまうという問題点がある。
 
 また、 ゼミ等の発表で画面配信者が頻繁に切り替わる場合、
 配信者が替わる度にアプリケーションを終了し、接続をし直さないといけないという問題がある。
 
+\begin{figure}[htbp]
+    \begin{center}
+        \includegraphics[scale=0.8]{./images/vnc.pdf}
+    \end{center}
+    \caption{VNC}
+    \label{fig:vnc}
+\end{figure}
+
 \section{TreeVNC の構造}
 TreeVNC は Java を用いて作成された TightVNC(Tight Virtual Network Computing)\cite{tightvnc} を元に作成されている。
 
@@ -120,6 +128,16 @@
     \label{fig:tree}
 \end{figure}
 
+\section{TreeVNC の原理}
+TreeVNC のの原理を書く予定
+\begin{itemize}
+    \item 従来のVNC : Node数 * データ量
+    \item TreeVNC   : (2(子供の数) + 1) * データ量
+\end{itemize}
+% 従来のVNCはNode数に比例
+% TreeVNCはNode数に関係なく一定
+% 計算式 従来 N * データ量, TreeVNC (M+1) * データ量
+
 \section{圧縮形式}
 TreeVNC は ZRLEE\cite{taninari:2012a} というエンコードでデータのやり取りを行う。
 ZRLEE はRFB プロトコルで使えるエンコーディングタイプの ZRLE を元に生成される。
@@ -137,7 +155,7 @@
 
 \begin{figure}[htbp]
     \begin{center}
-        \includegraphics[scale=0.6]{./images/zrleFail.pdf}
+        \includegraphics[scale=0.5]{./images/zrleFail.pdf}
     \end{center}
     \caption{ZRLEでの問題点}
     \label{fig:zrleFail}
@@ -145,13 +163,12 @@
 
 \begin{figure}[htbp]
     \begin{center}
-        \includegraphics[scale=0.6]{./images/zrlee.pdf}
+        \includegraphics[scale=0.5]{./images/zrlee.pdf}
     \end{center}
     \caption{ZRLEE}
     \label{fig:zrlee}
 \end{figure}
 
-
 \section{通信経路}
 TreeVNC の通信経路として以下が挙げられる
 \begin{itemize}
@@ -178,7 +195,7 @@
 
                             & FIND\_ROOT\_REPLY          & FIND\_ROOTへの返信。 \\ \cline{2-3}
         send direct message & CONNECT\_TO\_AS\_LEADER    & 左子Nodeとして接続する。接続先のNodeが含まれている。 \\ \cline{2-3}
-        (Root to Node)      & CONNECT                    & 右子Nodeとして接続する。接続先のNodeが含まれている。 \\ \hline \hline
+        (Root to Node)      & CONNECT\_TO                & 右子Nodeとして接続する。接続先のNodeが含まれている。 \\ \hline \hline
 
         message down tree   & FRAMEBUFFER\_UPDATE        & 画像データ。EncodingTypeを持っている。\\ \cline{2-3}
         (Root to Node)      & CHECK\_DELAY               & 通信の遅延を測定する。 \\ \hline \hline
@@ -201,32 +218,31 @@
     \label{tb:message}
 \end{table}
 
-図\ref{fig:message}は TreeVNC で Node が Root Node に接続し、画像データを受信するまでのメッセージ通信の様子である。
+図\ref{fig:message}は TreeVNC で 新しいNode が Root Node と通信し、木構造を形成するためのメッセージ通信の流れである。
 図\ref{fig:message}の手順として
 
 \begin{itemize}
-    \item 接続を行う Node (以下 Client Node)はMulticast通信で Root Node に対してFIND\_ROOTを送信する(1:findRoot())
-    \item Root NodeがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
-    \item Client Node 側で、どのRoot Nodeに接続するかを選択するパネルが表示される
-    \item Client Node はパネルで接続するRoot Nodeを選択し、Rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
-    \item 受信した Root Node は Client Node の接続先をCONNECT\_TOで送信する(4:connectTo)
-    \item Client Node は Root の指定した接続先に接続しに行く
-    \item Root Node, Client Node間の接続が確立後、Root Node から Clinet Node に対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(5:framebufferUpdate())
+    \item 接続を行う Node は Multicast 通信で Root Node に対してFIND\_ROOTを送信する。
+    \item Root NodeがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する。
+    \item Node 側で、どのRoot Nodeに接続するかを選択するパネルが表示される。
+    \item Node はパネルで接続するRoot Nodeを選択し、Rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する。
+    \item 受信した Root Node は Node の接続先をCONNECT\_TOで送信する。 Node 3 が接続する場合、Root Node には既に2台の Node が接続している為、 CONNET\_TO で指定する接続先は Node 1となる。
+    \item Node は Root の指定した接続先に接続しに行く。
 \end{itemize}
 
-を行っている。
+を行い、木構造を形成する。
 
-\begin{figure}[ht]
+\begin{figure}[htbp]
     \begin{center}
-        \includegraphics[width=65mm]{./images/message.pdf}
+        \includegraphics[scale=0.5]{./images/message.pdf}
     \end{center}
     \caption{node 間で行われるメッセージ通信}
     \label{fig:message}
 \end{figure}
 
 \section{MulticastQueue}
-配信側の画面が更新されると、 VNCServer から画像データがFRAME_BUFFER_UPDATE メッセージとして送られる。
-その際、 画像データの更新を複数の Node に同時に伝えるため、 MulticastQueue というキューに画像データを格納する。
+配信側の画面が更新されると、 VNCServer から画像データがFRAME\_BUFFER\_UPDATE メッセージとして送られる。
+その際、 画像データの更新を複数の Node に同時に伝えるため MulticastQueue というキューに画像データを格納する。
 
 MulticastQueue は java.util.concurrent.CountDownLatch を用いて実装されている。
 CountDownLatch は java の並列用のAPIで他のスレッドで実行中の操作が完了するまで、複数のスレッドを待機させることが出来るクラスである。 
@@ -250,25 +266,25 @@
 
 TreeVNC は VNC サーバーから送られる画像データ(FRAME\_BUFFER\_Update)を MulticastQueue に蓄積しており、
 Node はこのキューから画像データを取得し、画面を描画している。
-Lost\_Child の検出方法はこの MulticastQueue を使用している。
+LOST\_CHILD の検出方法はこの MulticastQueue を使用している。
 ある一定時間 MulticastQueue から画像データが取得されない場合 Memory Over Flow を回避するために Timeout スレッドが用意されている。
 Timeout を検知した際、Node との接続が切れたと判断する。
 
-LOST\_CHILD の検知・木の再構成を以下に示す。
+図\ref{fig:lostChild}は6台の Node が接続してる状態で、 Node3 が切断した場合の木の再構成を示している。
+
 \begin{itemize}
-    \item 子 Node の切断を検知した Node が Root Node へ LOST\_CHILD メッセージを送信する(図\ref{fig:lostchild1}中, 1:lostChild())
-    \item LOST\_CHILD メッセージを受け取った Root Node は nodeList の更新を行う(図\ref{fig:lostchild1}中, 2:updateNodeList())
-    \item 切断した Node を nodeList から消し、nodeList の最後尾の Node に切断した node number を割り当てる
-    \item Root Node は最後尾の Node に、切断した子 Node が接続していた親 Node に接続する様に CONNECT\_TO メッセージを送信する(図\ref{fig:lostchild1}中, 3:connectTo(1))
-    \item 最後尾の Node が子 Node を失った親 Node へ接続しに行く(図\ref{fig:lostchild1}中, 4:connectToParent(1))
+    \item Node3 の切断を検知した Node1 が Root Node へ LOST\_CHILD メッセージを送信する(1: send LOST\_CHILD)。
+    \item LOST\_CHILD メッセージを受け取った Root Node は nodeList から切断した Node を消し、最後尾の Node6 に切断した Node Number を割り当てる(2: update nodeList)。
+    \item Root Node は最後尾の Node6 に、切断した子 Node3 が接続していた Node1 に接続する様に CONNECT\_TO メッセージを送信する(3: send CONNECT\_TO (Node1))。
+    \item 最後尾の Node が子 Node を失った親 Node へ接続しに行く(4: connect (Node1))。
 \end{itemize}
 
-\begin{figure}[ht]
+\begin{figure}[htbp]
     \begin{center}
-        \includegraphics[width=70mm]{./images/lostChild1.pdf}
+        \includegraphics[scale=0.6]{./images/lostChild.pdf}
     \end{center}
     \caption{LOST\_CHILD を検知・再接続}
-    \label{fig:lostchild1}
+    \label{fig:lostChild}
 \end{figure}
 
 LOST\_CHILD によって、 切断された全ての Node を検知することができるため、 nodeList の更新が正しく行われる。
@@ -298,9 +314,9 @@
 
 この問題を解決するために、 図\ref{fig:multinetworktree}の様に、ネットワーク別に 木構造を形成するように設計した。
 
-\begin{figure}[ht]
+\begin{figure}[htbp]
     \begin{center}
-        \includegraphics[width=70mm]{./images/MultiNetworkTree.pdf}
+        \includegraphics[width=70mm]{}
     \end{center}
     \caption{Multi Network Tree}
     \label{fig:multinetworktree}
@@ -315,7 +331,30 @@
 新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得し、 Node 接続の処理を任せる。
 そのため、 TreeVNC が複数のネットワーク別に木構造を構成することが可能となる。
 
-% 実験
+\chapter{NAT 越え}
+\section{DirectConnection}
+遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。
+
+図\ref{fig:directConnection} にNATを越えたネットワークからの接続を示す。
+別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。
+この接続を Direct Connection と呼ぶ。
+
+Direct Connection した Node はそのネットワークの Root Node になる。 
+そのネットワークの他の Node はそのネットワークの Root Node に接続し、木構造を生成する。
+
+配信側の Root Node は Direct Connection で接続された Root Node に対して Framebuffer Update で 画像データを送信する。
+Framebuffer Update が送信された Root Node は そのネットワークの Node に対して Framebuffer Update を送信する。
+
+これにより、NATを越えたネットワークの画面共有が可能となる。
+
+\begin{figure}[htbp]
+    \begin{center}
+        \includegraphics[scale=0.5]{./images/directConnection.pdf}
+        \caption{遠隔地 Node からの接続}
+        \label{fig:directConnection}
+    \end{center}
+\end{figure}
+
 \chapter{TreeVNC の追加機能}
 \section{マルチディスプレイ対応}
 画面配信側のPCがマルチディスプレイの場合、
@@ -333,37 +372,14 @@
 
 図\ref{fig:multidisplay} は Display1 のみを画面共有する例を示している。
 
-\begin{figure}[ht]
+\begin{figure}[htbp]
     \begin{center}
-        \includegraphics[width=70mm]{./images/shareScreenToMultiDisplay.pdf}
+        \includegraphics[scale=0.5]{./images/shareScreenToMultiDisplay.pdf}
     \end{center}
     \caption{マルチディスプレイへの対応}
     \label{fig:multidisplay}
 \end{figure}
 
-\section{NAT越え}
-遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。
-
-図\ref{fig:directConnection} にNATを越えたネットワークからの接続を示す。
-別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。
-この接続を Direct Connection と呼ぶ。
-
-Direct Connection した Node はそのネットワークの Root Node になる。 
-そのネットワークの他の Node はそのネットワークの Root Node に接続し、木構造を生成する。
-
-配信側の Root Node は Direct Connection で接続された Root Node に対して Framebuffer Update で 画像データを送信する。
-Framebuffer Update が送信された Root Node は そのネットワークの Node に対して Framebuffer Update を送信する。
-
-これにより、NATを越えたネットワークの画面共有が可能となる。
-
-\begin{figure}[ht]
-    \begin{center}
-        \includegraphics[width=80mm]{./images/directConnection.pdf}
-        \caption{遠隔地 Node からの接続}
-        \label{fig:directConnection}
-    \end{center}
-\end{figure}
-
 \section{ネックになっているノードへの対処}
 \section{別 Thread での画面切り替え}
 
@@ -396,7 +412,6 @@
     \end{lstlisting}
 \end{table}
 
-
 \section{結果}
 バイナリツリーで木を構成した場合、 Node 数が17台だと深さが4となる。
 各木構造の階層毎に、画像データの伝搬にかかった時間を測定した。
@@ -411,8 +426,6 @@
 このような極端に遅い Node をそのまま木に配置した場合、その Node の子 Node 以下に影響を及ぼす場合がある。
 そのため、遅い Nodeを検出して、木の最後尾に移動させる機能が必要である。
 
-今回4段分のデータでは30名程度の遅延のみしか判断することができないため、更に大人数での実験を繰り返し行う必要がある。
-
 \begin{figure}[ht]
     \begin{center}
         \includegraphics[scale=0.8]{./images/depth1.eps}