書いた人と書いた理由
- ヤマシタ
- 積木製作の新人エンジニア
- http://tsumikiseisaku.com/
- 書いた理由
- ネットワーク周りの調査と勉強をした結果を、社内で共有するためにまとめた文章です。
- 非エンジニアの人ともイメージベースで通信についての知識を共有することが目的です。
- 免責
- 一次情報が少なくて、自分が専門学校の授業で聞いたうろ覚えの内容をもとに、改めて調べたものをまとめたりしています。間違っていたら指摘してください。
通信そのものについて
通信を分類するときは「方向性」「時間」「内容」から分類する。
- 接続するとは
- ネットワークにつながっているほかのコンピュータと通信を行う場合、IPアドレスという顔写真を使って相手がネットワークのどこにいるかを探すところから始まる。
- これは行方不明の人探しに近い状態で、知り合いや通りすがり、交番などを頼りに、通信相手を知っている人がいないかを聞いて歩くようなもの。
- ただし、近い過去に似たような問い合わせがあると、特に交番のおまわりさんなどは相手を覚えているので、あまり広い範囲で探し回らなくても出合わせてくれる。
- IPアドレスが実世界の住所に相当するという説明も間違っていないものの、接続そのものについて考えるときはこういうイメージのほうが近いと思う。
方向性による通信の分類
- 単方向通信
- サーバー・クライアント・モデル。
- 情報を保存・提供する「提供者(サーバー)」が用意され、そこに「非提供者(クライアント)」がアクションします。
- 原則的に、クライアントのアクションによってサーバーがサービスの提供を行い、サーバーが主体となってふるまうことはありません。
- このアクションとは、通信を利用した「働きかけ」であり、この働きかけを行うための窓口として「ポート(港)」を開いておく必要があります。
- この接続(返答)時間を工夫することで、サーバー側からも働きかけができるようにする方法もあります。詳しくは後述。
- 他のクライアントと通信するときも間に「特定のサーバー」を挟んで通信するので、エンジニアとしてはサーバーの開発に注力することで接続全体を安定できるなどのメリットがある。
- ただし、接続の中心になるサーバーへの負担が大きくなりやすいことも問題。
- 双方向通信(P2P式)
- 今回の主役。WebRTCもP2P方式。
- 基本的に、自分と相手の双方がアクションを行う通信形式。
- それぞれがサーバーとクライアント両方の役割をもっていて、自分がアクションするときはクライアントしてふるまい、アクションを受けるときはサーバーとしてふるまいます。
- 単方向では特定のサーバーに通信が集中したが、P2Pでは別のサーバーでも役割を果たせるように、全体に責任が分散した設計がされるため、負担がどこかに偏るということは少ないです。
- 動画チャットなどでサービスの利用者同士が通信する場合は、間にサーバーを挟まない分だけ通信速度なども有利。
- ただし、直接互いの機器がやりとりするため、セキュリティや接続の安定性などについては課題となりやすいです。
時間による通信の分類
- 使い捨ての接続
- 前述の「接続するとは」という説明の通り、人探しをしてから接続をしているが、一時的な伝言くらいの要件なら伝えたあとは相手の居場所などは覚えないし、関係もその場で終わりになります。
- 何かの事情で再び接続する必要ができた時には、人探しを最初からやることになります。
- 持続的な接続:ソケット
- 電話のように一瞬で終わらないやり取りをする場合、相手がどこにいるか、自分がどこにいるかを記録して、それを使って行き来する事になります。
- 仮想的につながっている状態になるため、サーバーの内部で情報の変化が起きた場合などに、サーバーからもアクションがおこせます。
- これを使うことで、実質的にクライアント同士の双方向通信ができているようにも見せられます。ニコニコ生放送などはこちら。
- ただしあくまで、主体として接続しているのはクライアント。
- 詳しく調べる場合、ポーリング、ロングポーリングなどの用語から調べましょう。
通信の内容による分類
- 通信の工夫
- 通信によって情報を送る場合は、自分と相手の間でバケツリレーをするような状態になります。
- 荷物のほうから考えると、送り主から相手に対して、それぞれが個別に移動していくわけです。
- このとき、インターネットでは荷物を受け取る相手のために「手間がかかるけど確実に順番通り届く工夫」をするかどうかを選べます。
- 早いけど不安定:UDP
- 面倒な工夫はしません。
- とにかく手間をかけずに最速で送信して、届いた順番に開封されます。
- 受け取った側では届いていないものがあっても気づけません。
- 確認方法ありの安全ゆっくり通信:TCP
- 「手間がかかるけど確実に順番通り届く工夫」をしているほうです。
- 具体的には、何個ある荷物の何番目なのかという情報や、他の荷物と一緒に開封したときにあらわれる合言葉(Hash)を使った、順番や中抜けの確認が行われます。
参考資料(18/3/13)
- 資料名 (googleによる最終更新日)
- 対象ページURL
- Peer to Peer
-https://ja.wikipedia.org/wiki/Peer_to_Peer - Polling (computer science)
- https://en.wikipedia.org/wiki/Polling_(computer_science)
- HTTP/2における双方向通信とgRPCとこれから
- https://qiita.com/namusyaka/items/71cf27fd3242adbf348c