Virtual Network Computing(ヴァーチャル・ネットワーク・コンピューティング、略称VNC)は、ネットワーク上の離れたコンピュータを遠隔操作するためのRFBプロトコルを利用する、リモートデスクトップソフトである。VNCはクロスプラットフォームなソフトウェアとして開発されているため、インストールされているマシン同士はOSなどのプラットフォームの種類に依存することなく通信できる。

VNCの最初のバージョンは Olivetti & Oracle Research Lab によって開発されたが、オリジナル版のソースコードがGPL方式のライセンス下でオープンソースとして公開されているため、現在では様々な派生ソフトが誕生している。

## 概要

このソフトウェアはサーバソフトと、クライアントソフトの2つに分かれている。

操作される側でサーバソフトを起動しておき、遠隔操作する側はクライアントソフトを起動させ接続、遠隔操作を行う。

VNCで通信プロトコルとして使用されるRFB Protocolは非常に簡素なプロトコルで、サーバ側はピクセルデータ化した画面を小さな長方形に分け、位置を指定してクライアントに送信するだけである。しかし、この方法は非常に単純であると同時に、大きな帯域幅を使用する。そこで、帯域幅の削減のために様々な方法が編み出された。様々なエンコード形式やデータ圧縮がこれに該当するが、最も単純な方法は、前の送信と比較して変更された部分のみを送信する方法である。これはマウスポインタの移動のみが行われた場合などには非常に有効だが、全体的な変化の大きい動画再生をしている画面などを送信するには適していない。それはネットワークが十分に高速であっても変わらない。なお、このような拡張プロトコルを使用するには、サーバとクライアント双方のソフトウェアがその形式に対応している必要がある。

デフォルトではTCPの5900から5906までのポート番号を使用する。また、ウェブブラウザ上で動作するJava版のクライアントは、既定で5800から5806までのポートを使用する。これらは設定によって変更可能である。通常はポート毎に(物理デスクトップとも)独立した仮想デスクトップセッションを提供する。同じポートにアクセスする複数のクライアントは同じデスクトップを共有する。

WindowsはシングルセッションOSのため、5900番以外のポートを使用することは少ない。クライアント(ビューア)は物理デスクトップのミラリング・イメージを見ることになる。ターミナルサービスと違い、Windowsにログインしているユーザに無関係であり、また仮想デスクトップのサイズは物理デスクトップのサイズになるので両者が異なるとレターボックスやスクロールなどの効果が生じる。

## メリット

当項目冒頭にもあるとおり、VNCはマルチプラットフォームでのGUIの遠隔操作が可能である。Linuxの操作をWindowsから、あるいはその逆でWindowsの操作をLinuxからなど、自由度が高い。派生ソフトのMetaVNCにおいてはLinux上のウインドウ毎にVNCビューアを開くことができる。

また、タブレット端末からVNCを利用して自宅のPCを操作し、ファイルの送受信、テレビ録画予約などが可能である。

CPU切替器という商品があり、複数台のPC、複数のOSを一組のモニタ、マウス、キーボードで操作できるが、これをVNCで代用することもできる。

PC操作を教える側、教わる側が傍にいなくても、実際に操作して見せて説明ができる。これに特化したのがMultiVNCと言えるが、他の派生VNCでも充分な場面が多い。

ネットワーク管理者が、施設内の複数のPCのメンテナンスを行う際、時間やコストを削減するのに役立てる場合がある。

外出先から、あるいは前述の管理者がVNCを利用する場合、電源の切れているPCはWake-on-LANを利用することで電源を入れることができる。こういった複合的な手段で多様な可能性がある。

## デメリット

### 暗号化

オリジナルのVNCは通信に暗号を用いないため、パスワード等を含め全て平文で送信される。このため、Telnet等と同じく危険なプロトコルであり、使用には注意が必要である。

ただし、よりセキュリティの高いSSHやVPNをトンネルして接続することも出来る。また、派生バージョンでは、TLSで暗号化したり、NTLM認証が可能であったりと、セキュリティ面の強化が図られているものもある。

