/
359.txt
96 lines (68 loc) · 4.29 KB
/
359.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
[23] [DFN[[CODE(HTTP)@en[[[PING]]]]]] [[フレーム]]は、
送信し、[[peer]] からの応答を確認するものです。
* 仕様書
[REFS[
- [21] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-4.1>
- [1] '''[CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-6.7>'''
- [17] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-8.1.4>
- [19] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-10.8>
]REFS]
* 意味
[2] [CODE[[[PING]]]] [[フレーム]] ([[フレーム型]] [CODE[[[0x6]]]])
は、[[送信者]]からの最小 [[RTT]] を計測したり、
[[idle]] [[接続]]がまだ機能するか判断したりするためのものです [SRC[>>1]]。
* 構文
[10] [[ストリーム識別子]]は [CODE[[[0x0]]]] でなければなりません。
[CODE[[[PING]]]] [[フレーム]]は[[ストリーム]]に関連付けられません [SRC[>>1]]。
[7] 次の[[フラグ]]があります。
[FIG(list members)[
:[8] [DFN[[CODE[[[ACK]]]]]] ([CODE[[[0x1]]]] = 第0ビット):
設定されていれば、[CODE[[[PING]]]] [[応答]]であることを表します。 [SRC[>>1]]
[14] 返信以外で [CODE[[[ACK]]]] フラグ付きの [CODE[[[PING]]]] [[フレーム]]を送信しても良いのかどうかは不明です。
]FIG]
[22] 他の[[フラグ]]は 0 でなければ[['''なりません''']]。
[[受信者]]は、無視しなければ[['''なりません''']]。 [SRC[>>21]]
[FIG(packet)[
:width:8
= 1 [CODE[[[ACK]]]]
= 1 0
= 1 0
= 1 0
= 1 0
= 1 0
= 1 0
= 1 0
]FIG]
[4] [[payload]] は、8バイトの[DFN[[RUBYB[[[不透明データ]]]@en[Opaque Data]]]]を含まなければ[['''なりません''']]。
[[送信者]]は任意の値を選ぶことができ、任意の形で使うことができます。
[CODE[[[PING]]]] [[応答]]の場合は、返信元となる[[フレーム]]と同じ
[[payload]] データを含まなければ[['''なりません''']]。 [SRC[>>1]]
[FIG(packet)[
:width:32
= 32 不透明データ
]FIG]
* 文脈
[3] [CODE[[[PING]]]] [[フレーム]]は、どちらの[[エンドポイント]]からも送ることができます
[SRC[>>1]]。
[18] [CODE[[[PING]]]] は、[[要求]]を実際に送らずとも[[接続]]が生きているかどうかを検査するために使うことができます [SRC[>>17]]。
* 処理
[11] [CODE[[[PING]]]] [[フレーム]]の[[ストリーム識別子]]が [CODE[[[0x0]]]]
でなければ、 [[接続エラー]] [CODE[[[PROTOCOL_ERROR]]]] としなければ[['''なりません''']]
[SRC[>>1]]。
[12] [CODE[[[PING]]]] [[フレーム]]の [[payload]] の長さが 8 でなければ、
[[接続エラー]] [CODE[[[FRAME_SIZE_ERROR]]]] としなければ[['''なりません''']] [SRC[>>1]]。
[5] [CODE[[[ACK]]]] フラグの設定されていない [CODE[[[PING]]]]
[[フレーム]]を受信したら、 [CODE[[[ACK]]]] [[フレーム]]を設定した
[CODE[[[PING]]]] ([CODE[[[PING]]]] 応答) を送信しなければ[['''なりません''']]。 [[payload]]
は同じでなければ[['''なりません''']]。 [SRC[>>1]]
[9] [CODE[[[PING]]]] [[応答]]に返信しては[['''なりません''']] [SRC[>>1]]。
[6] [CODE[[[PING]]]] 応答は、他の[[フレーム]]より高い優先度とする[['''べきです''']] [SRC[>>1]]。
* セキュリティー
[16] [CODE[[[PING]]]] [[フレーム]]の送信頻度や [[payload]] の値は、
[[fingerprinting vector]] となるかもしれません。
[20] [CODE[[[PING]]]] [[フレーム]]の返信により [[peer]] までの[[遅延]]が測定されると、
プライバシー上問題となることもあるかしれません [SRC[>>19]]。
* 関連
[13] [[WebSocket]] には [[Pingフレーム]]と [[Pongフレーム]]があります。
[15] [[HTML]] の [CODE(HTMLa)@en[[[ping]]]] [[属性]]や [[HTTP]]
の [CODE(HTTP)@en[[[Ping-From:]]]]/[CODE(HTTP)@en[[[Ping-To:]]]] [[ヘッダー]]とは無関係です。