RTP

読み:あーるてぃーぴー / 英語表記:Real-time Transport Protocol

音声や映像などのリアルタイムのデータを運ぶためのプロトコル。通常はUDPの上で使い、シーケンス番号とタイムスタンプで順序と再生のタイミングを伝える。

イマシルちゃんの解説

電話の声は、少しくらい欠けても会話は続けられるけど、遅れて届いたら意味がないよね。
だから、再送してくれる丁寧な方式より、速さ重視の身軽な方式で送るんだ。

でも身軽な方式だけだと、パケットの順番がわからないし、いつ再生すればいいかもわからない。
そこでRTPが、パケットに「何番目か」と「いつの音か」っていう札を付けてあげるんだよ!

より深い解説

定義

RTP(Real-time Transport Protocol)は、RFC 3550で定められた、音声や映像などのリアルタイムのメディアデータを伝送するためのプロトコルである。トランスポート層の機能を補うプロトコルで、通常はUDPの上で動作する。VoIPでは、音声データそのもの(メディア)の伝送をRTPが、呼の制御をSIPが担う。

再送をしない理由

TCPは、失われたデータを再送して確実に届けるが、再送を待つ間、後続のデータの受け渡しも止まってしまう。リアルタイムの音声では、遅れて届いたデータは再生に間に合わず役に立たないため、再送よりも遅延が小さいことが重視される。そこで、再送をしないUDPを使い、足りない機能をRTPで補う。

RTPヘッダーの主なフィールド

RTPヘッダーは、固定部分が12バイトである。

フィールド役割
ペイロードタイプ使っているコーデック(G.711、G.729など)を示す
シーケンス番号パケットごとに1ずつ増える番号。パケットの損失や順序の入れ替わりを検出する
タイムスタンプペイロードの先頭の音が標本化された時刻。受信側で再生のタイミングを合わせ、ジッタを計算する
SSRC送信元(ストリーム)の識別子

前者は「何番目のパケットか」、後者は「どの時点の音か」を表す。無音の区間に送信を止めた場合、パケットの番号は連続したままだが、音の時刻は飛ぶ。

RTCP

RTCP(RTP Control Protocol)は、RTPと対になるプロトコルで、通信の品質に関する情報(パケット損失率、ジッタ、遅延など)を送信者と受信者の間で定期的に報告し合う。RTPがデータを、RTCPが品質の監視を担当する。

ポート番号

RTPのポート番号は固定ではなく、SIPなどの呼制御で、通話ごとに動的に決められる。慣習として、RTPに偶数のポート番号、対応するRTCPにその次の奇数のポート番号を使う。このため、ファイアウォールやNATでは、SIPのやり取りを解析して必要なポートを動的に開ける機能(SIP ALGなど)が必要になる場合がある。

VoIPパケットのヘッダー構成

| IPヘッダー(20バイト) | UDPヘッダー(8バイト) | RTPヘッダー(12バイト) | 音声ペイロード |

音声ペイロードが小さいコーデックでは、ヘッダーのオーバーヘッドが大きな割合を占める。

実際の試験ではここに出る!

この用語が出てくる記事

↑