ファイルの扱いについて再勉強

ひとまずペンディング

Hidekichi

基本のダウンロード(Direct Download)

一般的なダウンロードで、サーバーに直接接続してそのサーバーからファイルを一対一でダウンロードします。

ダウンロード速度は、サーバーの帯域幅、サーバーへの接続数、使用しているインターネット回線速度に直接依存していて、サーバーが混雑しているとダウンロード速度が低下したり、ダウンロードが中断したりすることがあります。

もちろんサーバーに障害で発生したらサーバーダウンでダウンロードはできなくなります。

Torrent

TorrentはBitTorrentというP2P((ピアツーピア))プロトコルを利用したファイル共有システムです。これらは複数のユーザー間でファイルを共有します。

呼び名役割
Leecherリーチャー。ファイルをダウンロードする人の呼び名
Seederシーダー。ファイルを完全に持っている人あるいは、ダウンロードし終えた後にそのファイルを共有し続ける人
ファイルはダイレクトダウンロードはサーバーからダウンロードしていましたが、Torrentではそのファイルを持っている複数のシーダー及び一部ダウンロード済みの他のリーチャーから、ファイルの断片を少しずつ受け取る感じでダウンロードが進みます。

仕組みとしてはダウンロードしながら、既にダウンロードした断片を他のピアにアップロードも行い、それぞれの使用者が協力することで高速化をしています。

トラッカーと呼ばれるサーバーが仲介役となりそれぞれのピア(ユーザー)同士が互いに認識し接続するためのものになります。

DHT(Distributed Hash Table:分散ハッシュテーブル)/PEX(Peer Exchange)では、トラッカーに依存せず、ピア同士が分散的に互いの情報を共有して、接続先を見つけるための技術です。

Torrentファイル

ここには実際のファイルの内容が入っているのではなく、共有したいファイルのメタデータ(情報)が書かれています。

torrentファイルにはそのファイルが何であるかの情報やダウンロードしたファイルが正しいファイルであるかを確認するためのハッシュ値、トラッカーサーバーのアドレスが書かれており、テキストデータなのでとても小さいファイルです。

これらの情報からまずトラッカーのアドレス(サーバーの在処)をtorrentクライアントは探し、そこからシーダーやリーチャーのリストを取得します。このリストから各ピアに接続しファイルの断片をダウンロードしていきます。これらは同時にアップロードも行われます。

全ての断片が集まると結合されダウンロードが完了します。

1つのサーバーに多くの人が集中してしまうとサーバーが処理できずにサーバーダウンが引き起こることがありますがTorrentではピアがダウンロードしながらアップロードも行うため、人が多ければ多いほど高速にダウンロードが行えるという設計です。

ただし誰かが完成されたファイルを持っている必要があります。もし1つでもピースが足りないと他の人は全て1つ足りないピースの状態でそれ以上のダウンロードが行われないわけです。

マグネットリンク(Magnet Link)

ブラウザなどでマグネットリンクをクリックすると、そのリンクが登録されているTorrentクライアントが起動します。

マグリットリンクにはハッシュ値が含まれていて、それを頼りにDHT/PEXという技術を使ってそのハッシュ値を持っているファイルを共有しているピアをネットワーク上で直接探します。見つかれば、そのメタ情報(ファイル名やサイズ)を取得してその後ファイルの断片のダウンロードとアップロードが始まるという仕組みになっています。

トラッカーサーバーを通さずピアを探すため、より柔軟でトラッカーサーバーがダウンしていても影響されにくい利点があります。

Torrentファイルの利点

サーバー負荷がピア同士の接続で完結するので分散されるため多くの人が同時にダウンロードしても速度が安定しやすい傾向があります。誰かのファイルで一部が破損していたとしても違う誰かの正しい断片を取得できるので復元力があり、それらピアがいればダウンロードが継続して行えます。

マグリットリンクはtorrentファイルを事前にダウンロードする必要がないためファイルの共有が簡単でウェブサイトの負荷も軽減されます(ピア同士が共有するため)。ただし良いことばかりではなくピアが見つかるまで時間がかかったりすることがあるので人気のないファイルはダウンロードできないこともあったりします。

これらの総評

悪意のあるファイルを共有しようとする人や、商用や権利のあるファイルを無断でネット上に流そうとする人たちに使用されたりするので悪者だと決めつけられていますが、本来正しい使い方であればこんなに優れたプロトコルは他にも多くはなく、インターネットにおいて画期的なものであると言えると思います。

誰かがオフラインになってダウンロードできなくても違う誰かが同じものを共有していればそちらからダウンロードできるわけですし、ハッシュ値で正しいファイルが確認でき、正しい完全なファイルを持っている人がシーダーとなればそれは元のサーバーの代わりにもなるわけですから、特に大きなファイルを共有する場合は有用であると言えます。
また最も高速な接続をもつ相手から断片を取得しようと試みるのでネットワーク全体の帯域幅が効率的に利用されます。

だいたい悪い人たちというのはSNSを見てもわかるように、ウンコに群がるハエのように同じ話題を同じものを引用して圧倒的な速さで広めてしまいます。そういう性質がある以上、どんな技術でも悪用すればその拡散は有名なものであればあるほどに速く、そして広く広まってしまいます。

これらを事情がよくわからない人たちが悪い例だけを見てTorrentは悪だというわけです。それらより事情がわからない人は自分に何の被害がなくても、使用すらしていなくてもそれは悪だと決めつけます。

