diff --git a/my-project/docs/组播协议/NORM.md b/my-project/docs/组播协议/NORM.md index dc8c69d..136e7d7 100644 --- a/my-project/docs/组播协议/NORM.md +++ b/my-project/docs/组播协议/NORM.md @@ -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_id(16 位)** 当前参与 NORM会话实例的唯一标识。 + **grtt(8 位)** 发件人当前估计的组往返时间。 + **backoff(4 位)** 在使用基于定时器的 NORM NACK 反馈抑制机制时,接收机用于确定最大回退定时器值的值。 + **gsize(4 位)** 发件人对组大小的当前估计值。 + **flag(32 位)** 二进制标志提供信息以帮助接收方适当地处理有效载荷。 + **fec_id** FEC 编码标识符。 + **object_transport_id** 发送方分配给正在传输的 NORM 对象的值,接收方将其用于传输和修复请求。它以单调增量的方式增加。 + ### 发送方 NORM_CMD消息类型 + NORM_CMD消息的作用:NORM_CMD消息用于管理NORM会话,其功能包括: + 收集往返时间(round-trip timing RTT):用于评估网络延迟和性能。 + 收集和发送与拥塞控制相关的数据:用于动态调整发送速率以避免网络拥塞。 + 同步修复窗口:确保接收方在数据丢失时能够及时恢复。 + 发送方状态通知:提供发送方的状态信息,如就绪状态、发送速率等。 + ![image.png](image/norm5.png) **instance_id(16 位)** 当前参与 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消息。