【スタン・ターン】

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が迂回路を用意してくれるコンビだよ
← 用語集にもどる