

VNC(Virtual Network Computing )は、リモートフレームバッファ(RFB )プロトコルを用いて他のコンピュータを遠隔操作するグラフィカルデスクトップ共有システムです。キーボードとマウスの入力をネットワーク経由で他のコンピュータに送信し、グラフィカル画面の更新を中継します。[ 1 ]この技術の一般的な用途としては、リモートテクニカルサポートや、自宅のコンピュータから職場のコンピュータのファイルにアクセスしたり、その逆を行ったりすることなどが挙げられます。
VNCはプラットフォームに依存せず、多くのGUIベースのオペレーティングシステムとJava用のクライアントとサーバーを備えています。複数のクライアントが同時にVNCサーバーに接続できます。VNCにはいくつかの亜種[ 2 ]があり、それぞれ独自の機能を備えています。例えば、Microsoft Windows向けに最適化されたものや、ファイル転送機能(VNC本来の機能ではありません)などです。多くのVNCは(追加機能はなくても)VNC本来の機能と互換性があり、ある種類のビューアから別の種類のサーバーに接続できます。また、VNCコードに基づいていますが、標準のVNCとは互換性がありません。
VNCは元々、英国ケンブリッジのOlivetti & Oracle Research Labで開発されました。その後、開発者はRealVNC Ltdを設立し、VNCとRFBを米国およびその他の国々で登録商標として主張しました。オリジナルのVNCソースコードと多くの派生製品は、GNU General Public Licenseに基づいてオープンソース化されています。
英国ケンブリッジのOlivetti & Oracle Research Lab (ORL) [ 3 ]は、 OlivettiとOracle Corporation が研究所を所有していた時代に VNC を開発しました。AT&T Research Lab 在籍中に VNC の開発に携わった開発者には、Tristan Richardson (発明者)、Andy Harter (プロジェクトリーダー)、Quentin Stafford-Fraser、James Weatherall、Andy Hopperなどがいます。[ 4 ] Virtual Network Computer/Computing (VNC)という名称は、同じく RFB プロトコルを使用する Videotile と呼ばれるシンクライアントに関する ORL の研究に由来しています。Videotile にはペン入力が可能な LCD ディスプレイと、ネットワークへの高速ATM接続が搭載されていました。当時、ネットワークコンピュータはシンクライアントの同義語としてよく使用されていましたが、VNC は基本的にソフトウェアのみの (つまり仮想の) ネットワークコンピュータです。
1999年にAT&Tがこの研究所を買収し、2002年に研究活動を終了しました。その後、開発チームのメンバー数名(リチャードソン、ハーター、ウェザーオール、ホッパーを含む)がRealVNCを設立し、その名義でオープンソースおよび商用VNCソフトウェアの開発を継続しました。2013年現在、RealVNC Ltdは「VNC」という用語を米国およびその他の国々で登録商標として主張しています。[ 5 ]
GPLライセンスのオリジナルソースコードは、VNCの他のいくつかのバージョンに取り入れられています。RFBプロトコルは拡張性を考慮して設計されているため、このような分岐によって互換性の問題が発生することはありません。VNCクライアントとサーバーは、ハンドシェイクによって互いの機能をネゴシエートし、両端でサポートされている最適なオプションを使用します。
VNCサーバーは、画面を共有するマシン上のプログラムです(物理的なディスプレイとは関係ない場合もあります。サーバーは「ヘッドレス」になることもあります)。クライアントが画面の制御を共有できるようにします。VNCクライアント(またはビューア)は、サーバーから送信された画面データを表示し、サーバーから更新情報を受信し、収集したローカル入力をサーバーに通知することでサーバーを制御するプログラムです。VNCプロトコル( RFBプロトコル)は非常にシンプルで、サーバーからクライアントへの1つのグラフィックプリミティブ(「指定されたX、Y座標にピクセルデータの四角形を配置する」)と、クライアントからサーバーへのイベントメッセージの送信に基づいています。
通常の動作では、ビューアはサーバーのポート(デフォルトポート:5900)に接続します。あるいは(実装によって異なりますが)、ブラウザからサーバー(デフォルトポート:5800)に接続することもできます。また、サーバーはポート5500で「リスニングモード」を使用してビューアに接続できます。リスニングモードの利点の一つは、サーバー側でポート5900(または5800)へのアクセスを許可するようにファイアウォールを設定する必要がないことです。設定はビューア側で行います。これは、サーバー側にコンピュータの専門知識がなく、ビューア側のユーザーがより詳しい場合に役立ちます。
サーバーは、フレームバッファの小さな四角形をクライアントに送信します。最も単純な形式では、VNC プロトコルは大量の帯域幅を使用することがあるため、通信のオーバーヘッドを削減するさまざまな方法が考案されてきました。たとえば、さまざまなエンコーディング(これらの四角形を転送する最も効率的な方法を決定する方法) があります。VNC プロトコルでは、クライアントとサーバーが使用するエンコーディングをネゴシエートできます。すべてのクライアントとサーバーでサポートされている最も単純なエンコーディングは、raw エンコーディングです。これは、ピクセル データを左から右の走査線順に送信し、元の全画面が送信された後は、変更された四角形のみを転送します。このエンコーディングは、画面の小さな部分だけが 1 つのフレームから次のフレームに変化する場合 (マウス ポインタがデスクトップ上を移動する場合や、カーソル位置にテキストが書き込まれる場合など) には非常に有効に機能しますが、多くのピクセルが同時に変化する場合 (ウィンドウをスクロールする場合や全画面ビデオを表示する場合など) には、帯域幅の要求が非常に高くなります。
VNCはデフォルトでTCPポート5900+ Nを使用します[ 6 ] [ 7 ]。ここでNはディスプレイ番号(通常、物理ディスプレイの場合は:0)です。いくつかの実装では、ポート5800+Nで基本的なHTTPサーバーを起動し、JavaアプレットとしてVNCビューアを提供します。これにより、Java対応のウェブブラウザから簡単に接続できます。クライアントとサーバーの両方が適切に設定されている限り、異なるポート割り当てを使用できます。最新のブラウザ向けのHTML5 VNCクライアント実装(プラグイン不要)も存在します[ 8 ] 。
低帯域幅でもインターネット経由でVNCを使用するには、両端にブロードバンド接続があれば容易です。ただし、接続を成功させるには、高度なネットワークアドレス変換(NAT)、ファイアウォール、ポート転送などのルーター設定が必要になる場合があります。ユーザーは、インターネット経由での利用を容易にするために、仮想プライベートネットワーク(VPN)技術を介して通信を確立するか、VPNをプロキシとして使用してLAN接続を確立するか、VNCリピーター(NATが存在する場合に便利)を介して通信を確立することができます。[ 9 ] [ 10 ]
さらに、VNC によって提供されるディスプレイは、サーバー上のユーザーが見ているディスプレイと必ずしも同じではありません。複数の X11 セッションを同時にサポートする Unix/Linux コンピューターでは、VNC は特定の既存の X11 セッションを提供するように設定することも、独自のセッションを開始するように設定することもできます。また、同じコンピューターから複数の VNC セッションを実行することも可能です。Microsoft Windows では、VNC セッションは常に現在のユーザーセッションです。
2014年7月にRealVNCはWayland開発者プレビューを公開した。[ 11 ] [ 12 ]
デフォルトでは、RFBは安全なプロトコルではありません。パスワードは( telnetのように)平文で送信されることはありませんが、暗号化キーと暗号化されたパスワードの両方がネットワークから盗聴された場合、クラッキングに成功する可能性があります。 [ 13 ]このため、パスワードは少なくとも8文字を使用することをお勧めします。一方、VNCの一部のバージョンでは8文字の制限があります。[ 14 ] 8文字を超えるパスワードが送信された場合、超過分の文字が削除され、切り捨てられた文字列がパスワードと比較されます。[ 15 ]
UltraVNCは、パスワード認証やデータ転送を含むVNCセッション全体を暗号化するオープンソースの暗号化プラグインの使用をサポートしています。[ 16 ]また、 NTLMおよびActive Directoryのユーザーアカウントに基づいて認証を行うこともできます。 [ 17 ]しかし、このような暗号化プラグインを使用すると、他のVNCプログラムとの互換性がなくなります。RealVNCは、商用パッケージの一部として、Active Directoryとの統合とともに、高強度のAES暗号化[ 18 ]を提供しています。 [ 19 ] TightVNCによると、TightVNCは画像データが暗号化されずに送信されるので安全ではありません。これを回避するには、SSH接続を介してトンネリングする必要があります[ 20 ](以下を参照)。
VNCはSSHまたはVPN接続を介してトンネリングすることができ、より強力な暗号化による追加のセキュリティ層が追加されます。[ 21 ]
VNCの使用に関する追加のセキュリティ上の懸念事項は、誰かがデバイスを制御する前に、使用しているバージョンがリモートコンピュータの所有者の承認を必要とするかどうかを確認することです。これにより、アクセスされたコンピュータの所有者が、事前の通知なしに誰かが自分のデバイスを制御していることに気付くという状況を回避できます。このセキュリティ機能は、RealVNCやUltraVNCなどの一部のVNCサーバーに実装されています。[ 17 ] [ 22 ]
Xvncは標準のXサーバーをベースにしたUnix VNCサーバーです。アプリケーションからはXvncはX「サーバー」(つまりクライアントウィンドウを表示する)として表示され、リモートVNCユーザーからはVNCサーバーとして表示されます。アプリケーションはXvnc上で通常のXディスプレイのように表示できますが、物理画面ではなく接続されたVNCビューア上に表示されます。[ 23 ]あるいは、画面、キーボード、マウスを備えたマシン(ワークステーションやネットワークサーバーなど)をセットアップし、VNCサーバーをサービスまたはデーモンとして起動・実行させ、画面、キーボード、マウスを取り外してマシンを目立たない場所に保管することもできます。
VNCは、クロスプラットフォームのリモートデスクトップシステムとして一般的に利用されています。例えば、Mac OS X用のApple Remote Desktop(およびバージョン10.5から10.13の「Back to My Mac」)はVNCと相互運用性があり、x11vncでUnixユーザーの現在のデスクトップがサポートされている場合はそのデスクトップに、TightVNCで別のX11セッションがサポートされている場合はそのセッションに接続します。Unixからは、VNCオプションが有効になっている場合はApple Remote DesktopでサポートされているMac OS Xセッションに、Microsoft Windows上で動作するVNCサーバーに接続します。[ 24 ]
VNC を実装するオープン ソース プログラムまたはライブラリには、KRDC、Krfb、Libvncserver、Remmina、TigerVNC、TightVNC、TurboVNC、UltraVNC、Veyon、Vinagre、VirtualGL、x11vnc、xpraなどがあります。