[P2P]ファイル交換のUDP使用の懸念点
ある掲示板において、とあるファイル交換ソフトのUDP化が議論されているようだ。時間がないので残念ながら内容自体はあまり読んでない。
そもそもなぜUDP化するのだろうか?すぐに思いつくのは次の2つだ。
[1]NAT、ファイアウォール越え通信が可能となる
[2]通信元IPアドレスが偽造できる
[1]についてはこのBlogでも何度も書いてあるがUDP HolePunchingという技術を使う事が考えられる。
この技術によってルータなどのファイアウォールの設定をいじる必要はない。これはSkypeと同じことだ。
問題は[2]だ。
通常ファイル交換で行われる通信はTCPだが、これは送信元アドレスを偽造するときちんとした通信はできない。
もちろん、DDoSのように「わざと」送信元アドレスを偽造して送信先ノードに負荷を掛ける方法はTCPでもあるが、コネクションを張ることができないのでそれ以上の通信はできない。
UDPを使えば、送信先にあるポートで通信する事さえ制御してあげれば、UDPで送信元アドレスを偽造してファイルを伝達することは「理論的には」できる。
これを発展させると、ある時間やタイミングなどで送信元アドレス、ポートを変化させて誰から通信が来ているかサッパリ分からなくする事は可能だ。
だが、このことはとても大きな問題を抱える事になる。
まず、UDPはそもそもパケットロスをあまり考慮していない通信に向いている。例えば音声通信など多少のパケットが落ちても、遅延をさせない通信などに有効だ。
インターネットの世界は一般にパケットロスが発生しやすい。ファイル情報は情報が一部でも欠けるとうまく再生等が出来ない場合があるので、そうなると何度も再送処理(これはアプリケーションで処理する)が発生する。
そのためネットワーク全体に負荷がかかることがある。
このような再送処理を極力避けるためには例えばストリームでよく使われるデータ補完機能「FEC」などを利用する事が考えられる。とは言え、ある程度パケットロスが大きくなるとFECだけではうまくいかなくなる。
UDPはトラフィックを「自分の好きなように」に吐き出すことができる。これはTCPにようにフロー制御がないためである。このことはネットワーク環境や相手のノードにお構いなくトラフィックをドバーと出す事になる。それはネットワーク帯域を食い尽くすことになり、ルータなどにも大きな負荷がかかり、結果としてネットワーク全体に大きな影響が出る可能性がある。ストリームのようにTCPで制御の通信を行うという手はあるし、もしかしたらUDPパケットの中に制御用信号をいれることも可能かもしれないが。
今のことをもっと発展させてみよう。注目するのはUDPが送信元アドレスを詐称でき且つ大量のトラフィックを流せる事だ。これは基本的にDDoS攻撃をしていることに近い。
TCPの場合、相手がいなければOS側でその通信を終了する事が考えられる。(リトライはあるかもしれないが。)
だが、UDPは流しっぱなしの通信なので、アプリケーション側で勝手に大量のトラフィックを無差別に吐き出す事もできる。
こうなると、以前私が可能性を指摘していた「広域ネットワーク型DDoS攻撃」となりうる。そのストーリはあるきっかけで(例えばウィルス感染等。若しくは意図的に開発者がその機能を入れ込むかもしれない。)で感染ノード(ゾンビ)が無差別にUDPトラフィックを吐き出してしまい、バックボーンを含めネットワーク全体がダウンしてしまう、という恐ろしい事態が発生する事だ。それも誰が原因だか不明のまま。。。
アプリケーションには通常バグがあるから上記なことは充分考えられる。
ではもしこのような通信を制御するにはどうすれば良いのだろか?
まず、詐称対策だがISPは自分で払い出しているIPアドレス空間以外の送信元アドレスについては通信をブロックする事が考えられる。もうひとつはこのようなファイル交換のUDP通信は大きな帯域を消費するので、長時間そのような通信をしているものをブロックする事が考えられる。これは現在売られているP2P帯域制御装置を改良すれば可能と考えられる。または単純だがストリームなど特定のUDPポート以外はルータ、ファイアウォールで塞いでしまうのも手だろう。
P2Pによるトラフィックは現状ISPに非常に大きな負担を強いているが、UDP化によって、ネットワークにより深刻な事態が起きるのかもしれない。
「P2P」カテゴリの記事
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(2011.10.30)
- TwitterをP2Pで実現する方法をもう少し考えてみる(2010.05.03)
- オフィスツアー(ビットメディア)を振り返る(2009.10.25)
- [開催日変更]オフィスツアー(株式会社ビットメディア)参加者募集のご案内(2009.08.14)
- [NAT]NAT越え入門1-NATとは何か?(2009.04.11)

Comments