4月17日はQueenの日!フレディ・マーキュリーの年代別ファッション&ヒットソングまとめ

一般人のパソコンと直接やりとりするかサーバーを相手にするかが違うというのは知っているのですが、
p2p通信のほうが後から生まれたということはp2p通信のほうが複雑ということですか?

サーバーと比べて、個人をあて先として指定するのは難しいからかと思っていましたが、さっき調べたら「URL」も「IPアドレス」も同じようなものとのことだったので、逆に何が技術的に違うのか分からなくなりました。

A 回答 (2件)

> p2pとクライアントサーバシステムの違い



クライアント・サーバは接続を要求する側(クライアント)と接続を許可する側(サーバ)が明確なモデルです。HTTPサーバやSSHサーバなどサービスを提供する側(サーバ)と受ける側(クライアント)が明確なモデルであるとも言えます。
P2Pは基本的に端末-端末間通信で、各端末は接続を要求する側にもなり、接続を許可する側にもなります。同様にサービスを提供する側にもなりサービスを利用する側にもなります。つまり各端末はサーバでもありクライアントでもあるのです。

> p2p通信のほうが複雑ということですか?

大抵の場合、P2Pの方が複雑になります。
P2Pの場合は上記のとおり各端末はサーバとクライアントの両方の機能を持つことになります。
また、ごく小さなネットワークならともかく、大規模なネットワークだと接続する端末は膨大で、サービスを受けるための通信相手をそこから見つけるための仕組みが必要になります(P2P Queryくらいで検索するとこのあたりの解説をしたサイトや論文がいくつも見つかると思います)。クライアント・サーバの場合はサーバアドレスだけわかればよいので、このような仕組みはいりません。
また、端末は頻繁に電源オンオフし、IPアドレスも変わります。この状態を適切に更新する仕組みも必要です。一方でクライアント・サーバの場合はサーバマシンの電源をオフすることは通常なく、IPアドレスも変わらないため、複雑な仕組みは不要です。

以上、参考になりますでしょうか
    • good
    • 0

>>p2p通信のほうが後から生まれたということはp2p通信のほうが複雑ということですか?



そのはずです。

また、クライアント・サーバ型の場合、クライアント側はディスプレイとキーボードとちょっとした通信装置だけの構成として、まともなコンピュータはサーバーのみとすることが可能です。

でも、p2pとなれば、通信に参加するのは、すべてまともなコンピュータが必要になります。
現在は、パソコンが安く買えますが、昔はそんなこと不可能でしたからね。
また、むかしは今のように誰もがインターネットに接続できたわけではありません。

大学か研究機関とかでないと無理でした。
しかも高い専用回線か、あるいは、普通の電話回線を使うことも多かったので、p2p接続なんて不可能です。

技術もそうだし、設備も、金銭的にもp2pするには障壁が高かったということですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q社内ネットワーク 外来者のWIFI接続

初めまして ネットワーク構築しようとしています駆け出し者です。
社内(小さい学校ですが)、社内ネットワークを構築しようと考えています。
職員スタッフの学内ネットワークですが、生徒のスマホやPC接続も出来るようにしたいと考えております。しかしながら、セキュリティーの面から生徒の接続と職員との接続は、アイソレーションを取りたく(生徒に職員データに侵入されたら困ります。)、2回線を引くしかなあと考えていました。
しかしながら、ゲストポート着きルーターがあるようなのですが、既にネットワーク構築のためのルーターを購入しました。ゲストポート付では無い物でもセキュリティーを保って接続させることは可能でしょうか?
以上 宜しくお願いします。

Aベストアンサー

ネットワークグループを分ければ良いです。
最大接続数が253台までなら クラスC でOKです。 (ゲートウェイ・プライベート・ブロードキャストを除く)
例)
ネットワークグループ1 192.168.10.0/24
ネットワークグループ2 192.168.20.0/24


私も学校に勤めていましたが、 行政系と一般生徒向けに ネットワークが分かれていました。
全て県の管理下で、学校単位でルーターの設定を変えることは禁じられていました。
また、無線LANを使用する場合は届け出が必要になっていました。
行政系においては、有線LANのみ。 接続する端末(NIC)のMACアドレスまで管理されていました。
ポートもかなりふさがれていました。
一般生徒向けは、プロキシサーバー経由でないとHTTP接続できず、閲覧サイトも管理(フィルタリング)されていました。