SSH によるポートフォワーディングは、5900 番ポートを転送するには、OpenSSH の場合は `ssh -NT -L localhost:5900:localhost:5900 -i 秘密鍵のパス ユーザー名@ホスト名` をクライアント側のパソコンで実行すれば良く、VNC クライアントは localhost の 5900 番ポートに対して接続する。

全てのサーバソフトウェアと同じように、外部からの使用するポートへの通信がファイアウォールやルーターでブロックされていた場合は、VNCを利用することは出来ない。また、セキュリティ上危険であるため、平文プロトコルは原則として開けるべきではない。

### VNCループ

以下、いずれも合わせ鏡のような状態を作り出すことによって起こる現象。ただし厳密には、ポート開放など正常な動作を確認するために用いられる場合もある。

- ひとつのマシン上でクライアントとサーバを起動し自分自身に接続した時。
- 2台のコンピュータがお互いにもう一方を操作しようとした場合に、VNCループと呼ばれる現象が起こることがある。マシンAで画面変化があった時、それがマシンBに送信され表示されると同時にさらにマシンBの画面変化としてマシンAに送信され...と繰り返す状態。場合によっては無限ループに陥ることもあり、マシンパワーを消費しコンピュータのフリーズを引き起こす事もあるので注意が必要である。

### 音声

サウンド出力はVNCで送受信できない。

## 対応OS

また、TridaVNC、ChromiVNC、μVNC、WinVNC、UltraVNCなどの本家から派生したものがあり、Palm OS、携帯電話ならBREW上でも対応している。

Mac OS X v10.5では、VNCクライアント「画面共有」及びVNCサーバが内蔵されている。

- VNCクライアントを利用する場合は、Finderのサイドバーの共有に表示されている機器を選択し「画面共有...」を選ぶか、IPアドレスを入力して使う場合は、「/システム/ライブラリ/CoreServices/画面共有("/System/Library/CoreServices/Screen Sharing.app")」を起動する、またはFinderの「移動」メニューから「サーバへ接続...」を選び、サーバアドレスに「vnc://」+ IPアドレスを入力し接続する。
- VNCサーバを利用する場合、「システム環境設定」→「共有」→「サービス」で出てくるサービス一覧から「画面共有」 をオンにするか、「リモートマネージメント」をONにして画面右下にある「アクセス権...」ボタンを押すと出てくる設定パネル内で「VNC使用者が画面を操作することを許可」をオンし、VNC接続のためのパスワードを右の欄に設定する。

## VNCの開発元および派生

VNCはイギリスのケンブリッジでThe Olivetti & Oracle Research Lab (ORL)が開発した。Olivetti と Oracle Corporation の共同所有の研究所であった。オリジナル版のソースコードはGPL方式のライセンス下で公開された。

この研究所を1999年にAT&Tが買収したが2002年には研究所における開発業務をやめた。これにより、VNCは開発停止となった。
この後開発メンバーが新会社を設立し新版をRealVNCとして公開。直系のVNCである。

GPLライセンスで公開されたため、世界中の多くの開発者が様々な派生VNCを誕生させた。それぞれは独自の開発である。
サーバとクライアントの接続は、転送方式が同一であれば、別のVNCであっても論理的に可能である。

以下は本家以外のかつて開発されていたソフトウェア。

## 派生サービス

VNCを使った、商用・非商用のサービス。

中間サーバーによる橋渡しによって、リモート操作する側とされる側を“NAT環境であるか否か”やIPアドレス・ファイアウォールなどのネットワークの知識なしに利用できることなどが主な特徴。
従来、ファイアウォールのポート開放を必要とし、ポートスキャンなどのリスクがあったのに対し、IDによる管理ができるのでセキュリティリスクを管理しやすくする目的もある。

### 現行サービス

これまでオープンソースで改良されてきたVNCの様々な技術が盛り込まれている。

また、無料のアカウントを作ることで対価を目的としたサービスの提供などができると謳っている。

無料のアカウントを使うことでアカウントごとにアクセス権のあるコンピューターを操作できる。

操作される側がデュアルディスプレイの場合、自由に切り替えて操作することもできる。