--- title: WebRTC プロトコル入門 slug: Web/API/WebRTC_API/Protocols tags: - API - Audio - Beginner - Draft - Guide - ICE - Media - NAT - SDP - STUN - TURN - Video - WebRTC - WebRTC API - ガイド - メディア - 初心者 translation_of: Web/API/WebRTC_API/Protocols --- <div>{{WebRTCSidebar}}{{draft}}</div> <p>この記事では、 WebRTC API の基礎となっているプロトコルについて説明します。</p> <h2 id="ICE">ICE</h2> <p><a href="http://en.wikipedia.org/wiki/Interactive_Connectivity_Establishment">Interactive Connectivity Establishment (ICE)</a> は、ウェブブラウザーをピアと接続することを可能にするフレームワークです。さまざまな理由から、ピア A からピア B に直接接続することはできません。ファイアウォールをバイパスする必要があるからです。ファイアウォールは直接接続を開くことを妨害したり、端末がパブリック IP アドレスを持たない多くの場合にはユニークなアドレスを与えたり、ルーターがピアとの直接接続を許さない場合にはサーバー経由でデータをリレーしたりします。以下で説明するように、 ICE は STUN や TURN サーバーを使用してこれを解決しています。</p> <h2 id="STUN">STUN</h2> <p><a href="http://en.wikipedia.org/wiki/STUN">Session Traversal Utilities for <u>NAT</u> (STU<u>N</u>)</a> (頭字語中に頭字語が含まれている) は、パブリックアドレスを発見し、ピアとの直接接続を妨害するルーターの制限を特定するためのプロトコルです。</p> <p>クライアントがインターネット上の STUN サーバーにリクエストを送信すると、サーバーは、クライアントのパブリックアドレスと、ルーターの NAT 内部にアクセス可能かどうかを答えます。</p> <p><img alt="An interaction between two users of a WebRTC application involving a STUN server." src="https://mdn.mozillademos.org/files/6115/webrtc-stun.png" style="display: block; height: 378px; margin: 0px auto; width: 259px;"></p> <h2 id="NAT">NAT</h2> <p><a href="https://en.wikipedia.org/wiki/Network_address_translation">ネットワークアドレス変換 (Network Address Translation; NAT)</a> は、端末にパブリック IP アドレスを割り当てるために使われます。ルーターはパブリック IP アドレスを持ち、ルーターに接続されたすべての端末はプライベート IP アドレスを持ちます。リクエストが送られると、端末のプライベート IP から、特定のポートを持つルーターのパブリック IP へ変換されます。こうすることで、各端末にユニークな IP アドレスを割り当てずともインターネット上で発見することができるようになります。</p> <p>ルーターによっては、ネットワーク上の端末に接続できる相手に制限をかけている場合があります。つまり、 STUN サーバーが発見できるパブリック IP アドレスを持っていたとしても、すべての相手が接続を張れるわけではないということです。このような状況では、TURN を使う必要があります。(訳注: 原文では「TURN を turn on する必要がある」と書かれている。)</p> <h2 id="TURN">TURN</h2> <p>NAT を使用するルーターの一部は、‘Symmetric NAT’ と呼ばれる制限をかけています。その場合、ルーターは過去に接続したことのあるピアから来る接続しか受け入れることができません。</p> <p><a href="http://en.wikipedia.org/wiki/TURN">Traversal Using Relays around NAT (TURN)</a> サーバを使って接続を張り、すべての通信をこのサーバを通して行うことで'Symmetric NAT'制限を回避できます。TURNサーバを使って接続し、すべての相手にはこのサーバにパケットを送信させることでそれらが転送されてきます。明らかにオーバヘッドが生じますので、他の選択肢がない場合にのみ使うべきです。</p> <p><img alt="An interaction between two users of a WebRTC application involving STUN and TURN servers." src="https://mdn.mozillademos.org/files/6117/webrtc-turn.png" style="display: block; height: 297px; margin: 0px auto; width: 295px;"></p> <h2 id="SDP">SDP</h2> <p><a href="http://en.wikipedia.org/wiki/Session_Description_Protocol">Session Description Protocol (SDP)</a> とは、解像度、フォーマット、コーデック、暗号化などのマルチメディアコンテンツを指定するための標準です。これにより、データが転送された際に双方が理解できるようになります。本来、これらはメディアコンテンツそのものではなくそのコンテンツを指定するメタデータです。</p>