あなたが勤務している学校のWAN側の形態が把握できれば、具体的な案が提示できます。

無難なところでいけばルーターの下位にルーターを設置することですね。
必要に応じて下位のルーターをポートフォワーディングすればよいでしょう。

ネットワークグループを分ければ良いです。
最大接続数が253台までなら クラスC でOKです。 (ゲートウェイ・プライベート・ブロードキャストを除く)
例)
ネットワークグループ1 192.168.10.0/24
ネットワークグループ2 192.168.20.0/24


私も学校に勤めていましたが、 行政系と一般生徒向けに ネットワークが分かれていました。
全て県の管理下で、学校単位でルーターの設定を変えることは禁じられていました。
また、無線LANを使用する場合は届け出が必要になっていました。
行政系においては、有線LA...続きを読む

Q通信速度という単語はおかしくないですか?

最近、1秒あたりに何メガ・何ギガの容量のデータを送ることができるかというのを「通信速度」と呼ぶのが一般的になっているようです。
でも、通信速度は光速(1C≒秒速30万km)で一定であり、違うのは1秒あたりに送れるデータ量だけのはずなのに、どうして「通信速度」という用語を使うのでしょうか?
少し前までは「ブロードバンド」という呼び方が一般的であり、そちらの方が正確な呼び方に近いと思います。

Aベストアンサー

No4さんにディスられたのかな。
「通信速度」については、一般には時間あたりのデータの流量の意味で使うことは
質問者さんも私もわかっていますよ。
#多分、確証バイアスが強い人なんだろうと思う・・・

それはともかく
「通信速度」という用語があいまいと書いた理由ですが、

IP通信ではパケット(小包)を使って説明することが多いので、
それになぞらえますが、
アメリカから日本に大量の小包を継続して送る場合、
通信の速度は次元の異なる下記の2つの値といえるかと思います。

1つ目は
アメリカから日本へ、小包が何日で着くか。
2つ目は
小包が一日あたり何個着くか。

1つ目は「遅延」、2つ目は「帯域(ビットレート、スループットもよく使います)」
になることはNo3で書いたとおりです。

「通信速度」はもともとこの2つの意味を持っています。
ただ、どちらの意味で使っているのか
話の流れを読まないとわからないのであいまいな用語なのです。
また、一般には2つ目の使い方でしか使われなくなっていますが、
質問者さんがそれに違和感があるというのは正しいというか
鋭い感覚と思います。

一般に2つ目の意味でしか使われないのは、
昔からコンピュータ通信では2つ目の数値ほうがより重要だったからです。
ただ、今はFPSのようなゲームや双方向の音声通信や映像通信など、
1つ目のほうを重要視する方も結構います。
ちなみに、5Gでは1つ目の強化もかなり進むらしいです
("MEC"で調べてみてください)。

以上、参考になりますでしょうか。

No4さんにディスられたのかな。
「通信速度」については、一般には時間あたりのデータの流量の意味で使うことは
質問者さんも私もわかっていますよ。
#多分、確証バイアスが強い人なんだろうと思う・・・

それはともかく
「通信速度」という用語があいまいと書いた理由ですが、

IP通信ではパケット(小包)を使って説明することが多いので、
それになぞらえますが、
アメリカから日本に大量の小包を継続して送る場合、
通信の速度は次元の異なる下記の2つの値といえるかと思います。

1つ目は
アメリカから日本...続きを読む

Q電卓は、計算式によって計算スピードが変わりますか? そうだとしたら、最も計算に時間がかかる式は何です

電卓は、計算式によって計算スピードが変わりますか?
そうだとしたら、最も計算に時間がかかる式は何ですか?(電卓の表示可能桁数は10桁とする)

Aベストアンサー

電卓は計算しているのではありませんよ。
あらゆる式に対応している記録データを表示しているにすぎません。

QプライベートIPアドレスについて

会社のPCのIPアドレスを調べたら「192.168.0.60」、「192.168.0.63」、「192.168.0.59」のようになっておりました。
「192.168.0.xxx」になるのはルーターの設定なのでしょうか?
ルーターの設定を意図的に変更しなければ「192.168.0.xxx」のままという事でしょうか?

ご存知の方がおられたら教えてください。

Aベストアンサー

