This commit is contained in:
nicc@gfex.com.cn
2024-04-15 10:30:20 +08:00
parent 9ff1b31d67
commit 53184b3442

View File

@@ -16,6 +16,7 @@ NORM 节点是指参与 NORM 会话的单个节点。每个节点都有一个唯
NORM 实例是指 NORM 会话的连续段上下文中的单个节点。当节点加入 NORM 会话时它具有唯一的节点标识和实例标识。如果节点出于任何原因离开会话然后重新加入会话则节点标识保持不变但实例标识会更改。当前实例被记录为instance_id。
## NORM消息格式
NORM 有两个通用消息类即发送方消息和接收方消息。NORM 发送方消息类型为NORM_DATA、NORM_INFO 和 NORM_CMD。 NORM 接收方消息类型为NORM_NACK、NORM_ACK 和 NORM_REPORT。
所有 NORM 消息都由一个必需的公共标头、一个消息类型标头和一个有效负载(数据)部分组成。可以在标头和有效负载部分之间插入一个可选的扩展字段,用于指定正在使用的纠错编码、拥塞控制算法或其他会话管理信息。
![image.png](image/norm1.png)
### NORM公用消息头
@@ -75,24 +76,37 @@ NORM_INFO内容必须放在单个NORM消息的有效负载中因此它被视
![image.png](image/norm4.png)
**instance_id16 位)**
当前参与 NORM会话实例的唯一标识。
**grtt8 位)**
发件人当前估计的组往返时间。
**backoff4 位)**
在使用基于定时器的 NORM NACK 反馈抑制机制时,接收机用于确定最大回退定时器值的值。
**gsize4 位)**
发件人对组大小的当前估计值。
**flag32 位)**
二进制标志提供信息以帮助接收方适当地处理有效载荷。
**fec_id**
FEC 编码标识符。
**object_transport_id**
发送方分配给正在传输的 NORM 对象的值,接收方将其用于传输和修复请求。它以单调增量的方式增加。
### 发送方 NORM_CMD消息类型
NORM_CMD消息的作用NORM_CMD消息用于管理NORM会话其功能包括
收集往返时间round-trip timing RTT用于评估网络延迟和性能。
收集和发送与拥塞控制相关的数据:用于动态调整发送速率以避免网络拥塞。
同步修复窗口:确保接收方在数据丢失时能够及时恢复。
发送方状态通知:提供发送方的状态信息,如就绪状态、发送速率等。
![image.png](image/norm5.png)
**instance_id16 位)**
当前参与 NORM会话实例的唯一标识。
@@ -177,10 +191,15 @@ ACK消息中携带的额外信息。
NORM_REPORT用于向发送方报告接收方的状态和数据传输情况。它提供的机制使得接收方能够向发送方反馈有关数据传输的信息以便发送方能够根据这些信息调整其传输策略和行为。
NORM_REPORT消息可能包含的信息包括但不限于
接收状态报告:报告接收方已成功接收到的数据包序号范围,以及可能存在的丢失或损坏的数据包。
网络状态信息:提供关于网络延迟、丢包率、带宽利用率等方面的信息,以帮助发送方了解当前的网络状况。
发送方状态信息:提供有关发送方的状态信息,如发送速率、发送窗口大小等,以便接收方了解发送方的传输行为。
其他应用相关信息根据需要NORM_REPORT消息还可以包含其他与应用相关的信息以帮助发送方进行更精细的传输控制和管理。
### NORM 报头扩展
可选的头部扩展在NORM协议中用于提供额外的信息这些信息可以是与前向纠错、拥塞控制操作或其他会话管理信息相关的。这些头部扩展紧跟在公共头部和特定消息头部之后但在负载之前如果消息有负载
![image.png](image/norm8.png)
@@ -217,6 +236,7 @@ NORM 使用了一种 TCP-Friendly 拥塞控制方案,使其能够与 TCP 和
4. 速率控制机制的独立性NORM 的速率控制机制与其其他组件(例如可靠性机制、流量控制机制)是相分离的。因此,可以通过使用其他算法和适当的标头扩展来替换 NORM 的速率控制机制。这增加了 NORM 协议的灵活性,使其能够根据不同的网络环境和需求进行定制和调整。
### 流量控制
NORM 有四个流量控制选项,允许 NORM 发送方管理到 NORM 接收方的传输速率,以确保接收方不会超载。
1. 显式水印。使用此选项,发送方请求来自特定一组接收方的积极确认,确认当前传输中指定点或水印的成功接收。如果所有接收方都确认成功接收了水印,发送方可以继续发送新数据。
2. 隐式水印。这个选项基于接收方集合没有负面确认NACK修复请求。发送方使用 NORM_CMD(FLUSH) 来提醒接收方通过指示的水印进行任何需要修复的 NACK消息。然后发送方等待刷新完成。如果没有 NACK 消息,发送方假定水印已完成,可以继续发送新数据。
3. 基于定时器的流量控制。这个选项根据组往返时间GRTT和 NACK 活动来保持传输数据并限制修复窗口的推进。设置一个最小的、可适应的时间限制,在此之后发送方可以继续发送新数据。这个时间限制基于发送方估计的 GRTT 和无NACK消息。