#はじめに
必要に駆られて今頃Qiita に登録、せっかくなので初投稿してみる。
##CCN とは
CCN はContent-Centric Networking のこと。実装方式や立ち位置によって少し呼称が変わる。
ICN(Information-Centric Networking) とか、NDN(Named Data Networking) とか、
CON(Content Oriented Network) とかとか。
ネットワーク層をロケータベースからID ベースにしようという提案。
現在、ネットワーク層はIP をベースとして全ての機器が繋がっている。
つまり、ホストベースで通信している。
が、しかし、昨今のユーザはそういう特定のホストに繋がることは求めてなくて
**「コンテンツ」**に繋がることを求めているんじゃないの?
アプリケーション層(主にWeb 通信)ではDNS 然り、LB 然り、
コンテンツを意識した動きをしてるよね?
だったら、ネットワーク層もコンテンツ中心の通信をしようよ!
・・・と言う感じの試みかと。
つまり、「IPアドレスベースの通信からコンテンツIDベースの通信に変えよう」
ということです。
コンテンツIDってなんぞ、ですが
これは実装方式によって色々あります。
**「コンテンツ」**に対してつけるID です。(そのまま)
ネットワークを成すプロトコルもコンテンツベースにしてしまった方が
色々と都合が良くない?という感じですね。
色々の部分はそれこそ色々と研究されてます。
セキュリティの観点からの試みもあります。
**「え IP どうするの?」**に対しては
IP は下層レイヤのプロトコルになるのだと思います。
この提唱は以下の論文が
世の中で注目を浴びた物の中では最初かなーと思います。
Jacobson, V. Networking named content.
In Proceedings of the 5th International Conference on Emerging Networking Experiments and Technologies (New York, NY, USA, 2009), CoNEXT ’09, ACM, pp. 1–12.
TCP の輻輳回避アルゴリズムで有名な殿堂入りのVan Jacobson さんですね。
ですので、今回の1.0 CCN Tutorial Demo もPARC が公開しているモノです。
この技術、気づけばぼちぼち商用化(国内でも)もかなり進んでいるようなので
今回投稿してみました。
#試験環境
以下の環境を使用しました。
- VMware Fusion Pro 7.1.3
CPU | 1 vCPU |
Memory | 1 GB |
Disk | 20 GB |
OS | Ubuntu 16.04 Server |
Package | standard system utilities, openssh server |
#環境構築
CCN Tutorial Demo を行うための環境を構築します。
Package Install
追加で必要なパッケージをインストールします。
$ sudo apt-get update
$ sudo apt-get install gcc make libevent-dev libssl-dev
Software Download
ここからソフトウェアをダウンロードしてきます。
自分の環境に合ったCCN Developer Kit とTutorial Demo sample application が必要です。
- CCN Developer Kit
$ wget http://www.ccnx.org/releases/ccnx-1.0-r20150302-x86_64.tgz
- Tutorial Demo sample application
$ wget http://www.ccnx.org/releases/ccnx-1.0-tutorial-r20150302-all.tgz
Software Install
1.CCN Developer Kit
- 解凍
$ tar xvfz ccnx-1.0-r20150302-x86_64.tgz
- 移動
$ sudo mv usr/local/ccn/ /usr/local/
2.Tutorial Demo sample application
- 解凍
$ tar xvfz ccnx-1.0-tutorial-r20150302-all.tgz
- インストール
$ cd ccnx-1.0-tutorial-r20150302/
$ ./configure --with-longbow=/usr/local/ccn \
--with-libparc=/usr/local/ccn \
--with-libccnx=/usr/local/ccn \
--prefix=$HOME/ccn
$ LD_RUN_PATH=/usr/local/ccn/lib make
$ make install
#やってみる
デモの内容はサーバプログラムとクライアントプログラムの間で
CCN を経由してコンテンツ(任意のファイル)のやり取りを行う、というものです。
Metis の起動
Metis はCCNx forwarder です。
$ cd ~/
$ /usr/local/ccn/bin/metis_daemon &
y-kawamata@ccn000:~$ Copyright 2015 Palo Alto Research Center (PARC), a Xerox company.
All Rights Reserved. Use is subject to license terms.
__ __ _ _
| \/ | ___ | |_ (_) ___
| |\/| | / _ \| __|| |/ __|
| | | || __/| |_ | |\__ \
|_| |_| \___| \__||_||___/
metis running port 9695 configuration-port 2001
y-kawamata@ccn000:~$
コンテンツの準備
適当なコンテンツをでっち上げます。
このファイル名がコンテンツIDになります。
$ mkdir Server
$ cd Server/
$ vi hoge_hoge_video
y-kawamata@ccn000:~/Server$ cat hoge_hoge_video
_________________
< Now I am a cock >
-----------------
\
\ /\/\
\ /
| 0 >>
|___|
__((_<| |
( |
(__________)
| |
| |
/\ /\
y-kawamata@ccn000:~/Server$
y-kawamata@ccn000:~/Server$ ls -la
total 12
drwxrwxr-x 2 y-kawamata y-kawamata 4096 May 8 23:31 .
drwxr-xr-x 6 y-kawamata y-kawamata 4096 May 8 23:31 ..
-rw-rw-r-- 1 y-kawamata y-kawamata 194 May 8 23:31 hoge_hoge_video
y-kawamata@ccn000:~/Server$
y-kawamata@ccn000:~/Server$ md5sum hoge_hoge_video
ea3d16e3cd7e0e1f3e274ed5e0f320f2 hoge_hoge_video
y-kawamata@ccn000:~/Server$
サーバの起動
コンテンツを作成した場所のパスを引数にして起動します。
$ $HOME/ccn/bin/tutorial_Server `pwd`
この時点でサーバのkeystore が生成されます。
y-kawamata@ccn000:~/Server$ ls -la
total 16
drwxrwxr-x 2 y-kawamata y-kawamata 4096 May 8 23:34 .
drwxr-xr-x 7 y-kawamata y-kawamata 4096 May 8 23:37 ..
-rw-rw-r-- 1 y-kawamata y-kawamata 194 May 8 23:31 hoge_hoge_video
-rw------- 1 y-kawamata y-kawamata 1662 May 8 23:34 tutorialServer_keystore
y-kawamata@ccn000:~/Server$
クライアントでサーバからコンテンツを取ってくる
別窓を開きます。
同じホスト内でCCN を形成しています。
$ mkdir Client
$ cd Client/
フォルダの中身が空であることを確認します。
y-kawamata@ccn000:~/Client$ ls -la
total 8
drwxrwxr-x 2 y-kawamata y-kawamata 4096 May 8 23:37 .
drwxr-xr-x 7 y-kawamata y-kawamata 4096 May 8 23:37 ..
y-kawamata@ccn000:~/Client$
hoge_hoge_video (=コンテンツID) の取得をCCN 内に要求します。
つまり、この方式ではコンテンツID が既知であることが前提です。
$ $HOME/ccn/bin/tutorial_Client fetch hoge_hoge_video
File 'hoge_hoge_video' has been fully transferred in 1 chunks.
確認
クライアントのフォルダ内にサーバのフォルダ内で作ったコンテンツが
取得されている事を確認します。
y-kawamata@ccn000:~/Client$ ls -la
total 16
drwxrwxr-x 2 y-kawamata y-kawamata 4096 May 8 23:38 .
drwxr-xr-x 7 y-kawamata y-kawamata 4096 May 8 23:37 ..
-rw-rw-r-- 1 y-kawamata y-kawamata 194 May 8 23:38 hoge_hoge_video
-rw------- 1 y-kawamata y-kawamata 1662 May 8 23:38 tutorialClient_keystore
y-kawamata@ccn000:~/Client$
y-kawamata@ccn000:~/Client$ cat hoge_hoge_video
_________________
< Now I am a cock >
-----------------
\
\ /\/\
\ /
| 0 >>
|___|
__((_<| |
( |
(__________)
| |
| |
/\ /\
y-kawamata@ccn000:~/Client$
y-kawamata@ccn000:~/Client$ md5sum hoge_hoge_video
ea3d16e3cd7e0e1f3e274ed5e0f320f2 hoge_hoge_video
y-kawamata@ccn000:~/Client$
> y-kawamata@ccn000:~/Server$ md5sum hoge_hoge_video
> ea3d16e3cd7e0e1f3e274ed5e0f320f2 hoge_hoge_video
> y-kawamata@ccn000:~/Server$
#さいごに
ざっくりとした説明、ざっくりとした動作確認でした。
これだけだとCDN か何かみたいですね。
ファイル共有とかファイル転送のアプリの様な・・・・。
次回は気が向いたらCCNx とか PyCCN の環境構築の記事でも書いてみようかなと思います。
PyCCN 使ってCCN らしいことをしました!って記事も書いてみたいですね。
何かアイデア無いかな。