PCのIPアドレスを手動で設定していなければ、DHCPによってPCの電源が入っている間だけ一時的に192.168.0.xxxのアドレスが割り当てられています。厳密にはルータとDHCPは別の機能なので、それぞれ別々の機器が担っている可能性もありますが、アドレス帯(192.168.0.0/24)からすると、DHCP機能が内蔵されているルータを利用しているっぽいですね。

以下では、DHCP機能が内蔵されているルータを利用しているという前提で回答します。

>ルーターの設定を意図的に変更しなければ「192.168.0.xxx」のままという事でしょうか?

もうちょっと正確に言うと、ルーターの設定を意図的に変更しなければ、初期値として割り当てられているネットワークアドレスのまま、ということになります。このネットワークアドレスは機器によってまちまちですが、多くのパターンではご質問者様の会社のような「192.168.0.0/24」か、「192.168.1.0/24」あたりだと思います。

意図的に変更する場合は、次の2つ、もしくは3つの設定を変更する必要があると思います。
・ルーターのLAN側IPアドレス(きっと、現時点では192.168.0.1だと思います。PCのコマンドプロンプトで「ipconfig」とコマンドを打ち込んだ時の「デフォルトゲートウェイ」欄に表示されるIPアドレスです)
・ルーターのネットワークアドレス(これは、ルーターのLAN側IPアドレスの設定と同時にネットマスク(ネットワークプレフィクス)まで指定できるものでは、この設定項目がない機種もあります)
・DHCPの払い出しアドレス設定(たとえば192.168.0.50~192.168.0.99まで払い出す、みたいな設定がされていると思います)

PCのIPアドレスを手動で設定していなければ、DHCPによってPCの電源が入っている間だけ一時的に192.168.0.xxxのアドレスが割り当てられています。厳密にはルータとDHCPは別の機能なので、それぞれ別々の機器が担っている可能性もありますが、アドレス帯(192.168.0.0/24)からすると、DHCP機能が内蔵されているルータを利用しているっぽいですね。

以下では、DHCP機能が内蔵されているルータを利用しているという前提で回答します。

>ルーターの設定を意図的に変更しなければ「192.168.0.xxx」のままという事でし...続きを読む

Q再帰処理をループ処理に変換

趣味プログラマです。

このカテゴリ一個前の質問
https://oshiete.goo.ne.jp/qa/10782948.html
のご回答の中で
> 関数の再帰呼び出しは必ずループで置き換えられる
というものがありました。
このこと自体は、以前にも目にしたことがあるのですが、変換例はいずれも単純な再帰関数のものでした。

そこで質問なのですが2分木を辿るような再帰プログラムの場合は、どの様なループ処理に変換されるのか、教えてください。
具体的なソースをご提示いただければ嬉しいです(C言語でなくても有名どころの言語ならOKです)

また、その処理はメモリ使用の観点において、再帰よりも効率が良くなりますか?
個人的には、プログラム中にスタックの様なものを用意しなければならないので、あまり効率よくならない様な気がします。

ご回答よろしくお願い致します。

※以下は2分木の合計を再帰で求める例です。
----
#include <stdio.h>
#include <stdlib.h>

typedef struct Node_t Node;

struct Node_t {
int value;
Node* left;
Node* right;
};

Node* NewNode(int val){
Node* p = malloc(sizeof(Node));
p->value = val;
p->left = NULL;
p->right = NULL;
return p;
}

int Sum(Node* p){
int lsum = 0;
int rsum = 0;

if(p->left != NULL) lsum = Sum(p->left);
if(p->right != NULL) rsum = Sum(p->right);
return lsum + rsum + p->value;
}

int main() {
int sum = 0;
Node* header;
header = NewNode(10);
header->left = NewNode(20);
header->right = NewNode(30);
header->left->left = NewNode(40);
header->right->right = NewNode(50);

/*もっと深く2分木を作成 */

sum = Sum(header);
printf("%d\n", sum);

return EXIT_SUCCESS;
}
----

趣味プログラマです。

このカテゴリ一個前の質問
https://oshiete.goo.ne.jp/qa/10782948.html
のご回答の中で
> 関数の再帰呼び出しは必ずループで置き換えられる
というものがありました。
このこと自体は、以前にも目にしたことがあるのですが、変換例はいずれも単純な再帰関数のものでした。

