# HG changeset patch # User riono # Date 1581327985 -32400 # Node ID 772ccca4fb6e1fe46c1943844623c2147e8d1dbe # Parent 79d35da7b1155ca4d972c4b1f4dfef1221f44a03 update thesis diff -r 79d35da7b115 -r 772ccca4fb6e FinalThesis/chapter2.tex --- a/FinalThesis/chapter2.tex Mon Feb 10 17:01:34 2020 +0900 +++ b/FinalThesis/chapter2.tex Mon Feb 10 18:46:25 2020 +0900 @@ -17,33 +17,89 @@ \begin{figure}[htb] %PDF \begin{center} \includegraphics[scale=0.5]{fig/vncStruct.pdf} -\caption{従来のVNCでの接続構造} +\figcaption{従来のVNCでの接続構造} \label{fig:vncStruct} \end{center} \end{figure} -そこでTreeVNCではサーバに接続を行ってきたクライアントをバイナリツリー状に接続する。接続してきたクライアントをノードとし、その下に新たなノードを最大2つ接続していく。これにより人数分のデータのコピーと送信の手間を分散することができる(図\ref{fig:TreevncStruct})。 +そこでTreeVNCではサーバに接続を行ってきたクライアントをバイナリツリー状(木構造)に接続する。接続してきたクライアントをノードとし、その下に新たなノードを最大2つ接続していく。これにより人数分のデータのコピーと送信の手間を分散することができる(図\ref{fig:TreevncStruct})。 \begin{figure}[htb] %PDF \begin{center} -\includegraphics[scale=0.5]{fig/TreevncStruct.pdf} -\caption{TreeVNCでの接続構造} +\includegraphics[scale=0.55]{fig/TreevncStruct.pdf} +\figcaption{TreeVNCでの接続構造} \label{fig:TreevncStruct} \end{center} \end{figure} + バイナリツリー状に接続することで、N台のクライアントが接続を行ってきた場合、従来のVNCではサーバ側がN回のコピーを行って画面配信する必要があるが、TreeVNCでは各ノードが最大2回ずつコピーするだけで画面配信が可能となる。 送信されるデータは従来の方法だとN個のノードに対してN-1回の通信が必要である。これはバイナリツリー状の構造を持っているTreeVNCでも通信の数は変わらない。 バイナリツリーのルートのノードをRoot Nodeと呼び、そこに接続されるノードをNodeと呼ぶ。Root Nodeは子Nodeにデータを渡す機能、各Nodeの管理、VNCサーバから送られてきたデータの管理を行っている。各Nodeは、親Nodeから送られてきたデータを自身の子Nodeに渡す機能、子Nodeから送られてきたデータを親Nodeに渡す機能がある。 +\section{TreeVNCの通信プロトコル} +TreeVNCの通信経路としては以下が挙げられる。 +\begin{itemize} +\item 任意のNodeからRoot Nodeに直接通信を行うsend direct message (Node to Root) +\item Root Nodeから任意のNodeに直接通信を行うsend direct message (Root to Node) +\item 任意のNodeから木構造を上に辿ってRoot Nodeまで通信を行う message up tree (Node to Root) +\item Root Nodeから木の末端のNodeまでの全てのNodeに通信を行うmessage down tree (Root to Node) +\item Root Nodeから配信者のVNCサーバへの通信を行う send message (Root to VNC Server) +\item 配信者のVNCサーバからRoot Nodeへの通信を行う send message (VNC Server to Root) +\end{itemize} + +Node間で行われるメッセージ通信にはRFBプロトコルで提供されているメッセージに加え、TreeVNC独自のメッセージを使用している。TreeVNCで使用されるメッセージの一覧を表\ref{tb:messageTable}に示す。 + +\begin{table}[htbp] + \begin{center} + \tblcaption{通信経路とメッセージ一覧} + \scalebox{0.7}{ + \begin{tabular}{|l|l|l|} \hline + 通信経路 & message & 説明 \\ \hline \hline + & FIND\_ROOT & TreeVNC接続時にRoot Nodeを探す. \\ \cline{2-3} + send direct message & WHERE\_TO\_CONNECT & 接続先をRoot Nodeに聞く. \\ \cline{2-3} + (Node to Root) & LOST\_CHILD & 子Nodeの切断をRoot Nodeに知らせる. \\ \hline \hline + + & FIND\_ROOT\_REPLY & FIND\_ROOTへの返信. \\ \cline{2-3} + send direct message & CONNECT\_TO\_AS\_LEADER & 左子Nodeとして接続する.接続先のNodeが含まれている. \\ \cline{2-3} + (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 + + message up tree & CHECK\_DELAY\_REPLY & CHECK\_DELAYへの返信. \\ \cline{2-3} + (Node to Root) & SERVER\_CHANGE\_REQUEST & 画面切り替え要求. \\ \hline \hline + + & FRAMEBUFFER\_UPDATE\_REPLY & 画像データの要求. \\ \cline{2-3} + send message & SET\_PIXEL\_FORMAT & pixel値の設定. \\ \cline{2-3} + (Root to VNCServer) & SET\_ENCODINGS & pixelデータのencodeTypeの設定. \\ \cline{2-3} + & KEY\_EVENT & キーボードからのイベント. \\ \cline{2-3} + & POINTER\_EVENT & ポインタからのイベント. \\ \cline{2-3} + & CLIENT\_CUT\_TEXT & テキストのカットバッファを持った際のmessage. \\ \hline \hline + + & FRAMEBUFFER\_UPDATE & 画像データ.EncodingTypeを持っている. \\ \cline{2-3} + send message & SET\_COLOR\_MAP\_ENTRIES & 指定されているpixel値にマップするRGB値. \\ \cline{2-3} + (VNCServer to Root) & BELL & ビープ音を鳴らす. \\ \cline{2-3} + & SERVER\_CUT\_TEXT & サーバがテキストのカットバッファを持った際のmessage. \\ \hline + \end{tabular} + } + \label{tb:messageTable} + \end{center} +\end{table} +\newpage + \section{木の再構成} +TreeVNCはバイナリツリー状での接続のため、Nodeが切断されたことを検知できずにいると構成した木構造が崩れてしまい、新しいNodeを適切な場所に接続できなくなってしまう。そこで木構造を崩さないよう、Node同士の接続の再構成を行う必要がある。TreeVNCの木構造の接続形態はRoot Nodeが持っているnodeListというリストで管理をしている。つまり、Nodeの接続が切れた場合Root Nodeに切断を知らせなければならない。 + +配信側の画面が更新されるとVNC Serverから画像データが + +TreeVNCは後述するLOST\_CHILDというメッセージ通信でNodeの切断検知 -\section{圧縮方式} \section{ShareScreen} diff -r 79d35da7b115 -r 772ccca4fb6e FinalThesis/fig/Blocking.graffle Binary file FinalThesis/fig/Blocking.graffle has changed diff -r 79d35da7b115 -r 772ccca4fb6e FinalThesis/fig/Blocking.pdf Binary file FinalThesis/fig/Blocking.pdf has changed diff -r 79d35da7b115 -r 772ccca4fb6e FinalThesis/main.pdf Binary file FinalThesis/main.pdf has changed diff -r 79d35da7b115 -r 772ccca4fb6e riono-thesis.mm --- a/riono-thesis.mm Mon Feb 10 17:01:34 2020 +0900 +++ b/riono-thesis.mm Mon Feb 10 18:46:25 2020 +0900 @@ -7,11 +7,15 @@ - - + + + + + + - + @@ -19,7 +23,6 @@ -