跳转至

TLV 扩展

扩展头紧跟 24-byte 基础头。

字段 Size 说明
ext_type 1 扩展类型
ext_len 1 value 长度
value ext_len 扩展负载

扩展类型

扩展 内容 用途
SESSION_EXT session_epoch, incarnation_id 会话隔离和重启识别
ACK_RANGE_EXT largest_ack, ack_delay_us, ranges 批量确认
SACK_EXT base_packet, bitmap 保留未确认洞
FRAGMENT_EXT message_id, fragment_offset, message_len 分片重组
SECURITY_EXT key_id, nonce/material metadata 认证 trailer 元数据
ROUTE_EXT previous hop、next hop、route epoch、metric 路由信息
TIMESTAMP_EXT TODO 保留/未确认的 timestamp 元数据
DATA_TYPE_EXT data_type DATA 包上的应用 payload 分类;CONTROL 包上的 transport control 子类型

Value 格式

扩展 Value 长度 字段
SESSION_EXT 12 session_epoch u32, incarnation_id u64
ACK_RANGE_EXT 9 + 4*n largest_ack u32, ack_delay_us u32, range_count u8, repeated gap u16 + length u16
SACK_EXT 5 + bitmap_len base_packet u32, bitmap_len u8, bitmap bytes
FRAGMENT_EXT 12 message_id u32, fragment_offset u32, message_len u32
SECURITY_EXT 13 key_id u32, nonce_id u64, tag_len u8
ROUTE_EXT 10 previous_hop u16, next_hop u16, route_epoch u32, metric u16
TIMESTAMP_EXT TODO TODO(xgen-link): confirm TIMESTAMP_EXT value format and whether it is reserved or intentionally unimplemented.
DATA_TYPE_EXT 1 data_type u8

ACK range 的 gaplength 表示从 largest_ack 反向描述的确认区间。SACK bitmap 的 bit 表示 base_packet + bit_index 的接收状态。 ACK_RANGE_EXT 和 SACK_EXT 位于 header TLV 区,不放在 payload 中。 全零 SACK bitmap 是合法编码,表示请求快速重传 base_packet。 应用 data_type 不因 transport control 值而保留。接收端只有在 packet_type=CONTROL 时才把 DATA_TYPE_EXT 解释为控制子类型。

归属与追溯

扩展 Type Producer Consumer 失败规则 证据
SESSION_EXT 1 session-aware send path datalink replay、network metadata、transport peer scope、fragment reassembly 长度非法则 decode 失败 src/wire/xgl_wire_ext.c, test/test_wire.cpp, test/test_transport.cpp
ACK_RANGE_EXT 2 transport_send_ack() reliable queue ACK removal 长度或 range count 非法则 decode 失败 src/wire/xgl_wire_ack_ext.c, src/transport/xgl_transport_ack.c, test/test_reliable.cpp
SACK_EXT 3 transport_send_sack() SACK processing 与 fast retransmit bitmap 长度非法则 decode 失败 src/wire/xgl_wire_ack_ext.c, src/transport/xgl_transport_sack.c, test/test_transport.cpp
FRAGMENT_EXT 4 fragment send path fragment manager 与 delivery path 缺失或非法 value 不得重组 src/transport/xgl_transport_send_fragment.c, src/transport/xgl_transport_delivery.c, test/test_fragment.cpp
SECURITY_EXT 5 authenticated frame build parser auth length、datalink verification AUTHENTICATED 没有合法 SECURITY_EXT 时 fail closed src/wire/xgl_frame_auth.c, src/wire/xgl_parser_extensions.c, test/test_datalink.cpp
ROUTE_EXT 6 route-aware internals/future route controls network metadata/routing 长度非法则 decode 失败 src/wire/xgl_wire_ext.c, test/test_wire.cpp, test/test_network.cpp
TIMESTAMP_EXT 7 TODO TODO TODO(xgen-link): confirm TIMESTAMP_EXT value format and whether it is reserved or intentionally unimplemented. include/xgl/internal/xgl_wire.h
DATA_TYPE_EXT 8 send、zero-copy、control packets network metadata 与 transport control value 为 1 byte;只有 packet_type=CONTROL 时才解释为控制子类型 src/network/xgl_network_send.c, src/network/xgl_network_metadata.c, src/transport/xgl_transport_control.c

失败规则

  • ext_len 不足以解码对应扩展时丢弃。
  • 扩展总长度不能超过 header_len - 24
  • 未知扩展只有在不影响当前包语义时才可忽略;安全和分片相关未知扩展应 fail closed。

实现约束

  • 扩展顺序不应成为语义依赖,接收端按 type 查找需要的扩展。
  • 同一语义扩展重复出现时,接收端应选择 fail closed,避免歧义。
  • 发送端只有在存在扩展时设置 HAS_EXTENSIONS。