そこで質問なのですが2分木を辿るような再帰プログラムの場合は、どの様なループ処理に変換されるのか、教えてください。
具体的なソースをご提示いただければ嬉しいです(C言語でなくても有名どころの言...続きを読む

Aベストアンサー

N分木の総舐めだとすると、こんな感じじゃないですか?
最初に言っておきますが、メモリ効率は平均的によろしくないです。
劣悪な(深い)木よりはましというレベルです。
平衡二分木のように随時木をメンテナンスしていれば別の方法の方が効率は良いと思います。
ただ、スタック領域のメモリ不足は少なくとも私の手元の環境ではエラー検出できませんが、
ヒープ領域のメモリ不足はエラー処理はできます。
DoS攻撃などで勝手に落ちられると困るので、
少なくとも蓄積データのフルダンプや全解放ごときで落ちる心配は取り去りたいという、
ささやかな、見る人によってはくだらないこだわりのような、しかし切実な問題です。

#define N 2
struct tree
{
struct tree *tr_parent; // 追加要素
struct tree *tr_next[N]; // データ構造の小修整
int tr_val;
int tr_ref; // 追加要素
};

int
sum_tree(struct tree *top)
{
struct tree *n, *prev;
int sum = 0;
int updown = 2;

for (n = top, n->tr_ref = 0, n->tr_parent = NULL, prev = n;
n != NULL;) {
if (updown == 0) {
// case down
n->tr_ref = 0;
n->tr_parent = prev;
}
if (n->tr_ref == N) {
sum += n->tr_val;
n = n->tr_parent;
updown = 1;
} else if (n->tr_next[n->tr_ref] == NULL) {
updown = 2;
n->tr_ref ++;
} else {
updown = 0;
prev = n;
n = n->tr_next[n->tr_ref];
prev->tr_ref ++;
}
}
return sum;
}

実際、再帰を使わないようにする変換方法の定式なんてないと思います。
しかし、再起でなければできない処理もなく、等価な別の処理方法はあると思います。

N分木の総舐めだとすると、こんな感じじゃないですか?
最初に言っておきますが、メモリ効率は平均的によろしくないです。
劣悪な(深い)木よりはましというレベルです。
平衡二分木のように随時木をメンテナンスしていれば別の方法の方が効率は良いと思います。
ただ、スタック領域のメモリ不足は少なくとも私の手元の環境ではエラー検出できませんが、
ヒープ領域のメモリ不足はエラー処理はできます。
DoS攻撃などで勝手に落ちられると困るので、
少なくとも蓄積データのフルダンプや全解放ごときで落ちる心配...続きを読む

Qc言語の課題がわかりません

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください。プログラムの途中経過と実行例を記しておきます。
#include<stdio.h>
int main(){
int x;
char a[256],b[256];

printf("Select Mode 1.Encryption, 2.Decryption :");
scanf("%d",&x);
if(a==1){
printf("Input passphrase :");
scanf("%s",a);
printf("Input key:");
scanf("%d",b);
}else{
printf("Input key:");
scanf("%d",b);

}

if(a==3){
printf("Invalid value\n");
}
return 0;
}
<実行例 1>
Select Mode 1.Encryption, 2.Decryption : 1
Input passphrase : password
Input key : $
TEWWSKV@
<実行例 2>
Select Mode 1.Encryption, 2.Decryption : 2
Input key : $
Code : TEWWSKV@
Decode : password
<実行例 3>
Select Mode 1.Encryption, 2.Decryption : 3
Invalid value

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください...続きを読む

Aベストアンサー

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

#include<stdio.h>
#include<string.h>

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf("Input passphrase : ");
scanf("%s", a);

printf("Input key: ");
scanf("%s", b);

} else if (x == 2) {
printf("Input key: ");
scanf("%s", b);

printf("Code : ");
scanf("%s", a);

printf("Decode : ");

} else {
printf("Invalid value\n");
return 0;
}

for (unsigned int i = 0; i < strlen(a); i++) {
r[i] = a[i] ^ b[0];
}

printf("%s\n", r);

return 0;
}

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

