「stun」の版間の差分
提供: 個人的記録
(→メソッド) |
|||
(同じ利用者による、間の8版が非表示) | |||
1行目: | 1行目: | ||
− | [[category: | + | [[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 固定 | ||
51行目: | 51行目: | ||
==== メッセージタイプの生成方法 ==== | ==== メッセージタイプの生成方法 ==== | ||
− | メッセージタイプはクラスとメソッドの合成で生成する。<br> | + | メッセージタイプはクラスとメソッドの合成で生成する。<br>クラスを上位と下位に分割、メソッドを5bit、3bit、4bitに分割し以下のようにマッピングする。 |
− | {| | + | {| class="wikitable" |
− | !順序 | + | !順序 |
!値 | !値 | ||
|- | |- | ||
|0-1||0固定 | |0-1||0固定 | ||
− | |2-6||メソッドの上位5ビット| | + | |- |
− | |7||クラスの上位1ビット| | + | |2-6||メソッドの上位5ビット |
− | |8- | + | |- |
− | | | + | |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 |