view presen/slide.html @ 34:a55afdfb536b

Add presen
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Thu, 18 Feb 2016 02:44:11 +0900
parents
children 8cf792825826
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>PC画面配信システムTreeVNCの NAT への対応</title>

<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin15]">
<meta name="author"    content="Tatsuki IHA, Shinji KONO" >

<!-- style sheet links -->
<link rel="stylesheet" href="s6/themes/projection.css"   media="screen,projection">
<link rel="stylesheet" href="s6/themes/screen.css"       media="screen">
<link rel="stylesheet" href="s6/themes/print.css"        media="print">
<link rel="stylesheet" href="s6/themes/blank.css"        media="screen,projection">

<!-- JS -->
<script src="s6/js/jquery-1.11.3.min.js"></script>
<script src="s6/js/jquery.slideshow.js"></script>
<script src="s6/js/jquery.slideshow.counter.js"></script>
<script src="s6/js/jquery.slideshow.controls.js"></script>
<script src="s6/js/jquery.slideshow.footer.js"></script>
<script src="s6/js/jquery.slideshow.autoplay.js"></script>

<!-- prettify -->
<link rel="stylesheet" href="scripts/prettify.css">
<script src="scripts/prettify.js"></script>

<script>
  $(document).ready( function() {
    Slideshow.init();

    $('code').each(function(_, el) {
      if (!el.classList.contains('noprettyprint')) {
        el.classList.add('prettyprint');
        el.style.display = 'block';
      }
    });
    prettyPrint();
  } );

  
</script>

<!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
<!--[if IE]>
<script src="s6/js/jquery.microsoft.js"></script>
<![endif]-->



</head>
<body>

<div class="layout">
  <div id="header"></div>
  <div id="footer">
    <div align="right">
      <img src="s6/images/logo.svg" width="200px">
    </div>
  </div>
</div>

<div class="presentation">

  <div class='slide cover'>
    <table width="90%" height="90%" border="0" align="center">
      <tr>
        <td>
          <div align="center">
            <h1><font color="#808db5">PC画面配信システムTreeVNCの NAT への対応</font></h1>
          </div>
        </td>
      </tr>
      <tr>
        <td>
          <div align="left">
            Tatsuki IHA, Shinji KONO
            
            <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
          </div>
        </td>
      </tr>
    </table>
  </div>

<div class='slide '>
<!-- === begin markdown block ===

      generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin15]
                on 2016-02-18 02:42:16 +0900 with Markdown engine kramdown (1.9.0)
                  using options {}
  -->

<!-- _S9SLIDE_ -->
<h1 id="section">画面共有を利用したコミュニケーション</h1>
<ul>
  <li>授業やゼミ等で、それぞれが PC 端末を持っている場合では、PC の機能を活かした コミュニケーションが可能である</li>
  <li>画面配信システム TreeVNC は参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる 仕組みを取っている。そのため, 多人数が参加しても処理性能が下がらない</li>
  <li>ツリー のルートが参照している VNC サーバーを変更することで、ケーブルの差し替えなしに画面の切替が行える</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevnc-">TreeVNC の問題点</h1>
<ul>
  <li>TreeVNC を実際に使用していく中で様々な問題が発生</li>
  <li>講義等を大学外の遠隔地から受けたい場合がある</li>
  <li>TreeVNC は NAT を越えた接続が行うことができない</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevnc--1">TreeVNC の問題点</h1>
<ul>
  <li>ゼミ等で発表者毎に画面切り替えを行う際、デュアルディスプレイを使っている学生がいた</li>
  <li>その際 VNC サーバーからはすべての画面データが送信されており、発表とは関係ない画面も配信されていた</li>
</ul>

<p><img src="./images/multidisplay.svg" alt="message" width="500" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-1">この発表は</h1>
<ul>
  <li>TreeVNC の概要
    <ul>
      <li>構造</li>
      <li>原理</li>
      <li>画面切り替え</li>
    </ul>
  </li>
  <li>今回の改良
    <ul>
      <li>NAT を越えた通信</li>
      <li>マルチディスプレイの対応</li>
    </ul>
  </li>
  <li>TreeVNC の評価
    <ul>
      <li>画像データ送信の遅延</li>
      <li>ネックになってるノードへの対処</li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevnc">TreeVNC</h1>
<ul>
  <li>TreeVNC は本研究室で開発している VNC を利用した画面配信システム</li>
  <li>参加したクライアントをバイナリツリー状で接続することで配信コストを分散させる</li>
  <li>スムーズな配信画面の切替を行う</li>
</ul>

<p><img src="./images/treeVnc.svg" alt="message" width="400" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="vnc">VNC</h1>
<ul>
  <li>VNC(Virtual Network Computing) は RFBプロトコルを用いて遠隔操作を行うソフトウェア</li>
  <li>サーバー側とクライアント側に分かれており、サーバーを起動し、クライアントがサーバーに接続を行うことで遠隔操作を可能とする</li>
</ul>