#include<stdio.h>
#include<string.h>

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf(...続きを読む

Qこのプログラムを教えてください。

このプログラムを教えてください。

Aベストアンサー

以下のPGで実現出来ます。
難解なところは特にありません。
初めて見る関数などの無いよう、敢えて四則演算を用いて解を導いています。
これを見て、数式の解を表現する1つの方法をぜひ身に付けて下さい。

/* 課題1 */
/* maru.c */

#include<stdio.h>
#include<string.h>
#define PI 3.14

int main() {

float d; /* 入力の直径 */
float e; /* 円周 */
float m; /* 面積 */
float s; /* 表面積 */
float v; /* 体積 */

printf("直径を入力してください[cm]: ");
scanf("%f", &d);

d = d / 2; /* 入力直径を半径に変換 */
d = d / 100; /* 入力値の単位変換 [cm]→[m] */

printf("(1)円の円周 [m] =%f\n", 2 * PI * d );
printf("(2)円の面積 [m2]=%f\n", PI * d * d );
printf("(3)球の表面積[m2]=%f\n", 4 * PI * d * d );
printf("(4)球の体積 [m3]=%f\n", (4.0 / 3.0) * PI * d * d * d);

return 0;
}

以下のPGで実現出来ます。
難解なところは特にありません。
初めて見る関数などの無いよう、敢えて四則演算を用いて解を導いています。
これを見て、数式の解を表現する1つの方法をぜひ身に付けて下さい。

/* 課題1 */
/* maru.c */

#include<stdio.h>
#include<string.h>
#define PI 3.14

int main() {

float d; /* 入力の直径 */
float e; /* 円周 */
float m; /* 面積 */
float s; /* 表面積 */
float v; /* 体積 */

printf("直径を入力してください[cm]: ");
scanf("%f", &d);

d = d / 2; /* ...続きを読む

Qこのプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたの

このプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたのですが、よろしければ教えてください

Aベストアンサー

No.1です、
念のための追加です。

日本語で「〇〇の値が××だったら、、、。そうでなかったら~。」といった表現で書かれたものが多くのプログラミング言語ではifを用いた処理になります。
同じく「〇〇の値が××になるまで、、、を繰り返す。」といった表現で書かれたものfor文やwhile文を用いた処理になります。

参考まで。

QCのif文の書き方の質問です

『x=a & j=1 』の様に、『&』の前後に式を書くことがありますか?
使ったことがないので、ここに質問させて頂いております。
コメント、説明頂けますと大変有り難いです。

if stype=='L' then
x=a & j=1 //===
elseif stype=='M' then
x=a+(h/2) & j=2//============
else x=a+h & j=3//=================
end

以上、宜しくお願いします。

Aベストアンサー

見た目から、命令の区切りに使っているように見えますが、
公式マニュアルを確認しても ; や , はありましたが & は見つけられなかったので断言はできません。

https://help.scilab.org/docs/6.0.1/ja_JP/comma.html
https://help.scilab.org/docs/6.0.1/ja_JP/semicolon.html

Q【電子工学】コンピュータサイエンスに詳しい人教えてください。 ノートパソコンは激安パソコンにもなぜか

【電子工学】コンピュータサイエンスに詳しい人教えてください。

ノートパソコンは激安パソコンにもなぜか液晶画面の上部にカメラが付いているのはアメリカ政府が監視するために廉価版にも付けさせるようにマイクロソフト社を恐喝してマイクロソフトはウィンドウズ10をプリインストールするメーカーに対してインカメラの搭載を義務化して付けないとOSの提供はしないとした。

廉価版は安く作る必要があるはずなのにどう見てもインカメラは不要のはず。

それを無理矢理付けさせているのは政府の陰謀があるに違いないと都市伝説を信じて来た。

で、今日、ノートパソコンを解体する日が来た。

分解するとインカメラは何とマザーボードとは別に液晶画面の半導体に繋がれていた。

なぜ液晶画面の半導体とインカメラを繋いでいる必要があるのでしょう?

黒線がマザーボードに繋がっていたもので、白線は液晶画面の裏の謎の半導体に繋がっている。

これはどういうことなのでしょうか?

Aベストアンサー

平易な陰謀論に乗せられるべきではないと思います。盲信も危険ですが。

その話はXbox OneのKinect(モーション検出)カメラの映像がアメリカ政府に流れているというのとごっちゃになってませんか?これはドイツで発覚して大騒ぎになり、このことがPS4とのシェア争いで負ける決定的なきっかけになりました。

http://jin115.com/archives/51951752.html

EUはアメリカの覇権主義的なやり方には、チクチクと嫌らしく反撃してきます。だからKinectと同様のことをWindowsでやらかして発覚したらどうなるか…

今のインターネットは通信内容は暗号化して秘匿できるけど、送信先は丸見えです。なので本来あり得ない通信相手への通信が混ざってると、調べる人が調べればすぐにバレます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

価格.com 格安SIM 料金比較