searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

JT/T808之Nack

2024-07-31 09:49:44
60
0

1.背景

在JT/T808协议中,消息体长度用10位无符号数表示,最大为1023个字节。当涉及到大数据传输时,采用分包传输方式。在网络状态不佳导致分包丢失时,服务端可通过补传分包请求通知客户端重新发送丢失数据,这要求服务端具备Nack机制。协议文档详见下图:

2. Nack机制详解

2.1 Nack概念

ACK(确认应答)表示到达通知技术,接收方在接收数据后向发送方发送“已接收数据”的消息(ACK),确保消息可靠传输。相反,NACK(否定应答)在未收到数据时通知发送方“未收到消息”。

2.2 与实时音视频的Nack区别

· 已知初始包序号为1

· 已知最后一个包序号为消息总包数大小

2.3 何时发送请求

2.3.1. 定时收集丢失数据并发送(按往返时间间隔)

2.3.2. 收到包后立即检查并发送(实时性高)

· 在收到数据前检查包序号,如有丢失包则发送重发请求,若重发未完成则列入重发请求列表。

· 发送丢失包请求后的1.x*rtt时间后重发,重发次数可配置,从第一次发送开始计算,保留时间可配置。

· 无法通过后续包来检查时,尾包丢失时机及发送请求,若重发队列为空且时间x*rtt后未接收数据包则认为尾包丢失。

2.4 发送数量控制

2.4.1. 一个Nack请求包含重传包数量

· 不得超过(1023-2(流水号)-2(重传包总数))/2 = 509

· 数量可配置,值越小实时性越高。

2.5. RTT修正

发送请求包以更新发送时间,收到后更新rtt时间

3. 实测结果

3.1. 模拟发送端丢包率约为33%(每个补包请求包含一个丢失包)

3.1.1. 随机生成丢失数据

根据打印预测,发送方需发送至少26+1+1+1+2+3+1+2+2=39个包,服务端需发送至少13个补包请求(一次nack一个丢包)。

3.1.2. 发送端共发送39个数据包

3.1.3. 服务端发送13个补包请求

总结

上述Nack机制可以更加高效和稳定地处理数据传输中的丢包问题,确保数据的完整性和传输的可靠性。

 

0条评论
0 / 1000
l****n
4文章数
0粉丝数
l****n
4 文章 | 0 粉丝
l****n
4文章数
0粉丝数
l****n
4 文章 | 0 粉丝
原创

JT/T808之Nack

2024-07-31 09:49:44
60
0

1.背景

在JT/T808协议中,消息体长度用10位无符号数表示,最大为1023个字节。当涉及到大数据传输时,采用分包传输方式。在网络状态不佳导致分包丢失时,服务端可通过补传分包请求通知客户端重新发送丢失数据,这要求服务端具备Nack机制。协议文档详见下图:

2. Nack机制详解

2.1 Nack概念

ACK(确认应答)表示到达通知技术,接收方在接收数据后向发送方发送“已接收数据”的消息(ACK),确保消息可靠传输。相反,NACK(否定应答)在未收到数据时通知发送方“未收到消息”。

2.2 与实时音视频的Nack区别

· 已知初始包序号为1

· 已知最后一个包序号为消息总包数大小

2.3 何时发送请求

2.3.1. 定时收集丢失数据并发送(按往返时间间隔)

2.3.2. 收到包后立即检查并发送(实时性高)

· 在收到数据前检查包序号,如有丢失包则发送重发请求,若重发未完成则列入重发请求列表。

· 发送丢失包请求后的1.x*rtt时间后重发,重发次数可配置,从第一次发送开始计算,保留时间可配置。

· 无法通过后续包来检查时,尾包丢失时机及发送请求,若重发队列为空且时间x*rtt后未接收数据包则认为尾包丢失。

2.4 发送数量控制

2.4.1. 一个Nack请求包含重传包数量

· 不得超过(1023-2(流水号)-2(重传包总数))/2 = 509

· 数量可配置,值越小实时性越高。

2.5. RTT修正

发送请求包以更新发送时间,收到后更新rtt时间

3. 实测结果

3.1. 模拟发送端丢包率约为33%(每个补包请求包含一个丢失包)

3.1.1. 随机生成丢失数据

根据打印预测,发送方需发送至少26+1+1+1+2+3+1+2+2=39个包,服务端需发送至少13个补包请求(一次nack一个丢包)。

3.1.2. 发送端共发送39个数据包

3.1.3. 服务端发送13个补包请求

总结

上述Nack机制可以更加高效和稳定地处理数据传输中的丢包问题,确保数据的完整性和传输的可靠性。

 

文章来自个人专栏
JT/T808
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0