RFC-0037:交易郵件標頭 v3

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

本提案會修改 FIDL 傳輸格式。系統會將交易標頭的保留位元組分配給一個位元組魔法號碼,以識別所使用的傳輸格式,以及三個位元組,以供暫時遷移用的旗標使用。

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

摘要

此提案會修改傳輸格式,如下所示。

系統會將交易標頭的保留位元組數分配給以下項目:

  • 一個位元組的磁數字,用於識別所使用的傳輸格式。
  • 此外,旗標還有三個位元組,用來進行軟性遷移作業。

此外,epitaph 酬載是 struct{int32},而不是標頭中的「Adhorning epitaphs」。

動力與設計

在標題中加入神奇數字:

  • 此機制可讓讀取者瞭解收到的訊息是否相容 (或附註),以及對寫入者提供一種機制,用來表示訊息傳送的格式。
  • 魔術數字的順序為非目標,應直接檢查魔術數字,如果不相容 (例如不支援),就會拒絕。具體來說,我們不相信「version」一詞,因為我們要進行配對相容性檢查,而非「支援 v5 到 v8」中的範圍式相容性。

在標頭中使用旗標:

  • 提供處理軟轉換的機制,特別是繫結「不得」在不知道是否使用特定旗標時拒絕訊息的要求,直接忽略這類要求。例如,用於遷移離開靜態聯集
  • 我們傾向將更多位元組分配給標記 (3 個位元組),而非使用魔法數字 (1 個位元組),因為我們預期在暫時需要更多的功能,而不只是傳輸格式變種版本。

使用 Epitaph:

  • Epitaph 會「shoehored」進入 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 團隊便無法合理地將魔術號碼指派給新的電線格式。

效能

將 epitaph 變成 struct{int32} 酬載,而不是內嵌在交易標頭中,後者會使讀取的位元組數下限從 16 個位元組提高到 24 個位元組。執行效能繫結堆疊會分配小型緩衝區,增加 8 個位元組對影響幾乎不會造成太大影響。