【スタン・ターン】

STUN/TURN とは?

💡 NATの壁を越えろ!P2P通信の裏方コンビ
📌 このページのポイント
STUN(直接通信)vs TURN(リレー通信) STUN経由 端末A NAT内側 STUNサーバー IP問合せ 端末B NAT内側 ✓ P2P直接通信(高速) TURN経由 端末A 厳しいNAT TURNサーバー (中継) 端末B 厳しいNAT △ リレー通信(確実だが高コスト) ICE→ ① STUN で直接接続を試行 → ② ダメなら TURN
STUN(直接通信)vs TURN(リレー通信)の経路図
ひよこ ひよこ

STUNとTURNって何が違うの?セットで出てくるけど…

ペンギン先生 ペンギン先生

STUNは「自分の外から見えるIPアドレスを教えてもらう」プロトコルで、TURNは「自分の代わりにデータを中継してもらう」プロトコルなんだ。まずSTUNで直接通信を試みて、ダメならTURNに頼る、という順番だよ

ひよこ ひよこ

なんでわざわざ自分のIPアドレスを聞く必要があるの?

ペンギン先生 ペンギン先生

家のPCはルーターの内側にいるから、自分のグローバルIPが分からないんだ。でも相手と直接通信するには「このIPのこのポートに送ってね」と教える必要がある。STUNサーバーに聞くと「あなたは外からこう見えてますよ」と教えてくれるんだよ

ひよこ ひよこ

それで直接つながるの?

ペンギン先生 ペンギン先生

NATの種類が緩ければ直接つながる。でも企業のファイアウォールや厳しいNATだと、外からのパケットを全部弾いちゃうんだ。そういうときにTURNサーバーが間に入って、両方からの通信を中継してくれるんだよ

ひよこ ひよこ

じゃあ最初から全部TURNにすればいいんじゃない?

ペンギン先生 ペンギン先生

TURNサーバーはすべてのデータを中継するから、サーバーの帯域やCPUコストがかなり高いんだ。動画通話を100人分中継したら大変だよね。だからまずSTUNで直接通信を試みて、本当にダメなときだけTURNを使うのが効率的なんだよ

ひよこ ひよこ

WebRTCとの関係はどうなってるの?

ペンギン先生 ペンギン先生

WebRTCはICEというフレームワークを使って接続を確立するんだけど、ICEの中でSTUNとTURNが使われている。候補となる経路を複数集めて、一番良い経路を選ぶ仕組みだよ

ひよこ ひよこ

自前でSTUN/TURNサーバーを立てることもあるの?

ペンギン先生 ペンギン先生

STUNサーバーGoogleが無料公開しているものもあるけど、TURNサーバーは帯域コストがかかるから自前で立てるか有料サービスを使うことが多いね。coturnというオープンソースサーバーが定番で、大規模サービスではTURNサーバーの配置戦略がインフラ設計のカギになるんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「STUN/TURN」って出てきたら「NAT越えしてP2P通信するための仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「STUN→Session Traversal Utilities for NAT / TURN→Traversal Using Relays around NAT」 = NAT越えのためのセッション横断ユーティリティ / NATを迂回するリレー通信
💬 STUNは「NATを横断するための道具」、TURNは「NATの周りをリレーで迂回する」という意味。名前の通り、STUNが直接突破を試みて、ダメならTURNが迂回路を用意してくれるコンビだよ
← 用語集にもどる