本来インターネットは情報の自由な共有と分散化がその精神であったはずです。日本にいても海外の情報が現地に行かずとも得られる、逆に自分の考えや意見が海外の人にも発信できる、そういうものであったはずなのです。

現在の世の中は面倒くさいが先に立って、あるいはそんなものに使う金はないとしたりして臭いものには蓋をすると言うことをします。先程の例で言えば、「ウンコを隠してしまえばハエは寄ってこない」という行動を起こすのです。
しかし皆さんも御存知のように、蓋をして隠されたものであってもそれを暴こうとする勢力があって、暴かれたが最後誰かがそれを見つけてまた群がります。なので根本的な解決方法は、それぞれの人が正しく使うしかないのです。

ファイルをシェアする方法

作成したファイルを誰かと共有するという場合に、例えばSNSでそれらが対応していると考えればそこにアップロードして不特定の人にダウンロードをしてもらうということができます。あるいは自身でサイトを開設しそこにリンクを作ることでも共有することができますが、それら作業はそこそこ手間であるのでできるだけ簡単にファイルをシェアしたいと考えるのはとても良くわかります。

写真や画像データをシェアするのに問題となるのは通信速度もありながらも、誰が誰にどういう方法で送るかということがまず挙げられます。iPhoneのように最初からAirDropのような機能があれば何をするわけでもなくその操作を覚えるだけなので、相手にも同じ環境があれば比較的簡単にファイルを共有することができます。

AirDrop

アップル製のデバイス間でWi-FiとBluetoothを利用して直接ファイルを送受信できる。これらは暗号化されていてセキュアであり、操作も簡単。
デメリットは、アップル製品間のみで使用可能というのと、範囲が9m以内ぐらいでしか使えず製品同士のやり取りになるので誰でも受信できる設定だと、知り合いでもなんでもない人がアップル製品を持って使用することで何かしらのスパム的なものを送られる可能性はある。

LocalSend

クロスプットフォーム(Windows、Linux、Android、iOS、macOS)で、Wi-Fiの同一ネットワークにいる者同士でのファイルの送受信ができる。暗号化・自己署名証明書による通信でセキュアではあり、無料のオープンソースで開発されているアプリ。
デメリットは同一LAN内にいる必要がある(WORKGROUPの設定が必要)。

クラウドストレージ(Google Drive、Dropbox、OneDrive、MEGA)

これらはインターネットを介し、ファイルを予めアップロードしておき、共有リンクなどで他者と共有できるサービス。
インターネットの環境があれば端末を問わずにアクセスできる点、ローカルのバックアップとしても使え、細かい共有権限も設定できる。つまりはリンクを知っている人とだけ共有するというような方法。

Snapdrop / Sharedrop (WebベースのAirDrop代替)

ブラウザ上で同一LAN内のデバイス間でファイルを送受信できる。P2P通信をWebRTCで実現。ブラウザのみでファイルのやり取りができるのが便利。LAN内であればインターネットは不要。
デメリットは、大容量ファイルには不向きと言われる。安定して送れない場合があるとか。デバイスがLAN内にいる必要があるというのはデメリットでもある。

これらの総評

近距離ですぐに渡したいという場合は、AirDrop、LocalSendSnapdropなどが適していて、大容量で信頼性もある状態で渡したい場合はクラウドストレージなどが良いかと思います。しかしクラウドストレージはファイル交換のために事前に準備したり、それらファイルを外部のスクリプトから参照する場合にそのままのリンクではできないなど不便な面もあります。

こういった中では、個人的にはLocalSendが最も便利に思います。家庭内LANや社内Wi-Fiなど、同一ネットワーク上でのファイルの送受信、各プラットフォーム(iOS、Windows、Android)などが混在していても可能です。それぞれがアプリを起動している必要はありますが識別名から相手を選ぶだけで1対1でも送れます。送信モードを選べば1対多数にも送れます。

ファイルを置いておくので勝手に持っていってと言う場合には向かないかも知れませんが、その場合はクラウドストレージに近い形のものを利用してそりリンクを共有したり、LAN内の共有設定などをするのが良いとは思います。
ただLAN内の管理で、「共有フォルダに該当ファイルを入れておくので見ておいて」という場合、メールでも同じようなことが起こるかもしれませんが、見るタイミングと、該当ファイルを作った人が更新する事態があった場合のタイミングでは、見る内容が異なる場合があるかも知れません。

この場合では、閲覧記録が残るようにして、更にファイルには自動同期とバージョン管理ができる必要があり、更に更新されたら更新されたと通知できる必要があるわけです。それらができない場合は、すぐに問題が起こるわけではないもののいつか問題が発生するおそれがあります。

Wormhole

Wormholeというサービスがあります。最大10GBまで無料で暗号化送信ができ、ファイルをドラッグするだけで即リンクを生成します。そのリンクは一度ダウンロードされたら失効(もしくは有効期限がある)で、登録不要、E2E暗号化など、とても便利な一方、最大24時間の保持期日があり長期保存ができないと言うデメリットもありますが、クラウドストレージを使用してすぐにファイルを交換するという用途であればとても便利です。
これらは一時ファイルなので痕跡が残らないという点もあり、便利な一方悪いことに利用される懸念もありながら正しく利用する人のモラルが必要なものになっています。

(書きかけ)

blogカテゴリ内のタグ一覧