P2P技術を学びたいです

とある本でP2P技術の例としてSkypeが挙げられており、私が今まで想像していた物が全て覆り、すばらしい技術と言う事を知ったからです。
しかしP2P技術を学ぶといっても漠然としすぎていて、何からはじめて良いのかが分かりません。
ツイッターでも同じような事をいったところ、ある方から勉強会を進められて、行ってみようとおもい探してみましたがみつかりませんでした。
P2P技術学ぶためには何からはじめれば良いのでしょうか

回答の条件
  • 1人10回まで
  • 登録:2011/06/21 23:53:49
  • 終了:2011/06/28 23:55:03

回答(1件)

id:longicorn No.1

longicorn回答回数56ベストアンサー獲得回数62011/06/23 01:25:02

P2P自体は作った事がありませんが、ネットワークプログラミングの経験があるのでその辺を書かせていただきます。


まず、P2Pといっても所詮はネットワークプログラミングの1形態です。

ですから、まずは通常のクライアント/サーバのプログラムが出来ないとお話になりません。


いくつかあげると、

  • ハードウェアであれば、ハブ、リピータ、ルータとか、ケーブルもストレートとクロスの違いとか。
  • ソフトウェア側であれば、TCP/IP、UDP、Rawソケット、Unixドメインソケット、プロセス間通信、等など各プロトコル、他には最近だとIPv4とIPv6とか。
  • デバッグをする場合は、バイトレベルでデータを見る必要がありますので、バイトオーダとかの知識も必要ですね。
  • P2Pをするのであれば、多対多通信を行うのですから、マルチプロセス/スレッド プログラミングは必須です。
  • プログラミング言語は今時ならば何を使っても構わないとは思いますが、可能ならば、C/C++等の低レベルプログラミングで直接プログラム出来た方が理解が深まると思います。理由としては、ネットワークプログラミングはOSの機能を使うからです。

次に、自分の勉強したときに使った本等へのリンクでも。

  • UNIXネットワークプログラミング

http://www.amazon.co.jp/dp/4894712059

http://www.amazon.co.jp/dp/4894712571

自分は当時はCでプログラムしていたので、結局本はこれだけで勉強しました。

今となっては古典と呼んでも良い本だと思いますが、IPv4やIPv6についてもキチンとかかれています。

ただし、すごい分厚さです。下手な辞書よりも分厚いので覚悟してください。


  • Programming UNIX Sockets in C - Frequently Asked Questions

http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja.html

FAQ形式なので、Cでは無くLLでも読み替えればそのまま適応できる内容です。

「UNIXネットワークプログラミング」は良い本なのは間違いないですが、問題にあたった時にはこちらの方が役に立ちます。


ともかく、簡単な所からスタートして、どんどんプログラムして、バグって、デバッグして前に進むことです。

かなり先は長いとは思いますが、頑張ってください。

id:armkryuhei

ご回答ありがとうございます。

予測はしていましたが、ネットワークプログラミングは必須なのですね。

ネットワークプログラミングはJava/VB等でチャットサーバ/クライアントを作ったり程度したしたことありませんでした。

UNIX自体が私には未知のOSなので勉強するのが楽しそうです。

紹介していただいた本/URLを勉強の参考にさせていただきたいと思います。

回答ありがとうございました。

2011/06/23 01:49:44
  • id:longicorn
    >ネットワークプログラミングはJava/VB等でチャットサーバ/クライアントを作ったり程度したしたことありませんでした。
    まったく未経験では無いのですね。だったら、問題無いでしょう。
    ネットワーク自体がUNIXから生まれたので、Unix系OSでは相性が良いですが、別にWindowsでも問題ありません。SkypeもWindowsで動きますよね。
    無理してUnix自体に手を出す必要は無いかと。
    ただ単に、自分が開発してきた環境がUnixだったというだけで。

    ともかく、Javaでも良いのでネットワークプログラミングになれることです。
    ネットワークプログラミングは、相手がいて、さらに普通のプログラミングとは違い、どうしてもハードウェアに依存する部分があります。
    通信中にケーブルが外れたり、無線だと通信相手が遠くに離れて通信出来ない場合とか色々。
    そういう部分で慣れれば、あとはOSや言語が変わるだけです。
  • id:armkryuhei
    >longicornさん

    コメントしていただきありがとうございます。
    日本語おかしかったですね;

    正しくは

    >ネットワークプログラミングはJava/VB等でチャットサーバ/クライアントを作ったり程度したしたことありませんでした。

    じゃなくて

    「ネットワークプログラミングはJava/VB等でチャットサーバ/クライアントを作ったり程度しかしたことがありませんでした。」

    です。


    >ネットワーク自体がUNIXから生まれたので、Unix系OSでは相性が良いですが、別にWindowsでも問題ありません。

    無理して手を出すつもりありませんが、こういうことを聞くと余計に勉強してくなってしまいます(笑)

    なのでUNIX勉強も視野に入れようと思っています。

    >ともかく、Javaでも良いのでネットワークプログラミングになれることです。
    >ネットワークプログラミングは、相手がいて、さらに普通のプログラミングとは違い、どうしてもハードウェアに依存する部分があります。
    >通信中にケーブルが外れたり、無線だと通信相手が遠くに離れて通信出来ない場合とか色々。
    >そういう部分で慣れれば、あとはOSや言語が変わるだけです

    なるほど。
    やはりネットワークプログラミングにも慣れは必要なのですね。
    ネットワークプログラミングには慣れてないのでJavaで慣らしつつの、

    >能ならば、C/C++等の低レベルプログラミングで直接プログラム出来た方が理解が深まると思います

    といっていただいたので、C/CPPのほうでもやって理解を深めつつ勉強していきたいと思います。

    コメントありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません