プロトコル — クライアント ↔ サーバー
クライアントポート(デフォルト5225)上でやり取りされるすべてのバイトの完全な仕様です。 接続直後に一度だけ行われる認証ハンドシェイクと、それに続く バイナリフレームのロックプロトコルで構成されます。すべての公式クライアントはこの仕様を バイト単位で同一に実装しています。
各メッセージページの構造はフィールドレイアウトを、例は実際に送られるバイト列を示します (値はrefreshのたびに変わります)。
バイト表記:
opはASCII文字として表示されます(例:A)。wait・leaseはu8バイナリ、token・ownerはu64ビッグエンディアンのバイナリで、16進数で表示されます(例:wait=5→05)。keyとaddrはUTF-8テキスト、reasonはASCIIテキストで、これらはすべて可変長で あり、構造上はNと表記されます。末尾の\n(改行)がフレームの終端で0Aです。フィールドは 区切りなしで連続して送られます。固定ヘッダ(
wait・lease・token・owner)はバイナリ値のため0x0Aを含みうります — パーサーは改行を探す前に、opごとの固定ヘッダ長をバイト数で先に消費しなければなりません。 長さはリクエストA=10B /R=8B、レスポンスA=16B /T・B・R・N=8B /M・L・E=0Bです。
目次
- トランスポート層
- 認証ハンドシェイク — クラスタのRaftポートと共有されるため、 プロトコル (共通)ページに掲載
- リクエスト
- レスポンス
- フィールド制約
- リクエスト × キー状態マトリクス
- フェンシングトークン
- 応答マッチングルール
- セッション例
サーバー間のクラスタ合意(Raft)プロトコルは別ページで扱います。