<p><img src="./images/vnc.svg" alt="message" width="600" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="rfb-">RFB プロトコル</h1>
<ul>
  <li>RFB(Remote Frame Buffer)プロトコルは VNC で用いられているプロトコル</li>
  <li>自身の画面をネットワーク越しに他者の画面に表示する</li>
  <li>Framebuffer と呼ばれるメモリ上に置かれた画像データを使用して画面表示を行う</li>
  <li>サーバーは Framebuffer が更新されるたびにクライアントに対して変更部分だけを送信する。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevnc--2">TreeVNC の構造</h1>
<ul>
  <li>Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている</li>
  <li>様々なメッセージで通信を行う</li>
  <li>クライアント同士をバイナリツリー状に接続する</li>
  <li>バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevnc-1">TreeVNCの原理</h1>
<ul>
  <li>ポート一本あたりの負荷
    <ul>
      <li>従来のVNC : Node数 * データ量</li>
      <li>TreeVNC   : (2(子供の数) + 1) * データ量</li>
    </ul>
  </li>
  <li>従来のVNCはNode数に比例</li>
  <li>TreeVNCはNode数に関係なく一定</li>
</ul>

<p><img src="./images/treeVncTheory.svg" alt="message" width="600" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-2">切断時の木の再構成</h1>
<ul>
  <li>TreeVNC はバイナリーツリーという特性上 Node の切断を検知できずにいると、Node 同士で構成された木構造が崩れてしまう</li>
  <li>TreeVNC は Node 切断の検知を LOST_CHILD というメッセージで行っている</li>
</ul>

<p><img src="./images/lostChild.svg" alt="message" width="800" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-3">共有画面切り替え</h1>
<ul>
  <li>TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている</li>
  <li>画面を配信されている側のビューワにある Share Screen ボタンが押す</li>
  <li>Root Node に SERVER_CHANGE_REQUEST を木構造を辿りながら送信</li>
  <li>Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を開始</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="direct-connection">Direct Connection</h1>
<ul>
  <li>NATを越えたネットワークからの接続は直接配信側の Root Node に接続を行うことで実現する</li>
  <li>Direct Connection した Node はそのネットワークの Root Node になる</li>
  <li>Direct Connection された Root Node では NAT を越えたネットワーク先の Node の管理を行わない</li>
</ul>

<p><img src="./images/directConnection.svg" alt="message" width="800" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-4">マルチディスプレイ</h1>
<ul>
  <li>画面切り替えの際のSERVER_CHANGE_REQUESTに共有するディスプレイの座標を付加する</li>
  <li>Root Node は 接続した VNC サーバーから画像データを要求する FRAME_BUFFER_UPDATE_REQUEST に受け取った座標を付加する</li>
  <li>VNC サーバーは要求された座標内の画像データを FRAME_BUFFER_UPDATE で Root Node に送信する</li>
</ul>

<p><img src="./images/shareScreenToMultiDisplay.svg" alt="message" width="800" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevnc-2">TreeVNCの評価</h1>
<ul>
  <li>木の深さによる画像データの遅延を調べる</li>
  <li>実験環境
    <ul>
      <li>実際に講義を受講している学生が TreeVNC を使用</li>
      <li>約20名の接続</li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-5">実測方法</h1>
<ul>
  <li>Root Node は 送信時間と画像データを持った CHECK_DELAY を 末端 Node まで木構造を辿りながら伝達する</li>
  <li>CHECK_DELAY を受け取った各 Node は 付加された送信時間を CHECK_DELAY_REPLY に付加し、 Root Node に送信する</li>
  <li>CHECK_DELAY_REPLY を受け取った Root Node は CHECK_DELAY の送信にどれだけ時間がかかったかの計算を行う</li>
</ul>

<pre lang="java"><code>// 遅延時間の計算
Long delay = System.currentTimeMillis() - time;
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-6">深さ1, 2</h1>
<p><img src="./images/depth1.svg" alt="message" width="450" />
<img src="./images/depth2.svg" alt="message" width="450" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-7">深さ3, 4</h1>
<p><img src="./images/depth3.svg" alt="message" width="450" />
<img src="./images/depth4.svg" alt="message" width="450" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-8">結果から</h1>
<ul>
  <li>画像データの伝達はほぼ1秒以内に収まっている</li>
  <li>容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の遅延が残っているためだと考えられる</li>
  <li>深さ3が遅い原因として1つの Node がボトルネックになっている事が判明した。</li>
  <li>ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-9">ネックになっているノードへの対処</h1>
<ul>
  <li>CHECK_DELAY_REPLY で Root Node は ネックかどうかのを判断をする</li>
  <li>ネックになっているなら、そのノードを木構造のリストから削除</li>
  <li>最後のノードを削除したnodeの場所に移動</li>
  <li>ネックになったところは三分木になる</li>
</ul>

<p><img src="./images/fixTree.svg" alt="message" width="800" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-10">まとめと課題</h1>
<ul>
  <li>今回TreeVNCの様々な問題点の解決を行った</li>
  <li>実験を行うことによりさらなる問題点が判明した</li>
  <li>実測で判明したネックになっているNodeへの対処</li>
  <li>NATを越えた画面切り替え</li>
  <li>追加した機能の評価方法を思考し、評価を行う</li>
</ul>

<!-- === end markdown block === -->
</div>


</div><!-- presentation -->
</body>
</html>