Help us understand the problem. What is going on with this article?

【初心者向け】STUN/TURNサーバをざっくり解説してみた

More than 3 years have passed since last update.

1 概要

サーバ & AWS 初めましてな初心者がAWS上にTURNサーバを構築することになりました。
ここでは、一から学んだSTUN/TURNサーバ周りの知識をわかりやすい言葉で解説します。
(ちなみにQiita記事作成も初めてです。それも含めて間違いなど見つけたらご指摘いただけると嬉しいです。)

2 STUNサーバ・TURNサーバはなぜ必要なのか?

STUNサーバとTURNサーバはどちらも「NAT越え」を可能にするために必要です。
「NAT越え」はP2PしたいPCが異なるネットワークにある場合に必要になります。
いろんな言葉が出たので、順番に整理します。

2.1 NATとは?

NATは対応するプライベートIPアドレスとグローバルIPアドレスを双方向に変換するもの。

qiita_nat.png

この図だと、NATでは以下のような変換が行われる。
PC1のグローバルIPアドレス(111.111.111.111) → プライベートIPアドレス(222.222.222.222)

【プライベートIPアドレスとグローバルIPアドレスの違い】
プライベートIPアドレスはそのネットワーク内のみで使われるIPアドレスで、
グローバルIPアドレスはそのネットワークの外(インターネット)で使われる。

2.2 P2Pとは?

PC同士が直接通信すること。または、クライアントがサーバに問い合わせる「クライアント-サーバ方式」ではないもの。
P2Pでは相手のIPアドレスによって相手を特定し接続を確立します。
qiita_p2p_success.png

2.2.1 体感するのが1番

2.2.2 P2Pの課題

①P2P通信には接続相手のIPアドレスが必要なこと
②異なるNAT内のPCがお互いのプライベートIPアドレスを知る術はないこと
①と②を合わせると、NAT内PC同士でP2P通信を行うことは不可能です。
qiita_p2p_fail.png

この図ではPC1とPC4は異なるネットワークに属しているため、お互いのIPアドレスがわからず、P2Pできません。

が、「NAT越え」をするとP2Pっぽいものは可能です。
「NAT越え」をすべきかどうかはSTUNサーバを使って判定し、
実際の「NAT越え」作業はTURNサーバで実現します。

3 STUNサーバ・TURNサーバは何をするのか?

3.1 STUNサーバは何をするのか?

STUNサーバは外部から見た自PCのIPアドレスを返してくれるもの。

NAT付ネットワーク外にいる場合: 自PCの知っているIPアドレス = STUNの返すIPアドレス
NAT付ネットワーク内にいる場合: 自PCの知っているIPアドレス ≠ STUNの返すIPアドレス
になるはずなので、比較によって自PCがNAT付ネットワーク内かどうか判定できます。
自PCがNAT内の場合、「NAT越え」が必要だということがわかります。

qiita_stun.png

3.2 TURNサーバは何をするのか?

TURNサーバは、P2P通信したいPCの間に立ってデータをリレーするもの。

qiita_turn.png

TURNサーバにそれぞれ代理人(PC1', PC4')を立てて、代理人同士がデータのやり取りを行うことで、PC1-PC4間の擬似的な直接通信を行います。

4 実際にTURNサーバを構築してみよう

coTurnでEC2上にTURNサーバを作ってみたをご覧ください。

5 参考文献

okyk
ふるすたっくを目指してます
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした