「stun」の版間の差分

提供: 個人的記録
移動: 案内検索
(メッセージ構造)
 
(同じ利用者による、間の11版が非表示)
1行目: 1行目:
[[category:software]]
+
[[category:Software]]
 
= STUN =
 
= STUN =
 
[http://www.can.mydns.jp/~ryo/rfc/rfc5389-ja.txt RFC5389] を調べたメモ
 
[http://www.can.mydns.jp/~ryo/rfc/rfc5389-ja.txt RFC5389] を調べたメモ
  
== メッセージ構造 ==
+
== メッセージヘッダ構造 ==
  
 
{| class="wikitable"
 
{| class="wikitable"
12行目: 12行目:
 
|2||メッセージタイプ||先頭2ビットは0固定。後ろ14ビットでクラスとメソッドを規定する(後述)。
 
|2||メッセージタイプ||先頭2ビットは0固定。後ろ14ビットでクラスとメソッドを規定する(後述)。
 
|-
 
|-
|2||メッセージ長さ||
+
|2||メッセージ長さ||20バイトのヘッダ長さは含まない。後続のattributeの長さをバイト単位でセットする。
 
|-
 
|-
 
|4||マジック||0x2112A442 固定
 
|4||マジック||0x2112A442 固定
20行目: 20行目:
  
 
=== メッセージタイプ ===
 
=== メッセージタイプ ===
メッセージタイプは先頭2ビットが0固定。後ろ14ビットが2ビットのクラス、12ビットのメソッドで決まる。<br/>
+
メッセージタイプは先頭2ビットが0固定。後ろ14ビットが2ビットのクラス、12ビットのメソッドで決まる。
 +
==== クラス ====
 
クラスは以下の4種類である。
 
クラスは以下の4種類である。
 
{| class="wikitable"
 
{| class="wikitable"
!データ(ビット)
+
!データ(0b)
 
!名称
 
!名称
 
|-
 
|-
35行目: 36行目:
 
|}
 
|}
 
先頭1ビットがレスポンスを表すと思っておけばいい?
 
先頭1ビットがレスポンスを表すと思っておけばいい?
 +
 +
==== メソッド ====
 +
{|  class="wikitable"
 +
!値(0x)
 +
!メソッド名
 +
|-
 +
|000||Reserved
 +
|-
 +
|001||Binding
 +
|-
 +
|002||SharedSecret
 +
|}
 +
他のRFCで追加されているが、RFC5389の範囲ではこの3種類。実際に使用するのばbindingのみ。
 +
 +
==== メッセージタイプの生成方法 ====
 +
メッセージタイプはクラスとメソッドの合成で生成する。<br>クラスを上位と下位に分割、メソッドを5bit、3bit、4bitに分割し以下のようにマッピングする。
 +
{| class="wikitable"
 +
!順序
 +
!値
 +
|-
 +
|0-1||0固定
 +
|-
 +
|2-6||メソッドの上位5ビット
 +
|-
 +
|7||クラスの上位1ビット
 +
|-
 +
|8-10||メソッドの真ん中3ビット
 +
|-
 +
|11||クラスの下位1ビット
 +
|-
 +
|12-15||メソッドの下位4ビット
 +
|}
 +
 +
== Attribute ==
 +
アトリビュートは2バイトのコードで決定される。<br/>
 +
参考資料:[https://www.iana.org/assignments/stun-parameters/stun-parameters.xhtml#stun-parameters-4 Attribute]
 +
 +
{| class="wikitable"
 +
!コード
 +
!名称
 +
|-
 +
||0x0000||Reserved
 +
|-
 +
||0x0001||MAPPED-ADDRESS
 +
|-
 +
||0x0002||Reserved(RESPONSE-ADDRESS)
 +
|-
 +
||0x0004||Reserved(SOURCE-ADDRESS)
 +
|-
 +
||0x0005||Reserved(CHANGED-ADDRESS)
 +
|-
 +
||0x0006||USERNAME
 +
|-
 +
||0x0007||Reserved(PASSWORD)
 +
|-
 +
||0x0008||MESSAGE-INTEGRITY
 +
|-
 +
||0x0009||ERROR-CODE
 +
|-
 +
||0x000A||UNKNOWN-ATTRIBUTES
 +
|-
 +
||0x000B||Reserved(REFLECTED-FROM)
 +
|-
 +
||0x0014||REALM
 +
|-
 +
||0x0015||NONCE
 +
|-
 +
||0x0020||XOR-MAPPED-ADDRESS
 +
|-
 +
||0x8022||SOFTWARE
 +
|-
 +
||0x8023||ALTERNATE-SERVER
 +
|-
 +
||0x8028||FINGERPRINT
 +
|}

2020年5月3日 (日) 17:17時点における最新版

STUN

RFC5389 を調べたメモ

メッセージヘッダ構造

長さ(バイト) 項目名 説明
2 メッセージタイプ 先頭2ビットは0固定。後ろ14ビットでクラスとメソッドを規定する(後述)。
2 メッセージ長さ 20バイトのヘッダ長さは含まない。後続のattributeの長さをバイト単位でセットする。
4 マジック 0x2112A442 固定
12 トランザクションID 乱数。トランザクションの識別に使用する

メッセージタイプ

メッセージタイプは先頭2ビットが0固定。後ろ14ビットが2ビットのクラス、12ビットのメソッドで決まる。

クラス

クラスは以下の4種類である。

データ(0b) 名称
00 リクエスト
01 エンデュケーション
10 成功レスポンス
11 エラーレスポンス

先頭1ビットがレスポンスを表すと思っておけばいい?

メソッド

値(0x) メソッド名
000 Reserved
001 Binding
002 SharedSecret

他のRFCで追加されているが、RFC5389の範囲ではこの3種類。実際に使用するのばbindingのみ。

メッセージタイプの生成方法

メッセージタイプはクラスとメソッドの合成で生成する。
クラスを上位と下位に分割、メソッドを5bit、3bit、4bitに分割し以下のようにマッピングする。

順序
0-1 0固定
2-6 メソッドの上位5ビット
7 クラスの上位1ビット
8-10 メソッドの真ん中3ビット
11 クラスの下位1ビット
12-15 メソッドの下位4ビット

Attribute

アトリビュートは2バイトのコードで決定される。
参考資料:Attribute

コード 名称
0x0000 Reserved
0x0001 MAPPED-ADDRESS
0x0002 Reserved(RESPONSE-ADDRESS)
0x0004 Reserved(SOURCE-ADDRESS)
0x0005 Reserved(CHANGED-ADDRESS)
0x0006 USERNAME
0x0007 Reserved(PASSWORD)
0x0008 MESSAGE-INTEGRITY
0x0009 ERROR-CODE
0x000A UNKNOWN-ATTRIBUTES
0x000B Reserved(REFLECTED-FROM)
0x0014 REALM
0x0015 NONCE
0x0020 XOR-MAPPED-ADDRESS
0x8022 SOFTWARE
0x8023 ALTERNATE-SERVER
0x8028 FINGERPRINT