RFC-0037:交易郵件標頭 v3

RFC-0037:交易訊息標頭 v3
狀態已接受
區域
  • FIDL
說明

這項提案會修改 FIDL 線路格式。交易標頭的保留位元組會分配給一個位元組魔術數字,用於識別所用電報格式,以及三個用於暫時軟遷移的旗標位元組。

作者
提交日期 (年-月-日)2019-03-07
審查日期 (年-月-日)2019-03-14

摘要

本提案會修改線路格式,如下所示。

交易標頭的保留位元組會分配給:

  • 一個位元組魔術數字,用於識別所使用的線路格式。
  • 而三個位元組的標記則是用於暫時執行軟遷移。

此外,碑文酬載不是在標頭中塞入碑文值,而是 struct{int32}

動機與設計

標頭中含有神奇數字:

  • 為讀者提供機制,指出收到的訊息是否相容 (或附註),並對稱地提供機制,讓作者指出傳送訊息的格式。
  • 排序魔術數並非目標,魔術數應只需檢查,如果不相容 (即不支援),則應予以拒絕。具體來說,我們不使用「版本」一詞,因為我們希望進行成對的相容性檢查,而非「支援 v5 到 v8」那樣的範圍相容性。

在標頭中加入標記:

  • 提供機制協助軟性轉換,特別是要求繫結不得在不知道如何使用特定標記時拒絕訊息,而應直接忽略。例如,這項功能可用於從靜態聯集移轉
  • 我們傾向將更多位元組分配給旗標 (3 個位元組),而非魔術數字 (1 個位元組),因為我們預期會需要更多功能 (而非線路格式變化版本)。

在墓誌銘文上:

  • 銘文被塞進 reserved 位元組,現在用於魔術數字和標記。
  • 將碑文設為純粹的一般酬載 struct{int32},可從線路格式中移除一個特殊的雪花圖案,這通常會簡化繫結,並降低發生錯誤或不相容的可能性。

最後,我們希望將標頭保持在最小狀態,並明確將其維持在 16 個位元組,同時支援上述的額外需求。

交易訊息標頭的演進

FIDL2 ("v2"):

  • 交易 ID (uint32)
  • 保留 (uint32)
  • 標記 (uint32)
  • 序數 (uint32)

RFC-0053

RFC-0029

最初,涵蓋位元組 4 到 7 的保留 (uint32) 欄位旨在符合 zx_channel_call 的規定。不過,系統呼叫已穩定,因此不再需要這項規定。

版本 3

我們已將交易訊息標頭 (「v3」) 穩定化,如下所示:

  • 交易 ID (uint32)
  • 旗標 (array<uint8>:3,即 3 個位元組)
  • 魔幻數字 (uint8)
  • 序數 (uint64)

繫結不得檢查標記,除非這些繫結使用或瞭解特定標記,也就是說,設定收件者繫結未知的位元是有效的。

以下是線路格式圖表

電報格式訊息標頭的圖表

何時應指派新的魔術數字

初始魔術數字為 0x01。我們會保留更有趣的數字,留待日後使用。

如果 FIDL 團隊無法合理地逐步淘汰所要改進或取代的線路格式,則必須為新的線路格式指派魔術數字。

成效

將碑文設為 struct{int32} 酬載,而不是嵌入交易標頭,可將讀取的位元組數從 16 位元組增加到 24 位元組。高效繫結堆疊會配置小型緩衝區,因此增加 8 位元組的影響不大。