comparison FinalThesis/chapter2.tex @ 9:772ccca4fb6e

update thesis
author riono <e165729@ie.u-ryukyu.ac.jp>
date Mon, 10 Feb 2020 18:46:25 +0900
parents 79d35da7b115
children d379cefa7436
comparison
equal deleted inserted replaced
8:79d35da7b115 9:772ccca4fb6e
15 TreeVNCはjavaを用いて作成されたTight VNCを元に作成されている。 TreeVNCはVNCを利用して画面配信を行っているが、従来のVNCでは配信(サーバ)側のPCに全ての参加者(クライアント)が接続するため負荷が大きくなってしまう(図\ref{fig:vncStruct})。 15 TreeVNCはjavaを用いて作成されたTight VNCを元に作成されている。 TreeVNCはVNCを利用して画面配信を行っているが、従来のVNCでは配信(サーバ)側のPCに全ての参加者(クライアント)が接続するため負荷が大きくなってしまう(図\ref{fig:vncStruct})。
16 16
17 \begin{figure}[htb] %PDF 17 \begin{figure}[htb] %PDF
18 \begin{center} 18 \begin{center}
19 \includegraphics[scale=0.5]{fig/vncStruct.pdf} 19 \includegraphics[scale=0.5]{fig/vncStruct.pdf}
20 \caption{従来のVNCでの接続構造} 20 \figcaption{従来のVNCでの接続構造}
21 \label{fig:vncStruct} 21 \label{fig:vncStruct}
22 \end{center} 22 \end{center}
23 \end{figure} 23 \end{figure}
24 24
25 25
26 そこでTreeVNCではサーバに接続を行ってきたクライアントをバイナリツリー状に接続する。接続してきたクライアントをノードとし、その下に新たなノードを最大2つ接続していく。これにより人数分のデータのコピーと送信の手間を分散することができる(図\ref{fig:TreevncStruct})。 26 そこでTreeVNCではサーバに接続を行ってきたクライアントをバイナリツリー状(木構造)に接続する。接続してきたクライアントをノードとし、その下に新たなノードを最大2つ接続していく。これにより人数分のデータのコピーと送信の手間を分散することができる(図\ref{fig:TreevncStruct})。
27 27
28 \begin{figure}[htb] %PDF 28 \begin{figure}[htb] %PDF
29 \begin{center} 29 \begin{center}
30 \includegraphics[scale=0.5]{fig/TreevncStruct.pdf} 30 \includegraphics[scale=0.55]{fig/TreevncStruct.pdf}
31 \caption{TreeVNCでの接続構造} 31 \figcaption{TreeVNCでの接続構造}
32 \label{fig:TreevncStruct} 32 \label{fig:TreevncStruct}
33 \end{center} 33 \end{center}
34 \end{figure} 34 \end{figure}
35
35 36
36 バイナリツリー状に接続することで、N台のクライアントが接続を行ってきた場合、従来のVNCではサーバ側がN回のコピーを行って画面配信する必要があるが、TreeVNCでは各ノードが最大2回ずつコピーするだけで画面配信が可能となる。 37 バイナリツリー状に接続することで、N台のクライアントが接続を行ってきた場合、従来のVNCではサーバ側がN回のコピーを行って画面配信する必要があるが、TreeVNCでは各ノードが最大2回ずつコピーするだけで画面配信が可能となる。
37 38
38 送信されるデータは従来の方法だとN個のノードに対してN-1回の通信が必要である。これはバイナリツリー状の構造を持っているTreeVNCでも通信の数は変わらない。 39 送信されるデータは従来の方法だとN個のノードに対してN-1回の通信が必要である。これはバイナリツリー状の構造を持っているTreeVNCでも通信の数は変わらない。
39 40
40 バイナリツリーのルートのノードをRoot Nodeと呼び、そこに接続されるノードをNodeと呼ぶ。Root Nodeは子Nodeにデータを渡す機能、各Nodeの管理、VNCサーバから送られてきたデータの管理を行っている。各Nodeは、親Nodeから送られてきたデータを自身の子Nodeに渡す機能、子Nodeから送られてきたデータを親Nodeに渡す機能がある。 41 バイナリツリーのルートのノードをRoot Nodeと呼び、そこに接続されるノードをNodeと呼ぶ。Root Nodeは子Nodeにデータを渡す機能、各Nodeの管理、VNCサーバから送られてきたデータの管理を行っている。各Nodeは、親Nodeから送られてきたデータを自身の子Nodeに渡す機能、子Nodeから送られてきたデータを親Nodeに渡す機能がある。
41 42
43 \section{TreeVNCの通信プロトコル}
44 TreeVNCの通信経路としては以下が挙げられる。
45 \begin{itemize}
46 \item 任意のNodeからRoot Nodeに直接通信を行うsend direct message (Node to Root)
47 \item Root Nodeから任意のNodeに直接通信を行うsend direct message (Root to Node)
48 \item 任意のNodeから木構造を上に辿ってRoot Nodeまで通信を行う message up tree (Node to Root)
49 \item Root Nodeから木の末端のNodeまでの全てのNodeに通信を行うmessage down tree (Root to Node)
50 \item Root Nodeから配信者のVNCサーバへの通信を行う send message (Root to VNC Server)
51 \item 配信者のVNCサーバからRoot Nodeへの通信を行う send message (VNC Server to Root)
52 \end{itemize}
53
54 Node間で行われるメッセージ通信にはRFBプロトコルで提供されているメッセージに加え、TreeVNC独自のメッセージを使用している。TreeVNCで使用されるメッセージの一覧を表\ref{tb:messageTable}に示す。
55
56 \begin{table}[htbp]
57 \begin{center}
58 \tblcaption{通信経路とメッセージ一覧}
59 \scalebox{0.7}{
60 \begin{tabular}{|l|l|l|} \hline
61 通信経路 & message & 説明 \\ \hline \hline
62 & FIND\_ROOT & TreeVNC接続時にRoot Nodeを探す. \\ \cline{2-3}
63 send direct message & WHERE\_TO\_CONNECT & 接続先をRoot Nodeに聞く. \\ \cline{2-3}
64 (Node to Root) & LOST\_CHILD & 子Nodeの切断をRoot Nodeに知らせる. \\ \hline \hline
65
66 & FIND\_ROOT\_REPLY & FIND\_ROOTへの返信. \\ \cline{2-3}
67 send direct message & CONNECT\_TO\_AS\_LEADER & 左子Nodeとして接続する.接続先のNodeが含まれている. \\ \cline{2-3}
68 (Root to Node) & CONNECT\_TO & 右子Nodeとして接続する.接続先のNodeが含まれている. \\ \hline \hline
69
70 message down tree & FRAMEBUFFER\_UPDATE & 画像データ.EncodingTypeを持っている.\\ \cline{2-3}
71 (Root to Node) & CHECK\_DELAY & 通信の遅延を測定する. \\ \hline \hline
72
73 message up tree & CHECK\_DELAY\_REPLY & CHECK\_DELAYへの返信. \\ \cline{2-3}
74 (Node to Root) & SERVER\_CHANGE\_REQUEST & 画面切り替え要求. \\ \hline \hline
75
76 & FRAMEBUFFER\_UPDATE\_REPLY & 画像データの要求. \\ \cline{2-3}
77 send message & SET\_PIXEL\_FORMAT & pixel値の設定. \\ \cline{2-3}
78 (Root to VNCServer) & SET\_ENCODINGS & pixelデータのencodeTypeの設定. \\ \cline{2-3}
79 & KEY\_EVENT & キーボードからのイベント. \\ \cline{2-3}
80 & POINTER\_EVENT & ポインタからのイベント. \\ \cline{2-3}
81 & CLIENT\_CUT\_TEXT & テキストのカットバッファを持った際のmessage. \\ \hline \hline
82
83 & FRAMEBUFFER\_UPDATE & 画像データ.EncodingTypeを持っている. \\ \cline{2-3}
84 send message & SET\_COLOR\_MAP\_ENTRIES & 指定されているpixel値にマップするRGB値. \\ \cline{2-3}
85 (VNCServer to Root) & BELL & ビープ音を鳴らす. \\ \cline{2-3}
86 & SERVER\_CUT\_TEXT & サーバがテキストのカットバッファを持った際のmessage. \\ \hline
87 \end{tabular}
88 }
89 \label{tb:messageTable}
90 \end{center}
91 \end{table}
92 \newpage
93
42 \section{木の再構成} 94 \section{木の再構成}
95 TreeVNCはバイナリツリー状での接続のため、Nodeが切断されたことを検知できずにいると構成した木構造が崩れてしまい、新しいNodeを適切な場所に接続できなくなってしまう。そこで木構造を崩さないよう、Node同士の接続の再構成を行う必要がある。TreeVNCの木構造の接続形態はRoot Nodeが持っているnodeListというリストで管理をしている。つまり、Nodeの接続が切れた場合Root Nodeに切断を知らせなければならない。
96
97 配信側の画面が更新されるとVNC Serverから画像データが
98
99 TreeVNCは後述するLOST\_CHILDというメッセージ通信でNodeの切断検知
43 100
44 101
45 102
46 \section{圧縮方式}
47 103
48 \section{ShareScreen} 104 \section{ShareScreen}
49 105
50 106
51 107